Excel VBA 質問スレ Part84

2025/10/01(水) 14:36:42.66ID:lecUwKjm
ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
Excel VBA 質問スレ Part83
https://mevius.5ch.net/test/read.cgi/tech/1749348402/
91デフォルトの名無しさん
垢版 |
2025/10/18(土) 17:07:29.84ID:+vuE6Mxs
>>88
TerminateだとSetFocusしようにもすでにテキストボックスが存在しないんじゃないの?
× Terminate
○ QueryClose
2025/10/18(土) 19:05:19.85ID:0zFTkOmI
>>90
自由に入力させて、入力後に判定処理入れるのがいい
2025/10/18(土) 19:06:44.69ID:ViyQQZbE
>>91
レスありがとうございます
QueryCloseでもダメでした…

なるはやで実用化したかったので、とりあえずは全かなBoxを置いたダミーフォームを一瞬出現する形でお茶を濁しました…
でも自分でもかなり使うモノだから気持ち悪さが拭えないので、可能ならどうにかもっとスマートに処理したい…
2025/10/18(土) 19:17:28.64ID:ViyQQZbE
>>92
ありがとうございます
そのまま打ってF8やF10ってのを覚えてくれれば楽なんですけどね…
PC疎い民もさすがに半角全角キーを押すことくらいは分かるので、基本的にはIMEModeOffだけど半角全角キーを押すと半カナになるってのがやりたいんです

我ながら駄文すぎて分かりにくかったけど、要約するとIMEModeOn時の行き先を自在に操りたいってことですね
2025/10/19(日) 10:59:45.64ID:/YxBx4q/
テキストボックスのイベントでExitにIMEを元に戻す記述を書く
https://www.javadrive.jp/excelvba/userform/index93.html
sheet上でも出来るとは まぁ、知らん奴が使ったらヒステリー起こしそうだが
https://infith.com/system/excel/ime_validation/
2025/10/28(火) 09:16:29.14ID:Kk67eWAx
Worksheet_BeforeRightClickを素早いクリックに反応させる方法ってありますか?
例えば右クリックでカウントアップするような場合、ゆっくりクリックしないと取りこぼすので、それをできるだけ軽減したいという話です
2025/10/28(火) 11:49:26.91ID:BUlcRJ6d
>>96
ワークシートのイベントはどれも動作が遅い
透明なオートシェイプをセルの上に重ねて、オートシェイプのClickイベントを使えば16連射も可能になる
ただし右クリックでは動作しない
2025/10/28(火) 13:00:23.09ID:NppxA0uZ
>>96
素早いクリックがダブルクリックと判定されてるかもね
2025/10/28(火) 16:30:11.08ID:xLHeS3+n
そんなに連打が必要な業務なのかわからんけど
マウスも一枚岩じゃ無いから(個体によって性能違ったり、有線無線で変わるかも知らんし)
ユーザーフォームとかにオプションボタン並べて、○1 ○5 ○10 ○25 ○50 ・・とかを事前に選択してから
右クリさせるのはどうか 二度手間三度手間が嫌だとクレーム来るのとトレードオフに成るが

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True ' Prevents the default right-click menu

Application.ScreenUpdating = False ' Turn off screen updating

' Your optimized code here, e.g., displaying a custom menu or performing actions
' ...
Dim i As Integer

For i = 0 To 100
' ステータスバーの表示が更新されない場合は、コメントをはずす
'DoEvents
' ステータスバーに出力
Application.StatusBar = "処理回数:" & i

Next
' ステータスバーのクリア
'Application.StatusBar = False
Application.ScreenUpdating = True ' Turn screen updating back on
End Sub

その辺で拾った野良のコードの合体モンだけど、回数:100にするのも一瞬なんだし
100デフォルトの名無しさん
垢版 |
2025/10/28(火) 18:40:17.09ID:k7xgJ8GR
そもそも右クリック連打が必要な設計を見直したほうが早いんじゃね
2025/10/28(火) 19:08:25.22ID:HpHj+cai
よく読め、連打が必要な訳じゃないと思うぞ
俺も似たような問題にぶち当たったことがあるから言いたいことは分かる
俺の場合はユーザーフォームだったからなんとでもやりようがあったけど、シートイベントでどうすべきかは思い付かんなぁ

