スレ立ての際は一行目に
!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+uGT7T2018/01/27(土) 20:26:07.63ID:Xe+uGT7T
2018/01/27(土) 20:37:51.59ID:U6WUbfXx
ほす
4デフォルトの名無しさん
2018/01/27(土) 20:40:42.16ID:v1Vq7O9g >>1
よう無能wスレ立ても満足にできんのかw
よう無能wスレ立ても満足にできんのかw
2018/01/27(土) 20:44:44.53ID:Xe+uGT7T
2018/01/27(土) 21:18:02.81ID:U6WUbfXx
これはあれか、メゾット君か
パイソンスレでも暴れてるけど
笑えるわ
パイソンスレでも暴れてるけど
笑えるわ
7デフォルトの名無しさん
2018/01/27(土) 22:30:19.28ID:v1Vq7O9g >>6
ようメゾット君w久しぶりやなw
ようメゾット君w久しぶりやなw
2018/01/27(土) 22:56:24.41ID:845Tmzax
>>7
はよ立て直せよヘタレ
はよ立て直せよヘタレ
2018/01/27(土) 23:22:14.86ID:cbFXqoc1
>>7
うんこ擦り付けるのやめてもらえませんかね
うんこ擦り付けるのやめてもらえませんかね
2018/01/27(土) 23:32:58.75ID:mMQhkopa
メゾット君は恥じるって感情を持ち合わせている割に自分より上位の人間に勝てない喧嘩売るのは辞めないってのが不思議
11デフォルトの名無しさん
2018/01/27(土) 23:46:41.45ID:v1Vq7O9g2018/01/27(土) 23:48:38.90ID:cbFXqoc1
2018/01/27(土) 23:55:56.46ID:cbFXqoc1
>>13
いや、それに反論した君もその定義を理解してるんだろ?
いや、それに反論した君もその定義を理解してるんだろ?
15デフォルトの名無しさん
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
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 高市早苗「……なんて言ってみたw」中国「なんだ、言ってみただけかw」👈これで全部元通りになるという事実 [782460143]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- 映画「ゼルダの伝説」、リンクとゼルダ姫が白人になってしまう。日本のものは日本人だろうが!! [592058334]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- んなっしょい🍬禁止🈲のお🏡
- 高市早苗「株やってる奴ザマァwww格差是正のためにも、もっと暴落した方がいいよwww」(´・ω・`)確かに。 [252835186]
