ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part54
https://mevius.5ch.net/test/read.cgi/tech/1527334657/
探検
Excel VBA 質問スレ Part55
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/07/22(日) 14:13:18.78ID:/fuF+goF182デフォルトの名無しさん
2018/08/04(土) 20:00:16.54ID:FI6ie7QF バグ修正
Function あるかな(a, b)
If InStr("&" & Join(a, "&") & "&", "&" & b & "&") Then
あるかな = True
Else
あるかな = False
End If
End Function
Function あるかな(a, b)
If InStr("&" & Join(a, "&") & "&", "&" & b & "&") Then
あるかな = True
Else
あるかな = False
End If
End Function
183デフォルトの名無しさん
2018/08/04(土) 20:08:45.16ID:ClJJf5ah Functionの戻り値を関数名に代入する構文が最高に気持ち悪いんだけどどうにかならんの?
184デフォルトの名無しさん
2018/08/04(土) 20:39:40.48ID:A9MJ7JgF はじめまして。
下記のようなマクロを組もうと考えています。
x人の生徒がいます。
この生徒を1グループあたりy人となるようにzグループにわけます。
このときグループ毎の生徒のテストの平均点の差が小さく、またグループ毎の標準偏差の差も小さくしたいです。
このようなマクロを作るのにあたって、どのような方向性で作成していけば良いでしょうか。
下記のようなマクロを組もうと考えています。
x人の生徒がいます。
この生徒を1グループあたりy人となるようにzグループにわけます。
このときグループ毎の生徒のテストの平均点の差が小さく、またグループ毎の標準偏差の差も小さくしたいです。
このようなマクロを作るのにあたって、どのような方向性で作成していけば良いでしょうか。
185デフォルトの名無しさん
2018/08/04(土) 21:04:07.47ID:nAdkHQiH >>184
マクロ?
マクロ?
186デフォルトの名無しさん
2018/08/04(土) 21:04:16.50ID:u8rcbYXZ187デフォルトの名無しさん
2018/08/04(土) 21:22:04.15ID:AH7fLvgn188デフォルトの名無しさん
2018/08/04(土) 21:33:22.58ID:BuSBdH9D189デフォルトの名無しさん
2018/08/04(土) 21:38:34.48ID:h4pZIq0i190184
2018/08/04(土) 21:44:58.48ID:VLm3wLVC >>186
レスありがとうございます。
しかし、その方法だと点数のばらつきが大きいときに、各グループごとの平均と標準偏差が均等にならずに使えないんですよね、、、
私としては下記の手順でできるのではないかと考えています。
@コンボボックスでグループ数と、グループ毎の生徒数を選択してもらう。
Aエクセルに新しいシートを作る
B既存のシートに記入されている学生について、1の条件のすべての組み合わせを、2で作成した新しいシートのセルに列挙する
C3で書き出したそれぞれの組み合わせについて既存のシートの点数を参照し、average関数およびstdev関数を用いて平均及び標準偏差を2で作成した新しいシートに書き出す
D3の各組み合わせについて、グループ毎の平均のばらつきの少ないものを上位 何%かのみを抽出
E5で抽出した組み合わせについてさらに、グループ毎の標準偏差のばらつきの少ないものを上位 何%かのみ抽出
質問としては
a)他に良い方法があるか
b)組み合わせを書き出す際に重複を作り出さないようにするためにはどのようにすれば良いか
の2点です。
これらについて特に詳しく教えていただけないでしょうか。
よろしくお願いいたします。
レスありがとうございます。
しかし、その方法だと点数のばらつきが大きいときに、各グループごとの平均と標準偏差が均等にならずに使えないんですよね、、、
私としては下記の手順でできるのではないかと考えています。
@コンボボックスでグループ数と、グループ毎の生徒数を選択してもらう。
Aエクセルに新しいシートを作る
B既存のシートに記入されている学生について、1の条件のすべての組み合わせを、2で作成した新しいシートのセルに列挙する
C3で書き出したそれぞれの組み合わせについて既存のシートの点数を参照し、average関数およびstdev関数を用いて平均及び標準偏差を2で作成した新しいシートに書き出す
D3の各組み合わせについて、グループ毎の平均のばらつきの少ないものを上位 何%かのみを抽出
E5で抽出した組み合わせについてさらに、グループ毎の標準偏差のばらつきの少ないものを上位 何%かのみ抽出
質問としては
a)他に良い方法があるか
b)組み合わせを書き出す際に重複を作り出さないようにするためにはどのようにすれば良いか
の2点です。
これらについて特に詳しく教えていただけないでしょうか。
よろしくお願いいたします。
191デフォルトの名無しさん
2018/08/04(土) 21:47:53.70ID:AH7fLvgn >>183
Pascal由来の構文だからいまさらどうしようもない
Pascal由来の構文だからいまさらどうしようもない
192デフォルトの名無しさん
2018/08/04(土) 21:55:39.30ID:ClJJf5ah >>187
VBA専門の人って変な常識で固まってるからしょうがない
VBA専門の人って変な常識で固まってるからしょうがない
193デフォルトの名無しさん
2018/08/04(土) 21:56:58.85ID:ClJJf5ah194デフォルトの名無しさん
2018/08/04(土) 22:05:27.29ID:h4pZIq0i195デフォルトの名無しさん
2018/08/04(土) 22:07:10.27ID:h4pZIq0i >>190
大体でいいならrand()で時間かけて総当たりして、最も偏差が少ない物で良いと思う
大体でいいならrand()で時間かけて総当たりして、最も偏差が少ない物で良いと思う
196デフォルトの名無しさん
2018/08/04(土) 22:29:32.76ID:ZYatmaNb197デフォルトの名無しさん
2018/08/04(土) 22:42:04.41ID:qDTSwX/K >>184
ソルバーアドインのエボリューショナリーエンジンで解決できそう
生徒のグループ分けをなるべく少ない変数で表すモデル作るのが難しそうだが
バイトのシフト表作ってみるみたいなサイトあった気がするから参考に
頑張れば数理的に最適解も求まりそう
ソルバーアドインのエボリューショナリーエンジンで解決できそう
生徒のグループ分けをなるべく少ない変数で表すモデル作るのが難しそうだが
バイトのシフト表作ってみるみたいなサイトあった気がするから参考に
頑張れば数理的に最適解も求まりそう
198デフォルトの名無しさん
2018/08/04(土) 22:43:45.76ID:h4pZIq0i >>196
いやまぁそうなんだけど、理解が浅い時はそう感じてたよ
いやまぁそうなんだけど、理解が浅い時はそう感じてたよ
199デフォルトの名無しさん
2018/08/04(土) 23:00:54.48ID:ClJJf5ah >>194
なんでグローバルにしたの?
なんでグローバルにしたの?
200デフォルトの名無しさん
2018/08/04(土) 23:15:34.93ID:vm6Y2AFh instr(join(だと部分一致で誤爆する
201デフォルトの名無しさん
2018/08/04(土) 23:17:23.65ID:h4pZIq0i202184
2018/08/04(土) 23:26:11.15ID:A9MJ7JgF203デフォルトの名無しさん
2018/08/04(土) 23:26:28.61ID:ClJJf5ah204デフォルトの名無しさん
2018/08/04(土) 23:27:52.91ID:u3c/0jtm ref使えばいいってなるわな
205デフォルトの名無しさん
2018/08/05(日) 00:06:17.04ID:VayD9W7b >>203
知るかボケ
知るかボケ
206デフォルトの名無しさん
2018/08/05(日) 00:32:29.81ID:iOJlEZ6A >>202
ここは何のスレだかわかっているか?低脳
ここは何のスレだかわかっているか?低脳
207デフォルトの名無しさん
2018/08/05(日) 01:06:08.74ID:TorrOw0p >>184
例えば、40人を、5グループ8人毎
min(最大平均点 - 最小平均点)
min(最大標準偏差 - 最小標準偏差)
こういう問題は、Ruby のアルゴリズムの問題だろ。
combination, permutation とか
こんな問題は、一筋縄ではいかない。
ものすごい組み合わせ爆発が起こるから、vba なら、何日も掛かる
例えば、40人を、5グループ8人毎
min(最大平均点 - 最小平均点)
min(最大標準偏差 - 最小標準偏差)
こういう問題は、Ruby のアルゴリズムの問題だろ。
combination, permutation とか
こんな問題は、一筋縄ではいかない。
ものすごい組み合わせ爆発が起こるから、vba なら、何日も掛かる
208デフォルトの名無しさん
2018/08/05(日) 01:14:27.29ID:jrr7Gub0 そんなん言語関係ないやん、アルゴリズムの問題だろ
Rubyの関数で短時間で解ける問題なら、VBAでも数倍ぐらいの時間で同じ結果は出せる
Rubyの関数で短時間で解ける問題なら、VBAでも数倍ぐらいの時間で同じ結果は出せる
209207
2018/08/05(日) 01:17:12.67ID:TorrOw0p >48人を、1グループあたり8人の6グループ
グループA は、48*47*46*45* 44*43*42*41 / 8!
グループB は、40*39*38*37* 36*35*34*33 / 8!
...
グループF は、8! / 8! = 1
ここから、A〜F のグループ名を変えるだけで、
同一になるものを省くから、6! で割る
グループA は、48*47*46*45* 44*43*42*41 / 8!
グループB は、40*39*38*37* 36*35*34*33 / 8!
...
グループF は、8! / 8! = 1
ここから、A〜F のグループ名を変えるだけで、
同一になるものを省くから、6! で割る
210207
2018/08/05(日) 01:22:35.24ID:TorrOw0p 48人分のデータを作って「プログラミングのお題スレ」にでも書き込んでみ。
誰か解けるか、計算時間が掛かりすぎて解けないか
こういうのはプログラミングコンテストの問題だから、
vba で解くような問題ではない!
誰か解けるか、計算時間が掛かりすぎて解けないか
こういうのはプログラミングコンテストの問題だから、
vba で解くような問題ではない!
211デフォルトの名無しさん
2018/08/05(日) 01:28:53.98ID:88RY240q だからソルバー使えって
数理計画法とか大学でやらなかったのか?
数理計画法とか大学でやらなかったのか?
212デフォルトの名無しさん
2018/08/05(日) 02:38:17.19ID:Gfvh6gaU 夏休みの宿題は自分でやれ
213デフォルトの名無しさん
2018/08/05(日) 08:28:04.96ID:jOOhioBF214デフォルトの名無しさん
2018/08/05(日) 08:47:11.10ID:fib/Q9e8 >>203
戻り値を使わないという回避策なんじゃないの?
そもそも何が気持ち悪いのか分からない。
プログラミング経験無ければReturn 0よりVBAの方が感覚的にぴったり来るわ。
気持ち悪いという人はa=a+1を気持ち悪いと思う人?
関数名に代入する?
関数名じゃない。
関数そのものに代入してるというか、関数そのものを定義しているんでしょ。
俺は初めて見た時にすんなり頭に入ったね。
戻り値を使わないという回避策なんじゃないの?
そもそも何が気持ち悪いのか分からない。
プログラミング経験無ければReturn 0よりVBAの方が感覚的にぴったり来るわ。
気持ち悪いという人はa=a+1を気持ち悪いと思う人?
関数名に代入する?
関数名じゃない。
関数そのものに代入してるというか、関数そのものを定義しているんでしょ。
俺は初めて見た時にすんなり頭に入ったね。
215デフォルトの名無しさん
2018/08/05(日) 09:53:33.07ID:DQLB2G4w 何故関数名に代入するのが気持ち悪く感じるのかというと、後に述べるような危険性を無視しているからだと思う。
1.戻り値を関数名に代入しなければならない。
プロシャージャ中に何度も関数名が出てくるため、関数名を変更した時に変え忘れてエラーになることがある。
例えばhoge()全体をコピーして挙動の異なるhoge2を作ったとき、hoge2の中のhoge=***はコンパイルエラーにならないめ、テストするまでエラーを発見できない。
※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良いのは分かっているが、そういう問題ではない。
対処法としては、関数の最初にDim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。
2.戻り値を設定していないのにExit Subできてしまう。
せっかく1の対処法実施しても途中でExit Subされたら意味がない。
せめてExit Sub 戻り値 という書き方ができればよかったのだが。
対処法としてはExit Subを禁止して、そもそもExitが必要ない書き方に変えるかEnd Function直前までワープするGoToを使用する。
よって、関数を定義するときの推奨テンプレ
Function hoge() As Variant
Dim Ret As Variant
'-----
'処理
'Exit Subは禁止。GoTo ExitSubを使うこと
'-----
ExitSub:
hoge = Ret
End Function
もちろん異論は認める。
1.戻り値を関数名に代入しなければならない。
プロシャージャ中に何度も関数名が出てくるため、関数名を変更した時に変え忘れてエラーになることがある。
例えばhoge()全体をコピーして挙動の異なるhoge2を作ったとき、hoge2の中のhoge=***はコンパイルエラーにならないめ、テストするまでエラーを発見できない。
※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良いのは分かっているが、そういう問題ではない。
対処法としては、関数の最初にDim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。
2.戻り値を設定していないのにExit Subできてしまう。
せっかく1の対処法実施しても途中でExit Subされたら意味がない。
せめてExit Sub 戻り値 という書き方ができればよかったのだが。
対処法としてはExit Subを禁止して、そもそもExitが必要ない書き方に変えるかEnd Function直前までワープするGoToを使用する。
よって、関数を定義するときの推奨テンプレ
Function hoge() As Variant
Dim Ret As Variant
'-----
'処理
'Exit Subは禁止。GoTo ExitSubを使うこと
'-----
ExitSub:
hoge = Ret
End Function
もちろん異論は認める。
216デフォルトの名無しさん
2018/08/05(日) 09:56:54.93ID:d78e98dl217デフォルトの名無しさん
2018/08/05(日) 10:15:24.82ID:C8NdcnMU218デフォルトの名無しさん
2018/08/05(日) 10:15:26.66ID:88RY240q >>216
さてはまじめに数学やってなかったな?
さてはまじめに数学やってなかったな?
219デフォルトの名無しさん
2018/08/05(日) 10:19:10.37ID:C8NdcnMU >>215
> 対処法としては、関数の最初にDim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。
手間を増やしてバグの確率上げるとか最悪の対処法だな w
そもそも2.の対処ができるなら書き換える個所は1箇所になるからこんなアホな対処法は意味がない
> 対処法としては、関数の最初にDim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。
手間を増やしてバグの確率上げるとか最悪の対処法だな w
そもそも2.の対処ができるなら書き換える個所は1箇所になるからこんなアホな対処法は意味がない
220デフォルトの名無しさん
2018/08/05(日) 10:20:36.92ID:C8NdcnMU221デフォルトの名無しさん
2018/08/05(日) 10:27:17.45ID:88RY240q 決め事だからどうでもいいけど代入が=なのに名前付き引数に渡すときは:=なのが統一感なくて気持ち悪い
222デフォルトの名無しさん
2018/08/05(日) 10:37:44.10ID:R+WsVzw5 If文とか
冗長になっても数年後に見ても簡単に分かるようにしとく事も大事だと思うけど
冗長になっても数年後に見ても簡単に分かるようにしとく事も大事だと思うけど
223デフォルトの名無しさん
2018/08/05(日) 10:58:15.16ID:VayD9W7b >>215
エラー処理がめんどくさくなりそう
エラー処理がめんどくさくなりそう
224デフォルトの名無しさん
2018/08/05(日) 11:02:08.70ID:lCYlyBjK225デフォルトの名無しさん
2018/08/05(日) 11:10:34.73ID:vw7t6kWc >>221
= だと式と区別がつかないから
= だと式と区別がつかないから
226デフォルトの名無しさん
2018/08/05(日) 11:12:01.18ID:vw7t6kWc227デフォルトの名無しさん
2018/08/05(日) 11:18:09.78ID:DQLB2G4w >>219
バグの確率が上がる状況ってどんな時?具体例を上げてくれ。
>そもそも2.の対処ができるなら書き換える個所は1箇所になるからこんなアホな対処法は意味がない
2の対処によって関数名に代入するのを1回にしてるんだが。どういう意味?
>>223
エラー対処を組み込んでも特に違和感ないと思うのだけど、どういう時?
Function hoge() As Variant
Dim Ret As Variant
'-----
On Error GoTo err1
Ret = 1 + "a"
If True Then GoTo ExitSub
'-----
GoTo ExitSub
err1:
Debug.Print Err.Number & Err.Description
Resume Next
ExitSub:
hoge = Ret
End Function
そもそもこの書き方って、自然と起こりうるものでコーディングルールとして定めるか臨機応変に使うかって話だと思うのだけどどうなん。
バグの確率が上がる状況ってどんな時?具体例を上げてくれ。
>そもそも2.の対処ができるなら書き換える個所は1箇所になるからこんなアホな対処法は意味がない
2の対処によって関数名に代入するのを1回にしてるんだが。どういう意味?
>>223
エラー対処を組み込んでも特に違和感ないと思うのだけど、どういう時?
Function hoge() As Variant
Dim Ret As Variant
'-----
On Error GoTo err1
Ret = 1 + "a"
If True Then GoTo ExitSub
'-----
GoTo ExitSub
err1:
Debug.Print Err.Number & Err.Description
Resume Next
ExitSub:
hoge = Ret
End Function
そもそもこの書き方って、自然と起こりうるものでコーディングルールとして定めるか臨機応変に使うかって話だと思うのだけどどうなん。
228デフォルトの名無しさん
2018/08/05(日) 11:31:30.01ID:7RpOjRbA 変数宣言強制にしてれば関数名変えた時、戻り値返すための関数名も変更しないとエラーになるんじゃないの?
229デフォルトの名無しさん
2018/08/05(日) 11:42:23.57ID:VayD9W7b230デフォルトの名無しさん
2018/08/05(日) 12:01:55.81ID:jOOhioBF231デフォルトの名無しさん
2018/08/05(日) 12:06:39.32ID:DQLB2G4w232デフォルトの名無しさん
2018/08/05(日) 12:11:44.20ID:C8NdcnMU233デフォルトの名無しさん
2018/08/05(日) 12:13:45.38ID:C8NdcnMU234デフォルトの名無しさん
2018/08/05(日) 12:22:01.77ID:C8NdcnMU > ※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良いのは分かっているが、そういう問題ではない。
> ただあまりたくさん使ってると次々とコンパイルエラー出てイラっとするだけで・・・。
わかってるけどやりたくない
でもいらつくとかちょっと病院に行った方がいいレベル
> ただあまりたくさん使ってると次々とコンパイルエラー出てイラっとするだけで・・・。
わかってるけどやりたくない
でもいらつくとかちょっと病院に行った方がいいレベル
235デフォルトの名無しさん
2018/08/05(日) 12:32:44.13ID:jOOhioBF236デフォルトの名無しさん
2018/08/05(日) 12:39:05.42ID:DQLB2G4w >>232
>記述量が増えればバグは増える、常識
そういう考え方もよく分かるよ。
だが途中で関数名代入を多様するのと、コーディングルールで途中でExitするというテンプレを定めるのとでは、バグの発生率は前者のほうが高いと自分は評価している。
実際この運用でうまく行ってるし意味がないなんてことはない。
そもそもは関数名代入が気持ち悪いと感じる原因と、自分がやってる対処法を上げて有用な異論がないか知りたかっただけだし。
>記述量が増えればバグは増える、常識
そういう考え方もよく分かるよ。
だが途中で関数名代入を多様するのと、コーディングルールで途中でExitするというテンプレを定めるのとでは、バグの発生率は前者のほうが高いと自分は評価している。
実際この運用でうまく行ってるし意味がないなんてことはない。
そもそもは関数名代入が気持ち悪いと感じる原因と、自分がやってる対処法を上げて有用な異論がないか知りたかっただけだし。
237デフォルトの名無しさん
2018/08/05(日) 12:46:59.88ID:jOOhioBF 記述量が増えるったって Dim ret と 最後の代入の2行だけじゃん。
途中の 「関数名 = 〜 」 という代入の記述を減らせるんだったら大した害悪じゃない。
最初からそういう話をしているのにね。
途中の 「関数名 = 〜 」 という代入の記述を減らせるんだったら大した害悪じゃない。
最初からそういう話をしているのにね。
238デフォルトの名無しさん
2018/08/05(日) 12:58:38.58ID:d6sOKofu239デフォルトの名無しさん
2018/08/05(日) 13:00:05.97ID:d6sOKofu >>238
ヒープ使って合計の少ないものに足してます
ヒープ使って合計の少ないものに足してます
240デフォルトの名無しさん
2018/08/05(日) 13:30:42.82ID:VayD9W7b 行き違いがあるんじゃない?
コーディングルールとして決められていれば、多少記述が増えてもそんなもん何の問題もない
コーディングルールがない状態でいきなり>>227みたいな記述が出てくれば、ボンクラは意味がわからずに戸惑うだろう
コーディングルールとして決められていれば、多少記述が増えてもそんなもん何の問題もない
コーディングルールがない状態でいきなり>>227みたいな記述が出てくれば、ボンクラは意味がわからずに戸惑うだろう
241デフォルトの名無しさん
2018/08/05(日) 13:51:42.51ID:7Eiwzs5v な?
たかが返り値を返すだけの話なのに
グローバルにするだのRetに一時保存するだのExit Sub禁止するだの
名前を変えるときは注意深く使ってるとこ全部変えるだの
謎のオレオレルールが一気に湧き出してきた
これが関数名に代入方式の弊害だよ
VBAに染まってない一般的なプログラマなら
「関数名に戻り値代入ってなんかキモくね?」「せやなぁなんでreturn文ないんやろねぇ」
こう一瞬で同意を得られるはずなんだがVBAワールドだとこうなってしまう
まるで異世界に迷い込んだような感覚
たかが返り値を返すだけの話なのに
グローバルにするだのRetに一時保存するだのExit Sub禁止するだの
名前を変えるときは注意深く使ってるとこ全部変えるだの
謎のオレオレルールが一気に湧き出してきた
これが関数名に代入方式の弊害だよ
VBAに染まってない一般的なプログラマなら
「関数名に戻り値代入ってなんかキモくね?」「せやなぁなんでreturn文ないんやろねぇ」
こう一瞬で同意を得られるはずなんだがVBAワールドだとこうなってしまう
まるで異世界に迷い込んだような感覚
242デフォルトの名無しさん
2018/08/05(日) 13:57:46.59ID:7RpOjRbA VB.netもreturnなんだな
243デフォルトの名無しさん
2018/08/05(日) 14:22:10.24ID:C8NdcnMU244デフォルトの名無しさん
2018/08/05(日) 15:39:03.72ID:fib/Q9e8 そもそも、仮に何度も関数名?に代入したとしてもその関数が長く無ければ混乱することも無い。
長い関数はそもそもダメるわけで最初から混乱することは無い。
関数を100行程度にするってのは常識だろ。
長い関数はそもそもダメるわけで最初から混乱することは無い。
関数を100行程度にするってのは常識だろ。
245デフォルトの名無しさん
2018/08/05(日) 16:14:10.59ID:7Eiwzs5v 100は長すぎだろ
246デフォルトの名無しさん
2018/08/05(日) 16:31:24.96ID:OTeO2/4+247デフォルトの名無しさん
2018/08/05(日) 16:32:17.90ID:lCYlyBjK 書き間違えでしょwww
俺は最長でも60行くらいだ。
それはともかく、関数名は最終的な答えを代入するためのものであって、
途中の値なんか決して代入したくないよって理由じゃないの?
少なくとも俺はそうだ。
俺は最長でも60行くらいだ。
それはともかく、関数名は最終的な答えを代入するためのものであって、
途中の値なんか決して代入したくないよって理由じゃないの?
少なくとも俺はそうだ。
248デフォルトの名無しさん
2018/08/05(日) 16:33:09.91ID:lCYlyBjK 書き間違えじゃないのかよ
249デフォルトの名無しさん
2018/08/05(日) 16:39:11.36ID:OTeO2/4+ returnのある言語から入ってきたから違和感を感じるのかも知れないがreturnよりは自然だろ。
そもそも俺は関数名?に代入するということを習ったことが無い。
最初にFunctionプロシージャを見て全てを理解した。
自然に理解出来た。
そもそも俺は関数名?に代入するということを習ったことが無い。
最初にFunctionプロシージャを見て全てを理解した。
自然に理解出来た。
250デフォルトの名無しさん
2018/08/05(日) 16:53:49.71ID:DQLB2G4w251デフォルトの名無しさん
2018/08/05(日) 17:02:35.19ID:C8NdcnMU > 関数を100行程度にするってのは常識だろ。
って言うのを限界と言うのは苦しいだろ w
って言うのを限界と言うのは苦しいだろ w
252デフォルトの名無しさん
2018/08/05(日) 17:40:35.93ID:FkgLp/sd ちょっと待ってほしい
他の言語なら50行で書ける関数もVBAだと100行に膨れ上がるから仕方ないのではないだろうか
他の言語なら50行で書ける関数もVBAだと100行に膨れ上がるから仕方ないのではないだろうか
253デフォルトの名無しさん
2018/08/05(日) 18:38:48.57ID:FpUB4uXn Cプログラミング診断室の人がVBAに言及するのか?
VBAを使ってはいけない原理主義者の人は相変わらずこじつけがスゴイなw
VBAを使ってはいけない原理主義者の人は相変わらずこじつけがスゴイなw
254デフォルトの名無しさん
2018/08/05(日) 19:19:38.85ID:OTeO2/4+ なんじゃそりゃ。
どんな言語でも短くすべきなのは常識だろ。
50行だろうが100行だろうが関数名?代入しても混乱しないだろ。
どんな言語でも短くすべきなのは常識だろ。
50行だろうが100行だろうが関数名?代入しても混乱しないだろ。
255デフォルトの名無しさん
2018/08/05(日) 19:21:07.38ID:OTeO2/4+256デフォルトの名無しさん
2018/08/05(日) 19:23:39.26ID:NFAVCAdx 手続き型だとそこまで細分化してもかえってわかりにくいけどな
257デフォルトの名無しさん
2018/08/05(日) 19:31:00.06ID:C8NdcnMU >>255
プログラミングの前に日本語の勉強しなよ…
プログラミングの前に日本語の勉強しなよ…
258デフォルトの名無しさん
2018/08/05(日) 20:48:23.33ID:xg7vFkon 質問です
他のBookから元bookの"テーブル1"を参照するになやんで
Range(myBook.Name & "!テーブル1")
としましたがもうちょっといい方法はないのでしょうか
’
Sub 元WBのテーブル範囲を名前から参照したい()
Dim myBook As Workbook
Set myBook = ActiveWorkbook
Debug.Print Range("テーブル1").Address
'
Dim TempWB As Workbook
Set TempWB = Workbooks.Add
Debug.Print Range(myBook.Name & "!テーブル1").Address ’これ
End Sub
他のBookから元bookの"テーブル1"を参照するになやんで
Range(myBook.Name & "!テーブル1")
としましたがもうちょっといい方法はないのでしょうか
’
Sub 元WBのテーブル範囲を名前から参照したい()
Dim myBook As Workbook
Set myBook = ActiveWorkbook
Debug.Print Range("テーブル1").Address
'
Dim TempWB As Workbook
Set TempWB = Workbooks.Add
Debug.Print Range(myBook.Name & "!テーブル1").Address ’これ
End Sub
259デフォルトの名無しさん
2018/08/05(日) 20:48:50.34ID:VayD9W7b 他の言語ならともかくvbaなんてスクリプトなんだから多少行が増えても普通でしょ
260デフォルトの名無しさん
2018/08/05(日) 21:46:30.28ID:x6CWYB22 Workbook.worksheet.listobject("テーブル名")とか
261デフォルトの名無しさん
2018/08/06(月) 18:40:21.72ID:srsn67Ss 基本vbaは良くも悪くもやっつけ仕事片付ける用途だからなぁ
いっそ他人が読んだりメンテしたりすることを全く考慮しないのも手っていう記事見たことがあるけど
極論とはいえ、適材適所って意味ではそれも手だなとおもた
いっそ他人が読んだりメンテしたりすることを全く考慮しないのも手っていう記事見たことがあるけど
極論とはいえ、適材適所って意味ではそれも手だなとおもた
262デフォルトの名無しさん
2018/08/06(月) 21:02:33.88ID:nuq1zyN5 vbaは使い捨てのマクロとかしょっちゅうだしね
他の言語とはかなり正確が異なる
他の言語とはかなり正確が異なる
263デフォルトの名無しさん
2018/08/06(月) 21:57:34.50ID:DlUo5dI6 ・誰かが質問をする
↓
・とりあえず誰かが質問にダメ出しをする
↓
・そのうち誰かが回答する
↓
・俺の方が上と違う人が別の回答をする
↓
・どちらの回答も的外れなためにダメ出し合戦が始まる
↓
・不利になってきた方がそもそもVBA自体が糞と論点をそらす
↓
・とことん荒れる
↓
・各自「やっぱり俺の知識が至上だったな」と思い矛を収める
・質問者「で、俺の質問は…」
↓
・とりあえず誰かが質問にダメ出しをする
↓
・そのうち誰かが回答する
↓
・俺の方が上と違う人が別の回答をする
↓
・どちらの回答も的外れなためにダメ出し合戦が始まる
↓
・不利になってきた方がそもそもVBA自体が糞と論点をそらす
↓
・とことん荒れる
↓
・各自「やっぱり俺の知識が至上だったな」と思い矛を収める
・質問者「で、俺の質問は…」
264デフォルトの名無しさん
2018/08/06(月) 22:05:07.55ID:HWRT0k/I ・変なキチガイが唐突に持論を展開する
265デフォルトの名無しさん
2018/08/06(月) 22:09:50.77ID:1zJm1iav266デフォルトの名無しさん
2018/08/07(火) 01:29:58.65ID:8F5FPkZy 質問に対してこんな感じでいいんじゃね〜って教えるのと、
仕事で残すコードでも組み方は全然違ったりする
仕事で残すコードでも組み方は全然違ったりする
267デフォルトの名無しさん
2018/08/07(火) 12:27:46.44ID:o04k1oyM 変数を宣言したら直ぐに初期化するように、と解説サイトにはよく書かれているのですが、
ループカウンタも初期化する必要があるのでしょうか
ループカウンタも初期化する必要があるのでしょうか
268デフォルトの名無しさん
2018/08/07(火) 12:50:25.25ID:Hr4AgTw6 vbaレベルならいらないんじゃねて思うけどね
グローバルとかオブジェクト変数はやるけどそれ以外はして無いわ
グローバルとかオブジェクト変数はやるけどそれ以外はして無いわ
269デフォルトの名無しさん
2018/08/07(火) 12:58:23.99ID:zpIkHTy8 >>267
VBAの変数には既定値というのがちゃんと定義されているので、初期化は必ずしも必要ない
VBAの仕様を知らない人にコードを見せる可能性があるなら初期化してもいいけど、
俺個人の考えでは、宣言と初期値の代入は分けて書くべき
質問の文脈から判断して、ループカウンタとはFor文で使うカウンタ変数のことだろうけど、これは初期化しなくていい
しかし「ループカウンタ」はもっと広い概念を表すので、初期化が必要なケースも多々存在する
VBAの変数には既定値というのがちゃんと定義されているので、初期化は必ずしも必要ない
VBAの仕様を知らない人にコードを見せる可能性があるなら初期化してもいいけど、
俺個人の考えでは、宣言と初期値の代入は分けて書くべき
質問の文脈から判断して、ループカウンタとはFor文で使うカウンタ変数のことだろうけど、これは初期化しなくていい
しかし「ループカウンタ」はもっと広い概念を表すので、初期化が必要なケースも多々存在する
270デフォルトの名無しさん
2018/08/07(火) 15:43:33.88ID:JsLgKgln >>267
VBAではそもそも初期化できない。
VBAではそもそも初期化できない。
271デフォルトの名無しさん
2018/08/07(火) 18:35:06.29ID:o04k1oyM ありがとうございます。
特に初期値は設定せずにそのまま使うことにします。
ところで、VBAを触り始めてから他のプログラミング言語にも興味が出てきました。
使い勝手や習得時間を省みて、VBAを習得している者にとって一番コスパがいい言語は何でしょうか。
やはりVB.NETでしょうか。
スレチでしたら無視してください。
特に初期値は設定せずにそのまま使うことにします。
ところで、VBAを触り始めてから他のプログラミング言語にも興味が出てきました。
使い勝手や習得時間を省みて、VBAを習得している者にとって一番コスパがいい言語は何でしょうか。
やはりVB.NETでしょうか。
スレチでしたら無視してください。
272デフォルトの名無しさん
2018/08/07(火) 19:02:13.91ID:kevEyuIc なんかの言語をひとつ習得できる人なら何でもいいよ
言語別の利用者数、給与、分野、いろいろ調べてみ
言語別の利用者数、給与、分野、いろいろ調べてみ
273デフォルトの名無しさん
2018/08/07(火) 20:12:05.34ID:BqQIYASV274デフォルトの名無しさん
2018/08/07(火) 20:40:19.29ID:50B7Hyqk275デフォルトの名無しさん
2018/08/07(火) 20:44:08.52ID:BqQIYASV それにC#ならAndroidアプリも作れるしiOSアプリも作れる
276デフォルトの名無しさん
2018/08/07(火) 20:56:18.42ID:i+W8MTkr277デフォルトの名無しさん
2018/08/07(火) 21:13:08.98ID:zpIkHTy8 20代までならC#ぐらいは覚えておいたら転職で役に立つかも知れない
278デフォルトの名無しさん
2018/08/07(火) 21:33:21.73ID:eM6c9wNK 仕事で社内サイトの検索結果を数十ページ出して
その中から必要なデータをExcelに貼り付けるVBAをCreateObject(" InternetExplorer.Application"を使って作ったのだけど
社内ネットワークが重すぎて1ページあたり1分以上、つまり20ページあると20分以上というものすごい時間がかかります。
これ各ページの平行作業かなにかで、どんなにページ数があっても1分強くらいですます方法はないのですか?
その中から必要なデータをExcelに貼り付けるVBAをCreateObject(" InternetExplorer.Application"を使って作ったのだけど
社内ネットワークが重すぎて1ページあたり1分以上、つまり20ページあると20分以上というものすごい時間がかかります。
これ各ページの平行作業かなにかで、どんなにページ数があっても1分強くらいですます方法はないのですか?
279デフォルトの名無しさん
2018/08/07(火) 21:44:50.55ID:eM6c9wNK ちなみに今は
1ページ開いて、そのページを完全に読み取ったら(●ここに時間がかかっている。30秒〜60秒くらいか)、IEオブジェクトを利用してGetIdByIDなどでデータを読み込み、そのページを閉じ、
それをページ数だけ繰り返しています。
1ページ開いて、そのページを完全に読み取ったら(●ここに時間がかかっている。30秒〜60秒くらいか)、IEオブジェクトを利用してGetIdByIDなどでデータを読み込み、そのページを閉じ、
それをページ数だけ繰り返しています。
280デフォルトの名無しさん
2018/08/07(火) 21:58:48.99ID:zEgIKMkK 無いです
シス管に糞サイトが遅いぞって文句言いましょう
シス管に糞サイトが遅いぞって文句言いましょう
281デフォルトの名無しさん
2018/08/07(火) 22:03:53.33ID:eM6c9wNK いや、あるのでは?
他言語ではマルチスレッドというやつかな?
他言語ではマルチスレッドというやつかな?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 「すごいアイドル出てきた」「かわいすぎる」ラヴィット初登場の美女に視聴者驚き ≠ME櫻井もも [ヴァイヴァー★]
- 中国高官と話す外務省局長の表情、やばい [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【速報】中国が日中関係悪化は高市氏に責任と名指しで非難 [931948549]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- ヤフコメでもうすぐ共感したをうーんが上回る ネトウヨを煽れば簡単にうーんを集められるぞ [817148728]
- ネトウヨ論調決まる「寧ろ迷惑中国人観光客が減ることで日本人の旅行が活性化され経済的には影響ない」 <mark>[ひまわり学級]</mark> [511393199]