ユーザーフォームなり透明オブジェクトなりで代用できそうか考えてみるのは大事かもな
2025/10/28(火) 19:36:17.85ID:xLHeS3+n
そうか、迂闊か
そういやチャタリング・チェックできるサイトとかあるから、そこでチェックもありか
2025/10/28(火) 20:59:15.35ID:WbU161W5
>>101
ダブルクリック判定にひっかかってるのかもしれんが、ユーザーフォームも単純な連打はうまく処理できない
2025/10/28(火) 21:36:11.37ID:uh3txXo7
要はこれっしょ

VBA フォームのボタンの反応が遅い理由と対策 - t-hom’s diary
https://thom.hateblo.jp/entry/2017/12/07/215055

これと同じようなことをワークシート右クリでやりたいってことやろ?
ワークシートだと安易に左クリックにはできない事情もあったりするし、こういう感じでフォームとかで代用できないか検討してみたら?
2025/10/28(火) 21:48:56.73ID:xheP7Ub+
レス遅れてすみません!
まさに>>104さんの言う通りです!
より具体的に言うと5種類の値から選ばせたくて右クリックで順繰り変更するマクロを作ってたんですが、例えば4番目の値を選びたいときなんかに慣れてくるとどうしても「カチカチカチカチ」って押してしまって反応が悪いと言われたのでどうにかしたくて
反応が悪いで済めばまだいいけど、それで間違った値のまま提出されたりすると困るのだ
2025/10/28(火) 21:49:30.45ID:xheP7Ub+
困るのだ じゃなくて 困るので です!!
107デフォルトの名無しさん
垢版 |
2025/10/28(火) 21:57:34.33ID:DelTjWwd
バカボンのパパ(´^ω^)
2025/10/28(火) 22:41:09.17ID:wDWtv1wu
>>105
マウスじゃなくキーボードでトグルしていくUIはいかが?
こんなの(INSキーでA1セルの値が増える)

Sub Init()
Application.OnKey "{INSERT}", "ThisWorkbook.OnKey_Ins"
End Sub

