Excel VBA 質問スレ Part55

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/07/22(日) 14:13:18.78ID:/fuF+goF
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part54
https://mevius.5ch.net/test/read.cgi/tech/1527334657/
2018/08/04(土) 07:34:19.25ID:h4pZIq0i
>>164
接続部分だけクラスにまとめるって感じ?
それならまぁ、わからんでもないけど・・・うーん
166デフォルトの名無しさん
垢版 |
2018/08/04(土) 08:36:12.58ID:hMaWSw1n
エクセルは簡単な関数までで出来ることに使う
定期で使ってコードを書くような事ならC#でWinアプリかWebアプリにする
そんな使い分けです
2018/08/04(土) 08:59:40.72ID:Pz55ajO/
ある文字が文字配列の要素の中に存在するかどうかを調べるには
for i = 0 to Ubound(配列)〜のようにして
添え字を使ったループで一個ずつ比較するしかないですかね?
Pythonなどのように、 値 in 配列 とかで一発で判定できると楽なのだが
2018/08/04(土) 09:27:21.51ID:iY2bfIdC
for eachあるよ
2018/08/04(土) 14:03:53.24ID:d9q3+5Xm
Worksheet Functionのmatchなら一発でしょ、インデックスはわからんけど
filter関数のほうが早いんだっけ?
てか職場の老害が作るコードがいちいちforでぶん回すコード書いててイライラ
2018/08/04(土) 14:10:44.90ID:AEBP847j
filterやmatchも中でforでぶん回してるよ
2018/08/04(土) 14:20:20.63ID:vm6Y2AFh
パフォーマンス無視でコードをシンプルにしたいだけなら Instr(Join( ))
2018/08/04(土) 14:50:32.42ID:MinsDCPQ
>>164
自分はAccessに繋ぐ所はクラス作らないからどんな所が上手くまとまると思うのか知りたいな。

自分はマ―クシートの管理と実際の用紙との比較をしやすいように管理上の結果(Excelシート)をForm上の用紙レイアウトに再現するようなプログラムでクラスを使ったのが良かった。
用紙上に配置するのはImageコントロールを使ったラジオボタンのようなものとテキストボックス、ラべル、他でユーザーが使う用紙にあわせて好きな位置に配置出来る編集モ―ドと配置後にデ―タにあわせてチェック状態を表示編集できる運用モードを持ったもの。
種類の違う可変個数のコントロールを同じように扱うのに便利。
2018/08/04(土) 15:05:27.11ID:iY2bfIdC
>>172
普通に接続して切断する処理はクラス使った方がキレイにまとまるよ
ファイル処理も同じ。
2018/08/04(土) 15:43:02.15ID:rFYImZyl
質問なのだが、エクセル関数とvba の使い分ける基準ってどうしてる?
2018/08/04(土) 16:55:00.51ID:K8sTmQ88
>>174
シート上で使うとき?
なければ作る。

コード上で使うとき?
簡潔に書けるほう、またはパフォーマンスのいい方。
>>174
2018/08/04(土) 17:18:02.49ID:/poCSM2A
>>167
文字配列ってなに?
Stringのことですか?
2018/08/04(土) 17:43:58.28ID:Pz55ajO/
>>176
このコードでいう test_string のことです
複数の値を取りうる入力項目のチェックなんかはいつもこうしています

Sub test()
Dim test_string As Variant
test_string = Array("one", "two", "three")

Dim i As Integer
For i = 0 To UBound(test_string)
If "one" = test_string(i) Then
MsgBox "one" & "はありまーす"
End If
Next
End Sub
2018/08/04(土) 17:49:50.34ID:rFYImZyl
シート上で使うとき!
2018/08/04(土) 17:51:01.98ID:/poCSM2A
>>177
ループで検索する、でいいじゃないですか。
一致(=)だけじゃなく Like での合致とかも選べるように汎用化しとくとなおよい
2018/08/04(土) 19:29:54.74ID:h4pZIq0i
>>174
重い時やミスしそうな処理が絡む時はvba
もちろん関数で実現できない時もvba

関数を使うのはビジュアルで見たい時

まぁ基本的には関数だな
2018/08/04(土) 19:58:42.71ID:FI6ie7QF
>>177
こういう処理は関数化した方がよい

Sub test()
  Dim test_string As Variant
  test_string = Array("one", "two", "three")

  If あるかな(test_string, "one") Then
    MsgBox "one" & "はありまーす"
  End If
