スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
※前スレ
Excel VBA 質問スレ Part51
http://mevius.2ch.net/test/read.cgi/tech/1510107990/
探検
Excel VBA 質問スレ Part52
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/01/27(土) 20:25:05.67ID:Xe+uGT7T15デフォルトの名無しさん
2018/01/27(土) 23:58:06.82ID:v1Vq7O9g2018/01/28(日) 00:01:24.71ID:tSF66yjC
17デフォルトの名無しさん
2018/01/28(日) 00:03:07.53ID:8+IXgyMg2018/01/28(日) 00:06:37.18ID:tSF66yjC
>>17
定義もわからんでバカにするってどう言うことなのかよくわからんわ
メゾット君本人でもなけりゃなんも気にならないと思うんだけど
とにかく、そこはわかってないということはわかったからそれ以上興味ないわ
定義もわからんでバカにするってどう言うことなのかよくわからんわ
メゾット君本人でもなけりゃなんも気にならないと思うんだけど
とにかく、そこはわかってないということはわかったからそれ以上興味ないわ
2018/01/28(日) 00:07:58.80ID:mZQyM07n
いや、メゾット君はVBAのコードを読み書き出来ないんだから、このスレでは初歩的な事を聞いてくる初心者より下位やぞ
20デフォルトの名無しさん
2018/01/28(日) 00:12:08.48ID:BSlLksGg2018/01/28(日) 00:13:56.37ID:tSF66yjC
>>20
具体的に
具体的に
22デフォルトの名無しさん
2018/01/28(日) 00:18:17.28ID:8+IXgyMg2018/01/28(日) 00:22:13.43ID:NUwCXosq
>>5
ほならね理論で草
ほならね理論で草
2018/01/28(日) 00:26:24.39ID:tSF66yjC
>>22
それはその時のレスそのままの意味だよ
それはその時のレスそのままの意味だよ
2018/01/28(日) 12:43:11.93ID:iOPSu+uz
メゾット君1とはなんぞや
26デフォルトの名無しさん
2018/01/28(日) 13:52:51.41ID:8+IXgyMg 無能の>>1のことなんじゃね?しらんけど
2018/01/28(日) 14:14:41.52ID:XZzu/jLR
ここまで何の技術も質問も無い件
2018/01/28(日) 16:29:29.49ID:mZQyM07n
>>25
メゾット君とはプログラミングについての知識が一切無いにも関わらず、このスレに三年ほど前から張り付いていて、
具体性の無い罵詈雑言をレスし続けている名無しの一人
Methodの読み方が分からず「メゾット」と呼んだ事が名称の由来
まともな社会経験が無い為なのか、実用性が極端に薄い独特な思考法で会話をしようとする為、
回線を三つほど使い回して自演している時でも本人と特定出来てしまう
偶然映り込むよう装ってロレックスの腕時計を見せびらかすように写メに撮ってみたり(映り込み方は非常に不自然)、
プログラミングの本を読んで「変数」という概念の存在を数時間で認知できたことを褒めて欲しいと再三強調したり、
どうも虚栄心が異様に強い傾向にあるらしいが、現実では満たされない為に、このスレで他人を罵倒して鬱憤を晴らしてる様だ
平日の日中は反応が無い事が多いので労働に従事しているらしい事が見受けられるが、
中古と思われる書籍しか購入していないなど、知識に対する評価が低い点から見て、社会的地位が低い仕事だと思われる
メゾット君であるかどうかに関わらず、具体的な指摘、コードの付与がないレスはスルーする事をお勧めする
メゾット君とはプログラミングについての知識が一切無いにも関わらず、このスレに三年ほど前から張り付いていて、
具体性の無い罵詈雑言をレスし続けている名無しの一人
Methodの読み方が分からず「メゾット」と呼んだ事が名称の由来
まともな社会経験が無い為なのか、実用性が極端に薄い独特な思考法で会話をしようとする為、
回線を三つほど使い回して自演している時でも本人と特定出来てしまう
偶然映り込むよう装ってロレックスの腕時計を見せびらかすように写メに撮ってみたり(映り込み方は非常に不自然)、
プログラミングの本を読んで「変数」という概念の存在を数時間で認知できたことを褒めて欲しいと再三強調したり、
どうも虚栄心が異様に強い傾向にあるらしいが、現実では満たされない為に、このスレで他人を罵倒して鬱憤を晴らしてる様だ
平日の日中は反応が無い事が多いので労働に従事しているらしい事が見受けられるが、
中古と思われる書籍しか購入していないなど、知識に対する評価が低い点から見て、社会的地位が低い仕事だと思われる
メゾット君であるかどうかに関わらず、具体的な指摘、コードの付与がないレスはスルーする事をお勧めする
29デフォルトの名無しさん
2018/01/28(日) 17:09:44.50ID:8+IXgyMg あれ?レス番飛んでるけどメゾット君何かレスしたの?
2018/01/28(日) 18:08:50.22ID:xEeIgRKG
スレ保守のついでに相手してやったのよ
以後はスルーするつもり
以後はスルーするつもり
2018/01/30(火) 03:46:22.71ID:kllVg4gx
2点質問いいでしょうか
1.下記コードのコメントアウトで挟んだ部分の実行時間を短縮したいのですが何かいい方法はありますか?
やりたいことは各セルに@区切りで3つのランダムな数字が入った状態から、その3つの数字で入力規則のドロップダウンリスト作成→1つ目選択です(実際は1万セル前後あります)
2.複数回実行した時にかかる時間が増えていくのは何故でしょうか?
Excel2016です、よろしくお願いします
Option Explicit
Dim i As Long, start As Long, num As String, area As Variant
Sub test()
start = Timer
area = Range("B3:B5003")
For i = 1 To UBound(area)
area(i, 1) = Int(Rnd * 1000) & "@" & Int(Rnd * 1000) & "@" & Int(Rnd * 1000)
Next i
Range("B3:B5003") = area
'//////////
For i = 3 To 5003
num = Replace(Range("B" & i), "@", ",")
With Range("B" & i).Validation
.Delete
.Add Type: = xlValidateList, _
Formula1: = Replace(Range("B" & i), "@", ",")
End With
Range("B" & i) = Split(num, ",")(0)
Next i
'//////////
Range("D3") = Round(Timer - start, 2) & " 秒"
End Sub
1.下記コードのコメントアウトで挟んだ部分の実行時間を短縮したいのですが何かいい方法はありますか?
やりたいことは各セルに@区切りで3つのランダムな数字が入った状態から、その3つの数字で入力規則のドロップダウンリスト作成→1つ目選択です(実際は1万セル前後あります)
2.複数回実行した時にかかる時間が増えていくのは何故でしょうか?
Excel2016です、よろしくお願いします
Option Explicit
Dim i As Long, start As Long, num As String, area As Variant
Sub test()
start = Timer
area = Range("B3:B5003")
For i = 1 To UBound(area)
area(i, 1) = Int(Rnd * 1000) & "@" & Int(Rnd * 1000) & "@" & Int(Rnd * 1000)
Next i
Range("B3:B5003") = area
'//////////
For i = 3 To 5003
num = Replace(Range("B" & i), "@", ",")
With Range("B" & i).Validation
.Delete
.Add Type: = xlValidateList, _
Formula1: = Replace(Range("B" & i), "@", ",")
End With
Range("B" & i) = Split(num, ",")(0)
Next i
'//////////
Range("D3") = Round(Timer - start, 2) & " 秒"
End Sub
2018/01/30(火) 07:48:44.61ID:gBU+LQhN
>>31
いちいちセルからデータを持ってこない
何度も同じ処理をしない
'//////////
area = Range("B3:B5003")
For i = 3 To 5003
num = Replace(area(i - 2, 1) , "@", ",")
With Range("B" & i).Validation
.Delete
.Add Type: = xlValidateList, _
Formula1: = num
End With
area(i - 2, 1) = Split(num, ",")(0)
Next i
Range("B3:B5003") = area
'//////////
いちいちセルからデータを持ってこない
何度も同じ処理をしない
'//////////
area = Range("B3:B5003")
For i = 3 To 5003
num = Replace(area(i - 2, 1) , "@", ",")
With Range("B" & i).Validation
.Delete
.Add Type: = xlValidateList, _
Formula1: = num
End With
area(i - 2, 1) = Split(num, ",")(0)
Next i
Range("B3:B5003") = area
'//////////
2018/01/30(火) 08:10:08.93ID:R3oCXQqF
どうでもいいけど、セルのインデックスを文字列で指定するのは明らかにスマートじゃない気がする
確かcellsの方が多少速度早いんじゃなかったか
確かcellsの方が多少速度早いんじゃなかったか
2018/01/30(火) 08:27:38.31ID:aDcByURH
B列固定でとりあえず動作すりゃいいってのならどっちでもいいんじゃない。
将来的に変更可能性あるなら別だけど
将来的に変更可能性あるなら別だけど
2018/01/30(火) 12:45:58.02ID:vLC2w8Bp
2018/01/30(火) 14:45:24.44ID:kllVg4gx
2018/01/30(火) 15:19:01.11ID:5GO1HuBo
2018/01/30(火) 16:11:27.88ID:kllVg4gx
>>37
最後を
Range("D3") = Round(Timer - start, 2) & " 秒"
End '←追加
End Sub
にしたら加算されなくなりました
新規の列だとならなかったので作成したドロップダウンリストの何かが残ってるのかなと思ってたのですがEndは今回初めて知りました
みなさんありがとうございました
最後を
Range("D3") = Round(Timer - start, 2) & " 秒"
End '←追加
End Sub
にしたら加算されなくなりました
新規の列だとならなかったので作成したドロップダウンリストの何かが残ってるのかなと思ってたのですがEndは今回初めて知りました
みなさんありがとうございました
2018/01/30(火) 16:16:06.37ID:kllVg4gx
すみません、こっちでした
Cells(4, 4) = Round(Timer - start, 2) & " 秒"
End
End Sub
Cells(4, 4) = Round(Timer - start, 2) & " 秒"
End
End Sub
2018/01/30(火) 17:49:35.13ID:2erBHUms
たぶん変数をモジュールレベルで宣言してるからじゃないのこれ
プロシージャ内に宣言して不都合なことある?
プロシージャ内に宣言して不都合なことある?
2018/01/31(水) 01:14:12.85ID:3K34O5TZ
42デフォルトの名無しさん
2018/01/31(水) 01:42:08.16 なるほど、マクロの最後にはおまじないとしてEndを書いといたほうがいいのか
2018/01/31(水) 07:52:17.18ID:1/FNqCDn
2018/01/31(水) 07:55:30.29ID:1/FNqCDn
訂正、スマートってよりは場当たり的って感じで嫌
2018/01/31(水) 08:12:45.84ID:bjoCXrds
>>42
普通にコーディングしてたらそんな必要はない
普通にコーディングしてたらそんな必要はない
2018/01/31(水) 08:20:37.67ID:bjoCXrds
>>41
列をループさせないかつ列名がついてないような表なら無しではないかもしれないね
列名ついてるならEnumなりユーザー定義型なりで名前つけてやるべきだろうと思うが
引数に文字列の結合式を書くことが個人的にはすごく気持ち悪いけどまあそれは人それぞれかもしれないね
列をループさせないかつ列名がついてないような表なら無しではないかもしれないね
列名ついてるならEnumなりユーザー定義型なりで名前つけてやるべきだろうと思うが
引数に文字列の結合式を書くことが個人的にはすごく気持ち悪いけどまあそれは人それぞれかもしれないね
2018/01/31(水) 08:23:10.53ID:1/FNqCDn
あとモジュールレベルの変数名はiとか他でも使うような名前にしない方がいいぞ。
他で使っちゃってたりして予期せぬエラーの原因になる。
他で使っちゃってたりして予期せぬエラーの原因になる。
48デフォルトの名無しさん
2018/01/31(水) 10:32:40.89ID:y6ZUdqMb ここで質問するか微妙ですが質問します。
エクセル起動すると
1004エラーmacrooptionsのエラーが出ます
スタートメニューのすべてのプログラムからエクセルを起動しても同様のエラーがでます
オフィスを再インストールしても同様エラーが出るのですが解決策ないでしょうか?
エクセル起動すると
1004エラーmacrooptionsのエラーが出ます
スタートメニューのすべてのプログラムからエクセルを起動しても同様のエラーがでます
オフィスを再インストールしても同様エラーが出るのですが解決策ないでしょうか?
2018/01/31(水) 11:59:35.68ID:sVXcwb3a
他のバージョンのOffice製品が混在していないか
インストールされたプログラムで「修復」を試みたか
MSの fix it も試してみるべき
インストールされたプログラムで「修復」を試みたか
MSの fix it も試してみるべき
2018/01/31(水) 12:12:55.39ID:QBWxlyAw
>>47
さらに言えば、モジュール変数はm,グローバル変数はgを先頭に付けたほうが保守しやすい(俺は)
さらに言えば、モジュール変数はm,グローバル変数はgを先頭に付けたほうが保守しやすい(俺は)
2018/01/31(水) 12:38:18.79ID:/yXosPjR
2018/01/31(水) 13:51:36.51ID:NL/gtaqq
モジュール変数なら許せてグローバル変数が許せない、ということではないよな?
2018/01/31(水) 14:08:57.02ID:4YhVePXS
2018/01/31(水) 15:23:18.93ID:1/FNqCDn
自分は他のソフトを制御するのにVBA使ってるけど、モジュールレベル変数やグローバル変数を使うとインスタンスが残って不具合出ることが多かったから使わないようにしてる。
解放させる手もあるけど、タイミングに気を使うし記述も面倒。そしてなにより不具合発生原因の特定がスコープが広すぎるときつい。
だったらプロシージャ内で終わるの前提で設計する方が楽という結論になった。
あと、公式でプロシージャレベル変数が保持されることに期待するマクロは推奨しないみたいなコメントなかったっけ。
解放させる手もあるけど、タイミングに気を使うし記述も面倒。そしてなにより不具合発生原因の特定がスコープが広すぎるときつい。
だったらプロシージャ内で終わるの前提で設計する方が楽という結論になった。
あと、公式でプロシージャレベル変数が保持されることに期待するマクロは推奨しないみたいなコメントなかったっけ。
2018/01/31(水) 17:43:55.07ID:QBWxlyAw
そうそう。
フォームもクラスも使ったプログラミングを始めるとグローバル変数を使わざる負えない場合がある。
下手にENDを使われると同時に開いてるアドインが使い物にならない可能性があるので注意したほうが良いかも
フォームもクラスも使ったプログラミングを始めるとグローバル変数を使わざる負えない場合がある。
下手にENDを使われると同時に開いてるアドインが使い物にならない可能性があるので注意したほうが良いかも
2018/01/31(水) 17:55:21.63ID:4YhVePXS
>>55
クラスにろフォームにしろそのモジュール内で完結させるのは前提だけどね
標準モジュールでもモジュールレベル変数が有効なことがないこともないがね
完全にパブリックなグローバル変数は可能な限り使わないのが基本だろう
クラスにろフォームにしろそのモジュール内で完結させるのは前提だけどね
標準モジュールでもモジュールレベル変数が有効なことがないこともないがね
完全にパブリックなグローバル変数は可能な限り使わないのが基本だろう
2018/01/31(水) 19:46:12.53ID:/yXosPjR
今までグローバル変数を使わなければ
ならなかった局面に当たったことがない
どんな時に使わなければならなくなる?
いや、いつも外部とのやり取りは
パブリックなメソッドやプロパティで
やってるんだけど
ならなかった局面に当たったことがない
どんな時に使わなければならなくなる?
いや、いつも外部とのやり取りは
パブリックなメソッドやプロパティで
やってるんだけど
2018/01/31(水) 19:50:56.33ID:wkRhZUuX
59デフォルトの名無しさん
2018/01/31(水) 20:27:34.36 Endを使われても問題が生じない堅牢なアドインの作り方としては、設定値はレジストリに保持しておいてグローバル変数はあくまでキャッシュとして使うのがいいのかな?
(グローバル変数を使う前に必ず存在チェックして、NothingやEmptyなら都度レジストリから値を読み出してインスタンス再生成)
(グローバル変数を使う前に必ず存在チェックして、NothingやEmptyなら都度レジストリから値を読み出してインスタンス再生成)
60デフォルトの名無しさん
2018/01/31(水) 20:31:58.29 ちなみにグローバル変数と書いたけど、Endでモジュールレベルの変数もクリアされるという理解
61デフォルトの名無しさん
2018/01/31(水) 20:42:31.70ID:8SvFgWa22018/01/31(水) 20:43:12.79ID:wkRhZUuX
2018/01/31(水) 20:43:32.54ID:QI8wXuam
2018/01/31(水) 20:47:16.36ID:QI8wXuam
2018/01/31(水) 21:19:51.64ID:pJssMamu
プリミティブな値を保持するコンテナが欲しいとき、ほとんどの場合はグローバル変数やモジュールレベル変数を使うまでもなくセルなどに書き込むだけで事足りる
セルへのアクセス時には組み込みのイベントがいくつも走るのでそこは要注意だし、巨大な動的配列を使用する場合は処理速度の問題が出てくるけど
セルへのアクセス時には組み込みのイベントがいくつも走るのでそこは要注意だし、巨大な動的配列を使用する場合は処理速度の問題が出てくるけど
2018/01/31(水) 21:22:46.33ID:aBe463em
サーバーの監視業務からいきなりVBAでデータ抽出したりする部署に飛ばされたんだけど、なんかいい勉強方法あります?
SQLサーバから引っ張ったりしてます。
SQLサーバから引っ張ったりしてます。
2018/01/31(水) 21:32:20.06ID:4YhVePXS
endはホントに終わらせたいときにしかつかっちゃダメだろう
PCで言えば強制終了と同じようなもんだ
仕方なしに使うもんで、グローバル変数と同じように出来るだけ使わないようにするもの
少なくともおまじない感覚はダメだな
PCで言えば強制終了と同じようなもんだ
仕方なしに使うもんで、グローバル変数と同じように出来るだけ使わないようにするもの
少なくともおまじない感覚はダメだな
2018/01/31(水) 21:39:56.78ID:JpECFIQ2
エクセルはメモリを適切に解放しない事が多々あるので、Endが有効な場面もそれだけ増えるというのが困りもの
69デフォルトの名無しさん
2018/01/31(水) 21:56:08.56ID:niw7tDFN すみません質問です。初心者です
曜日を順番に表示したいのですが、出てくる曜日がデタラメなのです。
どこか悪いんでしょうが、さっぱりわかりません。
ベテラン様、教えてくだされ。
Dim 年 As Integer, 月 As Byte, 日 As Byte
年=2018
月=1
i = 1
For 日 = 1 To 31
Cells(i + 3, 3).Value = Format(年 / 月 / 日, "aaa")
i = i + 1
Next
曜日を順番に表示したいのですが、出てくる曜日がデタラメなのです。
どこか悪いんでしょうが、さっぱりわかりません。
ベテラン様、教えてくだされ。
Dim 年 As Integer, 月 As Byte, 日 As Byte
年=2018
月=1
i = 1
For 日 = 1 To 31
Cells(i + 3, 3).Value = Format(年 / 月 / 日, "aaa")
i = i + 1
Next
2018/01/31(水) 22:02:51.06ID:QI8wXuam
71デフォルトの名無しさん
2018/01/31(水) 22:13:47.19ID:niw7tDFN >>70
日付型にしてみたけど、やはりダメみたいです。
日付型にしてみたけど、やはりダメみたいです。
72デフォルトの名無しさん
2018/01/31(水) 22:14:33.5173デフォルトの名無しさん
2018/01/31(水) 23:18:11.45ID:q0yM2zae Cells(i + 3, 3).Value = Format(DateValue(年 & "/" & 月 & "/" & 日), "aaa")
2018/02/01(木) 00:24:06.09ID:vMTE7P+w
>>53
クラスモジュールのやつはインスタンスごとに別の実体だからモジュール変数じゃない。
クラスモジュールのやつはインスタンスごとに別の実体だからモジュール変数じゃない。
2018/02/01(木) 08:11:40.86ID:qON5QokW
急いでるとよく間違えるよな。しかも思い込みでミス発見に時間かかかるかる
2018/02/01(木) 19:37:02.10ID:cx2O6kE2
78デフォルトの名無しさん
2018/02/01(木) 19:45:37.17ID:mRcX8hpa >>77
禿乙
禿乙
79デフォルトの名無しさん
2018/02/02(金) 10:09:17.92ID:VDaFhWcz http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/bingo_game.html
すみません このページでダブルビンゴの判定を追加しようと思うのですがうまくいきません。。。
すみません このページでダブルビンゴの判定を追加しようと思うのですがうまくいきません。。。
2018/02/02(金) 10:42:11.74ID:+j1MBhFC
ワシはティンコを2本もっている
2本目はとっておきだ(´・ω・`)b
2本目はとっておきだ(´・ω・`)b
2018/02/02(金) 18:16:54.37ID:ZpXsrnJV
>>80
バケモノじゃねーか
バケモノじゃねーか
82デフォルトの名無しさん
2018/02/02(金) 23:02:56.20 >>79
試してないけどこんな感じかね
・関数の先頭に「Dim cn5 As Integer」を追加
・「cn1 = 0: cn2 = 0」の直前行に「cn5 = (cn1 ¥ 5) + (cn2 ¥ 5)」を追加 (「/」ではなく「¥」)
・「cn3 = 0: cn4 = 0」の直前行に「cn5 = (cn3 ¥ 5) + (cn4 ¥ 5)」を追加
・「End With」の直前行に以下を追加
If cn5 = 5 Then
.Range(cf(k)).Value = "BINGO!!"
Beep
End If
試してないけどこんな感じかね
・関数の先頭に「Dim cn5 As Integer」を追加
・「cn1 = 0: cn2 = 0」の直前行に「cn5 = (cn1 ¥ 5) + (cn2 ¥ 5)」を追加 (「/」ではなく「¥」)
・「cn3 = 0: cn4 = 0」の直前行に「cn5 = (cn3 ¥ 5) + (cn4 ¥ 5)」を追加
・「End With」の直前行に以下を追加
If cn5 = 5 Then
.Range(cf(k)).Value = "BINGO!!"
Beep
End If
83デフォルトの名無しさん
2018/02/02(金) 23:03:49.7784デフォルトの名無しさん
2018/02/08(木) 00:16:22.23ID:MSYeXSpW クロスワードパズル、迷路探索アルゴリズムをExcelVBAで作ることができたので、
今度はテトリス作ってみようと思う。
が、飛躍しすぎ?
キー操作で回転させるとか、→押下で横に移動しつつ落下するとかは、難しそうだな。
タイマとかも張らないといけない?
今度はテトリス作ってみようと思う。
が、飛躍しすぎ?
キー操作で回転させるとか、→押下で横に移動しつつ落下するとかは、難しそうだな。
タイマとかも張らないといけない?
2018/02/08(木) 07:26:16.72ID:XpMtH+Ey
>>84
5年くらい前に作った。
余裕とは言わないけどぷよぷよ作るよりは楽。
タイマーはAPIで見てる。
ブロックはセルに数字を入れて
条件付き書式で着色した。
今作ればクラスの理解があの頃とは全然違うので
多分また違う作りになると思う。
5年くらい前に作った。
余裕とは言わないけどぷよぷよ作るよりは楽。
タイマーはAPIで見てる。
ブロックはセルに数字を入れて
条件付き書式で着色した。
今作ればクラスの理解があの頃とは全然違うので
多分また違う作りになると思う。
2018/02/08(木) 13:17:56.16ID:qQDxntOi
テトリスってWinAPIに慣れるために最初に作るようなヤツだから構造的にはそこまで難しくないだろうな
でもエクセルだと描画速度の問題があるから・・・
でもエクセルだと描画速度の問題があるから・・・
2018/02/08(木) 13:25:02.66ID:f2SIrsod
2018/02/08(木) 19:21:45.57ID:aY4A4Yk1
宣言済みの変数を全て初期化するにはどうしたらいいですか?
2018/02/08(木) 19:31:17.27ID:8qhKGghx
>>88
律儀に全部の変数になにかを代入すりゃいいだけだろ
律儀に全部の変数になにかを代入すりゃいいだけだろ
2018/02/08(木) 19:48:57.07ID:aY4A4Yk1
2018/02/08(木) 19:51:00.94ID:fuTq97cg
>>88
宣言した直後は初期化されてる
マクロの動作がすべて終了したら自動的に初期化される
マクロの動作の途中ですべての変数を初期化したいなら、初期化するプログラムをいちいち書くしかないけど、
それはもともとの設計が悪い、方針がおかしい
宣言した直後は初期化されてる
マクロの動作がすべて終了したら自動的に初期化される
マクロの動作の途中ですべての変数を初期化したいなら、初期化するプログラムをいちいち書くしかないけど、
それはもともとの設計が悪い、方針がおかしい
92デフォルトの名無しさん
2018/02/08(木) 19:52:33.01ID:x393c3Y0 構造体の初期値とかな
2018/02/08(木) 19:53:04.95ID:fuTq97cg
>>90
そもそも初期化漏れってなんだ?たとえば
Dim AAA As Integer
みたいに書いてあると、マクロが実行開始された時点ではAAAは必ず0になってるんだけど
ほかの言語と勘違いしてないか
そもそも初期化漏れってなんだ?たとえば
Dim AAA As Integer
みたいに書いてあると、マクロが実行開始された時点ではAAAは必ず0になってるんだけど
ほかの言語と勘違いしてないか
94デフォルトの名無しさん
2018/02/08(木) 20:07:30.59ID:nI+/jCYy Integerとか使うなよw
2018/02/08(木) 20:12:43.47ID:aY4A4Yk1
設計が悪いのは確かです。私がVBAド初心者の頃から改良・機能追加を繰り返したコードでぐちゃぐちゃしてます。Public変数だらけなんです。
まとめて初期化する方法はなさそうですね、残念ですがレスありがとうございました。
まとめて初期化する方法はなさそうですね、残念ですがレスありがとうございました。
2018/02/08(木) 20:55:54.86ID:XpMtH+Ey
>>93
欲しい初期値がデフォルト値とは限らない
欲しい初期値がデフォルト値とは限らない
2018/02/08(木) 21:31:08.51ID:YcyG5pes
リセットするプログラム組んでおいて呼び出すとか
2018/02/08(木) 21:43:42.80ID:wjl/A/KY
変数のスコープは短い方がメンテナンス性がいいと思います
2018/02/08(木) 21:48:43.16ID:Cj1tzdzh
変数の値なんて必要に応じてセットするもんだろ
なんだよ「全変数初期化」って
プログラミングの基礎からやりなおした方がいい
なんだよ「全変数初期化」って
プログラミングの基礎からやりなおした方がいい
100デフォルトの名無しさん
2018/02/08(木) 21:50:33.84ID:fuTq97cg 初期化するサブルーチンを作れ
101デフォルトの名無しさん
2018/02/08(木) 21:52:16.55ID:nI+/jCYy >>88が必要だと思ったから聞いてんだろw
何を訳のわからん事言ってんだコイツはw
何を訳のわからん事言ってんだコイツはw
102デフォルトの名無しさん
2018/02/08(木) 22:08:53.43ID:aY4A4Yk1103デフォルトの名無しさん
2018/02/08(木) 22:30:18.23ID:gEZZVs8q104デフォルトの名無しさん
2018/02/08(木) 22:47:07.92ID:XpMtH+Ey >>102
ひとこと言わせてもらうと
そもそも「一括で全ての変数を初期化する」と言う
機能が必要になっている時点で多分構成的に
破綻していると思う。
変数を設定する前にどんなプログラムをどんな構成で組むのか、
そのためにはどんなライフサイクルの変数が必要で
スコープはどうするのか
次回から考えて作るようにした方がいい。
もっとも、今そんなことを言っても
多分取り返しのつかないようなコードになっているだろうから
とりあえず一つクラスを作っておいて
今パブリック変数として使っている変数を
そのクラスのプロパティとして移してやって、
生成する際にコンストラクタで初期化してやったら
どうだろうか。
条件によって初期値が変わるのならそのクラス内に
そのためのメソッドを作ってもいいと思う。
あまりいい作りとは言えないけど
そのクラスのインスタンスを
モジュール変数にセットしておいて
初期化したいときは新たに生成したものを
その変数に入れてやればとりあえずは
現状よりはもう少し手が入れやすくなると思う。
ひとこと言わせてもらうと
そもそも「一括で全ての変数を初期化する」と言う
機能が必要になっている時点で多分構成的に
破綻していると思う。
変数を設定する前にどんなプログラムをどんな構成で組むのか、
そのためにはどんなライフサイクルの変数が必要で
スコープはどうするのか
次回から考えて作るようにした方がいい。
もっとも、今そんなことを言っても
多分取り返しのつかないようなコードになっているだろうから
とりあえず一つクラスを作っておいて
今パブリック変数として使っている変数を
そのクラスのプロパティとして移してやって、
生成する際にコンストラクタで初期化してやったら
どうだろうか。
条件によって初期値が変わるのならそのクラス内に
そのためのメソッドを作ってもいいと思う。
あまりいい作りとは言えないけど
そのクラスのインスタンスを
モジュール変数にセットしておいて
初期化したいときは新たに生成したものを
その変数に入れてやればとりあえずは
現状よりはもう少し手が入れやすくなると思う。
105デフォルトの名無しさん
2018/02/08(木) 22:48:28.42 >>102
setvar, letvar, getvar, setarray, letarray, getarray みたいな共通関数を作りましょう。
型ごとに letstrvar, getintvar みたいなのも作っといたほうが便利かな。
まあ大きな関数5〜6個と小さな関数30個くらい実装すれば事足りるでしょう。
既存の g_FooBar, g_Baz みたいなPublic変数へのアクセスを全部 letstrvar("g_FooBar", local_str), local_int = getintvar("g_Baz") のような形式に書き換えましょう。
共通関数の中では、実際の値は巨大な配列に保持して、名前とインデックスを紐付けて管理しましょう。
こうすればグローバル変数の置換は機械的にできるし、変数の初期化も一発です。
健闘を祈ります。
setvar, letvar, getvar, setarray, letarray, getarray みたいな共通関数を作りましょう。
型ごとに letstrvar, getintvar みたいなのも作っといたほうが便利かな。
まあ大きな関数5〜6個と小さな関数30個くらい実装すれば事足りるでしょう。
既存の g_FooBar, g_Baz みたいなPublic変数へのアクセスを全部 letstrvar("g_FooBar", local_str), local_int = getintvar("g_Baz") のような形式に書き換えましょう。
共通関数の中では、実際の値は巨大な配列に保持して、名前とインデックスを紐付けて管理しましょう。
こうすればグローバル変数の置換は機械的にできるし、変数の初期化も一発です。
健闘を祈ります。
106デフォルトの名無しさん
2018/02/08(木) 23:00:19.46ID:aY4A4Yk1 >>103
>>104
レスありがとうございます。
このVBAコードは自分しか使わないし、自分以外がメンテすることはありえないので、
ろくにプログラミングの基本マナーなんてものを勉強しないまま、コード追加追加でわけわからなくなってしまったものです。
自分の書き込みから短時間で、お前のコードの設計が悪いんだとのレスを多く頂いて正直落ち込んでおります・・・
薄々気付いてはいましたが、他の方から指摘されると流石にこたえました。
少しずつ改善していこうと思います。
その上で、>>104をやっていこうと思います。
現時点で>>104の内容は理解できていませんが、なんかすごい貴重なアドバイスなような気がします。参考にさせていただきます。ありがとうございました。
>>104
レスありがとうございます。
このVBAコードは自分しか使わないし、自分以外がメンテすることはありえないので、
ろくにプログラミングの基本マナーなんてものを勉強しないまま、コード追加追加でわけわからなくなってしまったものです。
自分の書き込みから短時間で、お前のコードの設計が悪いんだとのレスを多く頂いて正直落ち込んでおります・・・
薄々気付いてはいましたが、他の方から指摘されると流石にこたえました。
少しずつ改善していこうと思います。
その上で、>>104をやっていこうと思います。
現時点で>>104の内容は理解できていませんが、なんかすごい貴重なアドバイスなような気がします。参考にさせていただきます。ありがとうございました。
107デフォルトの名無しさん
2018/02/08(木) 23:48:09.40ID:XpMtH+Ey >>106
構成に関しては単一責任原則に沿って作れば
上達が早くなると思うので
もし知らなければググってみた方がいいかも。
初期化というのは実はそこそこ奥の深い話で
ファクトリーパターンやファクトリーメソッドとか
ググると色々出てくるのだけれど
かなりObject指向寄りの話になってしまうので
ここではまぁ興味があればということで。
頑張ってくださいね。
構成に関しては単一責任原則に沿って作れば
上達が早くなると思うので
もし知らなければググってみた方がいいかも。
初期化というのは実はそこそこ奥の深い話で
ファクトリーパターンやファクトリーメソッドとか
ググると色々出てくるのだけれど
かなりObject指向寄りの話になってしまうので
ここではまぁ興味があればということで。
頑張ってくださいね。
108デフォルトの名無しさん
2018/02/09(金) 06:47:45.10ID:Oqb9O2xf >>102
> 後からPublic変数を追加した場合、その"リセットするプログラム"も変更の必要ありますよね?
変更すればいいじゃない
そもそも今あるPublic変数はともかく今後もPublic変数バンバン増やしちゃるって思ってるの?
> 後からPublic変数を追加した場合、その"リセットするプログラム"も変更の必要ありますよね?
変更すればいいじゃない
そもそも今あるPublic変数はともかく今後もPublic変数バンバン増やしちゃるって思ってるの?
109デフォルトの名無しさん
2018/02/09(金) 08:10:43.77ID:pONSvQ5P j自分しか使わないってんなら現状使っているのはそのまま置いといて、いい機会だと
思って新たに作るぐらいの気持ちで、「少しずつ改善」なんて小手先のことやらずに1度徹底的
に作り直したほうが良い。
思って新たに作るぐらいの気持ちで、「少しずつ改善」なんて小手先のことやらずに1度徹底的
に作り直したほうが良い。
110デフォルトの名無しさん
2018/02/09(金) 12:00:04.92ID:liPrOEdm グローバル変数、「さっき設定した値を後でまた参照する」的な意味でどうしても必要になることは理解できるけど、
あったとして一つか二つがいいところ。
データセット的なものを配列使わず保持するならたくさん必要になるけど、さすがにそれは配列かコレクション使え。
あったとして一つか二つがいいところ。
データセット的なものを配列使わず保持するならたくさん必要になるけど、さすがにそれは配列かコレクション使え。
111デフォルトの名無しさん
2018/02/09(金) 19:07:16.76ID:pFe+ikyv 毎回初期化が必要なグローバル変数があるならいっそ値をワークシートに保存して管理した方が安全だよな
112デフォルトの名無しさん
2018/02/09(金) 19:29:49.16 誰か>>105を巨大配列じゃなくてワークシートに記録するやり方で実装してください。
113デフォルトの名無しさん
2018/02/09(金) 19:45:27.04ID:mfiNCmZ5 >>105さん渾身のネタ、スベる
114デフォルトの名無しさん
2018/02/10(土) 01:27:55.34ID:UqvxHzys Worksheet_Calculateが頻繁に呼び出され、これが主な処理であるとき
Public変数だらけになったことはある
初心者だから他にもっといい方法があったのかもしれんが
Public変数だらけになったことはある
初心者だから他にもっといい方法があったのかもしれんが
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… [BFU★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【悲報】ジャップ、どうやら中国が一方的に戦争仕掛けてくると思ってる模様😰 [616817505]
- 中国高官と話す外務省局長の表情、やばい [175344491]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【高市速報】明日から中国からの輸入が停止すれば2ヵ月で国内の生産業に53兆円の損失発生 [931948549]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