Sub OnKey_Ins()
Range("A1").Value = Range("A1").Value + 1
End Sub
109デフォルトの名無しさん
垢版 |
2025/10/29(水) 02:29:29.22ID:SoMHk0As
馬鹿は馬鹿な頭で考えた馬鹿な方法に固執する例
110デフォルトの名無しさん
垢版 |
2025/10/29(水) 06:43:39.82ID:0NTgZ+aL
これでいいのだ
111デフォルトの名無しさん
垢版 |
2025/10/29(水) 06:46:48.28ID:0NTgZ+aL
>>109
この人カバの逆立ちなのだ
11296
垢版 |
2025/10/29(水) 07:39:58.02ID:K2GlQHDP
代案ありがとうございます!
やはり何かしらの大体策を考えるしかないですかね
右ダブルがキャッチできれば解決するんだけどなぁ
2025/10/29(水) 18:26:50.09ID:GMHlOV3c
カバは逆立ちしてもカバなのだ
114デフォルトの名無しさん
垢版 |
2025/10/30(木) 03:56:51.64ID:k5qTIKM4
【高市自民】自維連立に衝撃 維新トップに赤旗砲「重大疑惑」2千万円絡む疑惑と 共産党Xが「だから裏金自民党とも組めるのか」と攻撃 説明求める声
https://news.yahoo.co.jp/articles/89adcdb576a46579b90da08ae8924ad11c08b470
115デフォルトの名無しさん
垢版 |
2025/11/01(土) 03:09:02.74ID:2yW7ZPbn
環境構築も配布の容易さも世の中の情報量も加味するとpythonなんて比較対象にならんな
特定のシステムでVBAに勝てるものはないわ
運用される規模は部署内程度になゆけどさ
2025/11/01(土) 10:44:13.81ID:kVMvyffB
マクロを起動するための各種コントロールは今後はフォームを使うべきなのか
これまで作ってきたActiveXコントロールは置き換えていくべきなのか
117デフォルトの名無しさん
垢版 |
2025/11/01(土) 10:47:01.86ID:abESDRO+
PythonはてっきりVBE上で使えると思ってたからなぁ
ワークシート上の関数とかじゃ使いづらすぎて拍子抜けだわ
2025/11/01(土) 16:45:53.46ID:IivztI/y
>>116
デフォルトでActiveX無効になったから、置き換えないと支障が出ることが多い
2025/11/01(土) 17:42:27.38ID:Hux2CBJ+
365に変えてから動かなくなった原因がそれだった
120デフォルトの名無しさん
垢版 |
2025/11/01(土) 18:59:05.05ID:h6jsjnZZ
マクロが増えてきてどれがなんのマクロか分かんなくなってきた。間違ったマクロが実行されたEXCELが元に戻らないのも嫌だし、どうしたら良いですか?
121デフォルトの名無しさん
垢版 |
2025/11/01(土) 19:04:29.39ID:xL3BSUWP
うまい具合に人のせいにしてください
2025/11/01(土) 19:35:09.78ID:b8gravi3
間違ったマクロを実行した時にEXCELを元に戻すマクロを作ればいい
2025/11/01(土) 19:53:55.68ID:+zpxt/zr
適切なマクロを実行するマクロを作る
2025/11/01(土) 20:11:15.61ID:6pe+t0kU
AIに丸投げして聞いたらいい
完璧に教えてくれるよ
125デフォルトの名無しさん
垢版 |
2025/11/01(土) 22:42:21.33ID:h6jsjnZZ
>>121
採用!
2025/11/05(水) 14:44:44.11ID:rUtaLWLS
>>125
人のせいであっても現状の問題への対応はしなければならないのではないか
2025/11/16(日) 08:35:29.66ID:BUsW0orn
ピボットテーブルのスライサーが変更されたとき、
ピボットテーブルを置いているsheetについて
 Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