End Sub

Function あるかな(a, b)
  If InStr(Join(a, "&"), b) Then
    あるかな = True
  Else
    あるかな = False
  End If
End Function
2018/08/04(土) 20:00:16.54ID:FI6ie7QF
バグ修正

Function あるかな(a, b)
If InStr("&" & Join(a, "&") & "&", "&" & b & "&") Then
あるかな = True
Else
あるかな = False
End If
End Function
2018/08/04(土) 20:08:45.16ID:ClJJf5ah
Functionの戻り値を関数名に代入する構文が最高に気持ち悪いんだけどどうにかならんの?
2018/08/04(土) 20:39:40.48ID:A9MJ7JgF
はじめまして。
下記のようなマクロを組もうと考えています。

x人の生徒がいます。
この生徒を1グループあたりy人となるようにzグループにわけます。
このときグループ毎の生徒のテストの平均点の差が小さく、またグループ毎の標準偏差の差も小さくしたいです。

このようなマクロを作るのにあたって、どのような方向性で作成していけば良いでしょうか。
2018/08/04(土) 21:04:07.47ID:nAdkHQiH
>>184
マクロ?
186デフォルトの名無しさん
垢版 |
2018/08/04(土) 21:04:16.50ID:u8rcbYXZ
>>184

→→→
←←←
→→→

こう割り振ればいんじゃないかな

A B C
-----
9 8 7
4 5 6
3 2 1
2018/08/04(土) 21:22:04.15ID:AH7fLvgn
>>177
> Dim test_string As Variant
> test_string = Array("one", "two", "three")
なんとなくだが名前はtest_stringsにして欲しいな

>>181
> If InStr(Join(a, "&"), b) Then
>  あるかな = True
> Else
>  あるかな = False
> End If
なんで
あるかな = InStr(Join(a, "&"), b)
って書かないんだろう…
2018/08/04(土) 21:33:22.58ID:BuSBdH9D
>>187
ほんこれ
ture/falseしか代入しないのに分岐する必要性がわからない。
2018/08/04(土) 21:38:34.48ID:h4pZIq0i
>>183
グローバル変数にでも代入してみるとか?
他の言語にも気持ち悪いとこいっぱいあるから気にしなくていいよ
C言語のint main()もそのint 0はどこへ返すんだよって気になるし
190184
垢版 |
2018/08/04(土) 21:44:58.48ID:VLm3wLVC
>>186
レスありがとうございます。
しかし、その方法だと点数のばらつきが大きいときに、各グループごとの平均と標準偏差が均等にならずに使えないんですよね、、、

私としては下記の手順でできるのではないかと考えています。
@コンボボックスでグループ数と、グループ毎の生徒数を選択してもらう。
Aエクセルに新しいシートを作る
B既存のシートに記入されている学生について、1の条件のすべての組み合わせを、2で作成した新しいシートのセルに列挙する
C3で書き出したそれぞれの組み合わせについて既存のシートの点数を参照し、average関数およびstdev関数を用いて平均及び標準偏差を2で作成した新しいシートに書き出す
D3の各組み合わせについて、グループ毎の平均のばらつきの少ないものを上位 何%かのみを抽出
E5で抽出した組み合わせについてさらに、グループ毎の標準偏差のばらつきの少ないものを上位 何%かのみ抽出

質問としては
a)他に良い方法があるか
b)組み合わせを書き出す際に重複を作り出さないようにするためにはどのようにすれば良いか
の2点です。
これらについて特に詳しく教えていただけないでしょうか。
よろしくお願いいたします。
2018/08/04(土) 21:47:53.70ID:AH7fLvgn
>>183
Pascal由来の構文だからいまさらどうしようもない
2018/08/04(土) 21:55:39.30ID:ClJJf5ah
>>187
VBA専門の人って変な常識で固まってるからしょうがない
193デフォルトの名無しさん
垢版 |
2018/08/04(土) 21:56:58.85ID:ClJJf5ah
>>189
???
グローバル?
まじでいみわからんどういうことなんだ
VBA職人の思考パターンほんと異次元なんだけど
2018/08/04(土) 22:05:27.29ID:h4pZIq0i
>>187>>192
多少冗長でもエクセルがうまく動いて正しい結果が得られるなら問題ない
手作業で10分かかるものが10秒になればそれでいいって世界
最適化すれば0.1秒になるところでも10秒かけていいのだよ
その10秒を最適化する時間で、別の5分の仕事を3秒に短縮する方がよっぽど大事