を使っていくつかのマクロを実行させるようにしているんだけど、
これが3つあって、関連するクエリーやらをちょっとメンテ作業すると、これも動いてしまうものだから、
いちいちコメントアウト?(頭に ' 付けるヤツ)にして、このマクロを止めている。

これもっと上手いやり方ないかしら?
2025/11/16(日) 08:47:46.14ID:Mx/pwiFm
デバッグ用定数を定義しておいて、
そのデバッグ用定数の値が特定の値なら動かさない、とかにすれば、
メンテ中の変更が一カ所で済む、とかそういう話?
129デフォルトの名無しさん
垢版 |
2025/11/16(日) 08:48:05.74ID:diBaXt68
よく分からんが、フラグ変数とかじゃダメなん?
130デフォルトの名無しさん
垢版 |
2025/11/16(日) 09:13:04.26ID:bRFFjOtJ
どこかのセルをデバッグON/Offのフラグにする
2025/11/16(日) 09:16:36.49ID:EzK8Q/Ny
デバッグ定数を使うかApplication.EnableEventsを一時的にFalseにするか
ちなみにデバッグ定数はシート上に隠しておく形式にして例えばRange("A1").Value = Not Range("A1").ValueみたいなSubをイミディエイトから呼び出すのが個人的には楽
2025/11/16(日) 09:32:54.60ID:BUsW0orn
>>128
うーん、クエリー弄っちゃうと修正途中なので
不用意に動いたVBAでデバッグ入って・・・
てのはあるんだけど。

そもそもの
Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
を一時的に止める方法はないのかと。

やっぱ、ワークシート上のどっかのセルに「メンテ中」なら "1" でも入力して、これをフラグにして
3つのPrivate Subの中で if then で、1ならそのまま終わるか、Call 以下のマクロを実行するかの分岐処理?

先達らはもっときれいなことやっているのかと・・・
2025/11/16(日) 09:33:47.22ID:EzK8Q/Ny
分かるとは思うけど一応

Public Const IsDebug As Boolean = False  '平時
'Public Const IsDebug As Boolean = True   'デバッグ時

Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
If IsDebug Then Exit Sub

'ここに処理を記述

End Sub

みたいにするってことね

コメントアウトを楽にするならConstじゃなくて
Public Function IsDebug As Boolean
' IsDebug = True  '平時はコメントアウトする
End Function
にするのもアリ
2025/11/16(日) 09:37:59.73ID:EzK8Q/Ny
あ、ミスった
シートモジュールだけにまとめるならPublicなConstは使えないから、Const定義を標準モジュールに書くか、PrivateなConstにするかしてね
2025/11/16(日) 09:39:00.23ID:BUsW0orn
言ってみれば、プロシージャのインターロック機構みたいな仕組みかな?
2025/11/16(日) 09:41:42.45ID:BUsW0orn
>>133,134
ありがとう。
やってみる。
2025/11/16(日) 09:41:49.72ID:EzK8Q/Ny
そそ
ちなみにどのプロジェクトでもまず最初にこの機構を作る癖を付けておくといろいろ捗るよ
2025/11/16(日) 13:12:18.31ID:0LN83zrS
最近のyoutube動画観てると
MS Office が web アプリの Office と実質同じ
観たいな説明が多くてうんざりする
139デフォルトの名無しさん
垢版 |
2025/11/16(日) 14:23:25.70ID:qgfY8rnj
web アプリの Officeは知らん。
どんなの?
140デフォルトの名無しさん
垢版 |
2025/11/16(日) 14:37:50.55ID:WuYYEw3+
Excel for the webとかのことやろ
141デフォルトの名無しさん
垢版 |
2025/11/16(日) 16:08:17.79ID:pZ2suisg
可視化のために色とデータを
一気に出力させたら描写遅延が初回に絶対発生するわ
画面一瞬シェイクさせるのを追加したことで解消
システムを高評価されたのはいいけど他社まで展開されるとは思ってなかったから超強力に作り込んでる
2025/11/19(水) 12:39:22.87ID:T8xhcS/6
趣味程度でしかやってないからコーディングのマイルールが中々定まらん
そのせいでメンテナンスしたり新しいプロジェクトを作り始める度にああでもないこうでもないと試行錯誤する無駄な時間が…
ってことで質問なんだけど、みんなが心掛けてるマイルールってなんかある?

ちなみに自分の中で明確なのはWith構文は余程面倒な括りじゃない限り使わない、型指定はAs~より&や$などを優先的に使うとかかな?
例えば型指定の省略形は一般的にはあまりよろしくないことは分かってるけど、うちの環境ではどうせ俺しか触らないしコードがスッキリして好きだからそうしてる
こんな感じで「一般的にはよろしくないとされるルール」でも全然いいので色んなアイデアが欲しいです
143デフォルトの名無しさん
垢版 |
2025/11/19(水) 12:57:01.35ID:gC8HGDrL
最近はVBAを直接書くことはあまりなくてPytnonのxlwingsを使うことが多いんだけど、既定のプロパティを使わないとかかな。「VBA コーディング規則」とか「VBA コーディングガイドライン」で検索すると色々出てくるね。
144デフォルトの名無しさん
垢版 |
2025/11/19(水) 13:01:31.21ID:pFGIqcYh
コメントは書かない(コメントがなくても理解しやすい命名やロジックにする)
2025/11/19(水) 19:03:32.46ID:pYKM/3rA
入力チェックやファイル読み書き読み込み等の他で使えそうな処理は汎用化する。
データの入力、加工、出力は処理を分ける。
2025/11/19(水) 22:38:56.82ID:cV15jrOu
>>142
改行とインデントはVBと同じにしてる
Visual Studioにコピペして自動整形されたやつをVBEに戻したりもしてる
変数名は気分次第だけど、英語の語彙力がないから全角文字も許容しないとすぐに詰む
コメントはできるだけ詳細に書く
147デフォルトの名無しさん
垢版 |
2025/11/20(木) 08:10:04.82ID:cGqMER0e
会社のVBAならドキュメントの場所をコメントに書いておく
2025/11/20(木) 09:52:55.59ID:gRH2Ls2k
>>144
そのルールだとwhyはどう記すの?
149デフォルトの名無しさん
垢版 |
2025/11/20(木) 19:09:59.75ID:qnTj7J5a
生成AIで出てきたコードをそのまま使う
150デフォルトの名無しさん
垢版 |
2025/11/25(火) 10:36:05.24ID:0uCcBRN1
WordのVBAのスレはありますか?
151デフォルトの名無しさん
垢版 |
2025/11/25(火) 11:10:13.87ID:F0vSFTML
昔はあった気がする
そう言えば ActiveX のスレも消えてるな
152デフォルトの名無しさん
垢版 |
2025/11/25(火) 21:40:54.81ID:AgmnBjOL
VBAなんでも質問スレ Part3
https://mevius.5ch.net/test/read.cgi/tech/1631184381/

ここかなぁ
153デフォルトの名無しさん
垢版 |
2025/11/26(水) 10:05:38.98ID:QKRdq7W1
>>152
ほぼ動いてないみたいですね。
ありがとうございます。
2025/11/26(水) 14:41:57.77ID:UA8LnUux
>>144
>コメントは書かない(コメントがなくても理解しやすい命名やロジックにする)

>>133-134
>あ、ミスった

ミスったじゃねーよボケカス
155デフォルトの名無しさん
垢版 |
2025/11/26(水) 16:54:08.05ID:i+EWuoJl
>>153
EXCELとACCESS以外はほとんど需要ないから
2025/11/26(水) 18:44:46.44ID:AiiNbb6A
李夫人「ギスギスしてますね」
気軽に会話できるフインキじゃない
2025/11/26(水) 21:02:04.46ID:NgA/vaPc
出来上がってたマクロをAIで改良したら動かなくなって色々試したけど結局最初のに戻そうと消して貼り替えたら違うの貼っちゃって元に戻らなくて死にそう。ExcelVBAってバージョン管理どうやったらいいの?
(´・ω・`)どうしよう、あと2日しかない、、
2025/11/26(水) 21:27:39.98ID:XHc1Lvk5
Rubberduckちゃん使ってActive ProjectをExport、
出力されたファイルをバージョン管理
159デフォルトの名無しさん
垢版 |
2025/11/26(水) 21:52:38.66ID:6HGM8CMx
前任者の作っていったVBAのプロシージャ名がテポドンとかパトリオットとかだわ
タケヤリもある
処理のボリュームと連動してるのがちょっと笑えた
2025/11/26(水) 21:57:50.45ID:JxrtDXSM
この前テポドンという半グレ集団捕まってたよな
2025/11/27(木) 12:55:16.44ID:s8MajZ9+
Tips
Rubberduck isn't a lightweight add-in and consumes a large amount of memory.
github.comのレポジトリにこんな記述があった
162デフォルトの名無しさん
垢版 |
2025/11/27(木) 13:52:52.24ID:2EmBR7sq
規模にもよるけど >>157 の言ってる話くらいなら
Excel の VBA エディタを使わずに
完全に別のテキストエディタをメインで使用して
都度 Excel にコピペして使うのが正しい
2025/11/27(木) 20:59:46.47ID:+1jsb7au
>>157
リカバリのことではないけど、コードを修正する前にはマクロブックをコピーしてバックアップはするなぁ
一時、本当によくファイルも壊れてたし
自動でモジュールをエクスポートしてGitで管理ってのもみたことあるけど、プロジェクトをいじるには権限の設定も変更の必要とあるし…
2025/11/27(木) 21:01:15.19ID:PwMHoPlI
日本語不如意で失礼
2025/11/27(木) 21:13:09.05ID:JXPCwm5x
フォームのレイアウトが壊れたこともあったな
166デフォルトの名無しさん
垢版 |
2025/11/28(金) 04:25:10.05ID:YehK5uv+
フォームやオブジェクトにソース埋め込むとか発想がイカレてる
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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