>>193
Public g
Sub s()
Debug.Print f
Debug.Print g
End Sub
Function f()
'これが嫌なら
f = "return f"
'こう書けば
g = "return g"
End Function
2018/08/04(土) 22:07:10.27ID:h4pZIq0i
>>190
大体でいいならrand()で時間かけて総当たりして、最も偏差が少ない物で良いと思う
2018/08/04(土) 22:29:32.76ID:ZYatmaNb
>>189
>C言語のint main()もそのint 0はどこへ返すんだよって気になるし

OSになんじゃないのか?
2018/08/04(土) 22:42:04.41ID:qDTSwX/K
>>184
ソルバーアドインのエボリューショナリーエンジンで解決できそう
生徒のグループ分けをなるべく少ない変数で表すモデル作るのが難しそうだが

バイトのシフト表作ってみるみたいなサイトあった気がするから参考に

頑張れば数理的に最適解も求まりそう
2018/08/04(土) 22:43:45.76ID:h4pZIq0i
>>196
いやまぁそうなんだけど、理解が浅い時はそう感じてたよ
2018/08/04(土) 23:00:54.48ID:ClJJf5ah
>>194
なんでグローバルにしたの?
2018/08/04(土) 23:15:34.93ID:vm6Y2AFh
instr(join(だと部分一致で誤爆する
2018/08/04(土) 23:17:23.65ID:h4pZIq0i
>>199
>Functionの戻り値を関数名に代入する構文が最高に気持ち悪い
って言ってる人がいたので回避策を提示しただけ
勿論こんなコード俺は書かないよ
202184
垢版 |
2018/08/04(土) 23:26:11.15ID:A9MJ7JgF
>>195
>>197
レスありがとうございます。

私がしようとしていたすべての組み合わせを試す方法だと、(仮に生徒48人を1グループあたり8人の6グループに分ける場合だと組み合わせの総数が4×10^30になってしまい、)かなり効率が悪いということですね。

アドバイスしていただいたソルバーを用いた方法とrand関数を用いた方法の双方について調査し、検討してみようと思います。
また行き詰まったら質問させてください!
その際はどうぞよろしくお願いいたします。
2018/08/04(土) 23:26:28.61ID:ClJJf5ah
>>201
いやぜんぜん回避策になってないじゃん
そもそも戻り値として返してないんだが
VBAコミュニティだとグローバル変数に入れると戻り値として返したことになるって風習でもあんの?
204デフォルトの名無しさん
垢版 |
2018/08/04(土) 23:27:52.91ID:u3c/0jtm
ref使えばいいってなるわな
2018/08/05(日) 00:06:17.04ID:VayD9W7b
>>203
知るかボケ
2018/08/05(日) 00:32:29.81ID:iOJlEZ6A
>>202
ここは何のスレだかわかっているか?低脳
2018/08/05(日) 01:06:08.74ID:TorrOw0p
>>184
例えば、40人を、5グループ8人毎

min(最大平均点 - 最小平均点)
min(最大標準偏差 - 最小標準偏差)

こういう問題は、Ruby のアルゴリズムの問題だろ。
combination, permutation とか

こんな問題は、一筋縄ではいかない。
ものすごい組み合わせ爆発が起こるから、vba なら、何日も掛かる
2018/08/05(日) 01:14:27.29ID:jrr7Gub0
そんなん言語関係ないやん、アルゴリズムの問題だろ

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! で割る
210207
垢版 |
2018/08/05(日) 01:22:35.24ID:TorrOw0p
48人分のデータを作って「プログラミングのお題スレ」にでも書き込んでみ。
誰か解けるか、計算時間が掛かりすぎて解けないか

こういうのはプログラミングコンテストの問題だから、
vba で解くような問題ではない!
2018/08/05(日) 01:28:53.98ID:88RY240q
だからソルバー使えって
数理計画法とか大学でやらなかったのか?
2018/08/05(日) 02:38:17.19ID:Gfvh6gaU
夏休みの宿題は自分でやれ
213デフォルトの名無しさん
垢版 |
2018/08/05(日) 08:28:04.96ID:jOOhioBF
>>200
その通りだよね
それにJoinなんて例に出た短い配列にしか通用しないし
2018/08/05(日) 08:47:11.10ID:fib/Q9e8
>>203
戻り値を使わないという回避策なんじゃないの?

そもそも何が気持ち悪いのか分からない。
プログラミング経験無ければReturn 0よりVBAの方が感覚的にぴったり来るわ。
気持ち悪いという人はa=a+1を気持ち悪いと思う人?

関数名に代入する?
関数名じゃない。
関数そのものに代入してるというか、関数そのものを定義しているんでしょ。
俺は初めて見た時にすんなり頭に入ったね。
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

もちろん異論は認める。
216デフォルトの名無しさん
垢版 |
2018/08/05(日) 09:56:54.93ID:d78e98dl
>>214
a=a+1
これのどこら辺が気持ち悪くなる部分なの?
2018/08/05(日) 10:15:24.82ID:C8NdcnMU
>>192
いやCとかでも
if(foo() == 0){
 return 1;
} else {
 return 0;
}
とか書くアホはいる
2018/08/05(日) 10:15:26.66ID:88RY240q
>>216
さてはまじめに数学やってなかったな?
2018/08/05(日) 10:19:10.37ID:C8NdcnMU
>>215
> 対処法としては、関数の最初にDim Retしておき、文中ではRetに戻り値を代入、End Sub直前に関数名にRetを代入する。
手間を増やしてバグの確率上げるとか最悪の対処法だな w
そもそも2.の対処ができるなら書き換える個所は1箇所になるからこんなアホな対処法は意味がない
2018/08/05(日) 10:20:36.92ID:C8NdcnMU
>>216
数学の等式としては成り立たん云々だろ
どうでもいいからスルーしとけ
2018/08/05(日) 10:27:17.45ID:88RY240q
決め事だからどうでもいいけど代入が=なのに名前付き引数に渡すときは:=なのが統一感なくて気持ち悪い
222デフォルトの名無しさん
垢版 |
2018/08/05(日) 10:37:44.10ID:R+WsVzw5
If文とか
冗長になっても数年後に見ても簡単に分かるようにしとく事も大事だと思うけど
2018/08/05(日) 10:58:15.16ID:VayD9W7b
>>215
エラー処理がめんどくさくなりそう
2018/08/05(日) 11:02:08.70ID:lCYlyBjK
>>219
関数名は普通の変数と同等には扱えないからRetを使うのが必須な場面はある。
だから別に悪手ではない
2018/08/05(日) 11:10:34.73ID:vw7t6kWc
>>221
= だと式と区別がつかないから
2018/08/05(日) 11:12:01.18ID:vw7t6kWc
>>224
> 関数名は普通の変数と同等には扱えないからRetを使うのが必須な場面はある。
そういう場合はそうすればいいだけ
そういう前提がない場合にまでそうする奴は単なるバカ
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

そもそもこの書き方って、自然と起こりうるものでコーディングルールとして定めるか臨機応変に使うかって話だと思うのだけどどうなん。
2018/08/05(日) 11:31:30.01ID:7RpOjRbA
変数宣言強制にしてれば関数名変えた時、戻り値返すための関数名も変更しないとエラーになるんじゃないの?
2018/08/05(日) 11:42:23.57ID:VayD9W7b
>>227
ごめん、なにか勘違いしてた
別にややこしくなかったね
230デフォルトの名無しさん
垢版 |
2018/08/05(日) 12:01:55.81ID:jOOhioBF
>>226

Retを使うという方法について>>219
> 手間を増やしてバグの確率上げるとか最悪の対処法だな w
と言い出したことから出ている話だが、
「手間が増える」とか「バグの確率上げる」という主張自体に根拠が無いよね。
>>224に書いた理由によりRetを使う方法は皆が習熟してるわけだから。

だからあんたの言う
>そういう前提がない場合にまでそうする奴は単なるバカ
も根拠薄弱。
2018/08/05(日) 12:06:39.32ID:DQLB2G4w
>>228
関数名変えるだけなら、コンパイルエラー出るから問題ないよ。
ただあまりたくさん使ってると次々とコンパイルエラー出てイラっとするだけで・・・。
2018/08/05(日) 12:11:44.20ID:C8NdcnMU
>>227
> バグの確率が上がる状況ってどんな時?具体例を上げてくれ。
記述量が増えればバグは増える、常識
> 2の対処によって関数名に代入するのを1回にしてるんだが。どういう意味?
だからそれなら1.の対処の意味がない
無駄なGoto増えるだけ
>>228の言うように関数名の変更忘れてたらOption Explicitでその関数に入る時にエラーになる
2018/08/05(日) 12:13:45.38ID:C8NdcnMU
>>230
>> そういう前提がない場合にまでそうする奴は単なるバカ
> も根拠薄弱。
必要もないのにコード量増やす奴はバカ
って書かないとわからんの? w
2018/08/05(日) 12:22:01.77ID:C8NdcnMU
> ※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良いのは分かっているが、そういう問題ではない。

> ただあまりたくさん使ってると次々とコンパイルエラー出てイラっとするだけで・・・。

わかってるけどやりたくない
でもいらつくとかちょっと病院に行った方がいいレベル
235デフォルトの名無しさん
垢版 |
2018/08/05(日) 12:32:44.13ID:jOOhioBF
>>233
最初の>>215の段階からRetが有効に使える場合のことしか書いてないよ

その前提を無視して>>219が変なこと言うから悪い
つまり>>219>>226>>233が悪い
2018/08/05(日) 12:39:05.42ID:DQLB2G4w
>>232
>記述量が増えればバグは増える、常識
そういう考え方もよく分かるよ。
だが途中で関数名代入を多様するのと、コーディングルールで途中でExitするというテンプレを定めるのとでは、バグの発生率は前者のほうが高いと自分は評価している。
実際この運用でうまく行ってるし意味がないなんてことはない。

そもそもは関数名代入が気持ち悪いと感じる原因と、自分がやってる対処法を上げて有用な異論がないか知りたかっただけだし。
237デフォルトの名無しさん
垢版 |
2018/08/05(日) 12:46:59.88ID:jOOhioBF
記述量が増えるったって Dim ret と 最後の代入の2行だけじゃん。
途中の 「関数名 = 〜 」 という代入の記述を減らせるんだったら大した害悪じゃない。
最初からそういう話をしているのにね。
238デフォルトの名無しさん
垢版 |
2018/08/05(日) 12:58:38.58ID:d6sOKofu
>>190
平均はできた、けど標準偏差はわからない
https://paiza.io/projects/rCXyBIojlQ87fN8Gkr2n5g
239デフォルトの名無しさん
垢版 |
2018/08/05(日) 13:00:05.97ID:d6sOKofu
>>238
ヒープ使って合計の少ないものに足してます
2018/08/05(日) 13:30:42.82ID:VayD9W7b
行き違いがあるんじゃない?
コーディングルールとして決められていれば、多少記述が増えてもそんなもん何の問題もない
コーディングルールがない状態でいきなり>>227みたいな記述が出てくれば、ボンクラは意味がわからずに戸惑うだろう
2018/08/05(日) 13:51:42.51ID:7Eiwzs5v
な?
たかが返り値を返すだけの話なのに
グローバルにするだのRetに一時保存するだのExit Sub禁止するだの
名前を変えるときは注意深く使ってるとこ全部変えるだの
謎のオレオレルールが一気に湧き出してきた
これが関数名に代入方式の弊害だよ

VBAに染まってない一般的なプログラマなら
「関数名に戻り値代入ってなんかキモくね?」「せやなぁなんでreturn文ないんやろねぇ」
こう一瞬で同意を得られるはずなんだがVBAワールドだとこうなってしまう
まるで異世界に迷い込んだような感覚
2018/08/05(日) 13:57:46.59ID:7RpOjRbA
VB.netもreturnなんだな
2018/08/05(日) 14:22:10.24ID:C8NdcnMU
>>235
> 最初の>>215の段階からRetが有効に使える場合のことしか書いてないよ
>>215が有効とか思ってるのはお前らだけ

>>236
> 実際この運用でうまく行ってるし意味がないなんてことはない。
お前らは勝手にやってればいい。

>>237
> 途中の 「関数名 = 〜 」 という代入の記述を減らせるんだったら大した害悪じゃない。
記述は減ってない
関数名を変更した時の変更量が減るだけ
しかも本人が書いてる通り
> ※コピペ直後に「完全に一一致」でプロシージャ内置換すれば良い
だけなのに、何故はそれはやりたくないらしい w
2018/08/05(日) 15:39:03.72ID:fib/Q9e8
そもそも、仮に何度も関数名?に代入したとしてもその関数が長く無ければ混乱することも無い。
長い関数はそもそもダメるわけで最初から混乱することは無い。

関数を100行程度にするってのは常識だろ。
2018/08/05(日) 16:14:10.59ID:7Eiwzs5v
100は長すぎだろ
2018/08/05(日) 16:31:24.96ID:OTeO2/4+
>>245
そうか?
Cプログラミング診断室の人が許容される限界は100行までと言ってたからそれに準じたまでだが。
それに、だったらお前さんは短い関数で混乱してたということ?
2018/08/05(日) 16:32:17.90ID:lCYlyBjK
書き間違えでしょwww
俺は最長でも60行くらいだ。

それはともかく、関数名は最終的な答えを代入するためのものであって、
途中の値なんか決して代入したくないよって理由じゃないの?
少なくとも俺はそうだ。
2018/08/05(日) 16:33:09.91ID:lCYlyBjK
書き間違えじゃないのかよ
2018/08/05(日) 16:39:11.36ID:OTeO2/4+
returnのある言語から入ってきたから違和感を感じるのかも知れないがreturnよりは自然だろ。

そもそも俺は関数名?に代入するということを習ったことが無い。
最初にFunctionプロシージャを見て全てを理解した。
自然に理解出来た。
2018/08/05(日) 16:53:49.71ID:DQLB2G4w
>>246,245
限界が100行なのであって、普段は50行とかに抑えるべきだと言いたかったんだと思う。
それを100行程度が常識だと勘違いしただけじゃないかな?
2018/08/05(日) 17:02:35.19ID:C8NdcnMU
> 関数を100行程度にするってのは常識だろ。
って言うのを限界と言うのは苦しいだろ w
2018/08/05(日) 17:40:35.93ID:FkgLp/sd
ちょっと待ってほしい
他の言語なら50行で書ける関数もVBAだと100行に膨れ上がるから仕方ないのではないだろうか
2018/08/05(日) 18:38:48.57ID:FpUB4uXn
Cプログラミング診断室の人がVBAに言及するのか?
VBAを使ってはいけない原理主義者の人は相変わらずこじつけがスゴイなw
2018/08/05(日) 19:19:38.85ID:OTeO2/4+
なんじゃそりゃ。
どんな言語でも短くすべきなのは常識だろ。

50行だろうが100行だろうが関数名?代入しても混乱しないだろ。
2018/08/05(日) 19:21:07.38ID:OTeO2/4+
>>251
何だ?
10行じゃマズい何かがあるとでも思ってるのか?

それはさすがにプログラミング知らなすぎ。
256デフォルトの名無しさん
垢版 |
2018/08/05(日) 19:23:39.26ID:NFAVCAdx
手続き型だとそこまで細分化してもかえってわかりにくいけどな
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
2018/08/05(日) 20:48:50.34ID:VayD9W7b
他の言語ならともかくvbaなんてスクリプトなんだから多少行が増えても普通でしょ
2018/08/05(日) 21:46:30.28ID:x6CWYB22
Workbook.worksheet.listobject("テーブル名")とか
2018/08/06(月) 18:40:21.72ID:srsn67Ss
基本vbaは良くも悪くもやっつけ仕事片付ける用途だからなぁ
いっそ他人が読んだりメンテしたりすることを全く考慮しないのも手っていう記事見たことがあるけど
極論とはいえ、適材適所って意味ではそれも手だなとおもた
2018/08/06(月) 21:02:33.88ID:nuq1zyN5
vbaは使い捨てのマクロとかしょっちゅうだしね
他の言語とはかなり正確が異なる
2018/08/06(月) 21:57:34.50ID:DlUo5dI6
・誰かが質問をする
 ↓
・とりあえず誰かが質問にダメ出しをする
 ↓
・そのうち誰かが回答する
 ↓
・俺の方が上と違う人が別の回答をする
 ↓
・どちらの回答も的外れなためにダメ出し合戦が始まる
 ↓
・不利になってきた方がそもそもVBA自体が糞と論点をそらす
 ↓
・とことん荒れる
 ↓
・各自「やっぱり俺の知識が至上だったな」と思い矛を収める


・質問者「で、俺の質問は…」
2018/08/06(月) 22:05:07.55ID:HWRT0k/I
・変なキチガイが唐突に持論を展開する
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況