Excel VBA 質問スレ Part76

■ このスレッドは過去ログ倉庫に格納されています
2022/05/01(日) 02:23:41.78ID:2t63WK/jM
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けること

ExcelのVBAに関する質問スレ
コード書き込みや作成依頼もOK

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

※前スレ
Excel VBA 質問スレ Part75
https://mevius.5ch.net/test/read.cgi/tech/1644384272/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/06/23(木) 21:09:00.04ID:8GFyplgN0
>>623
> openpyxlやxlwings
の説明なんて要らんよ
> 具体的にはどんな案件がvbaからpythonになってるの?
の回答よろしく
2022/06/23(木) 21:25:01.78ID:SBEKkY350
>>624
知らんよ。俺は見たことない

どんな案件にでも対応できるからユーザー側がpythonを指定して発注することは少ないだろう
開発側の好みでpythonを選んでいるだけだろうな
webサーバーで処理するという点ではエクセル→スプレッドシートの移行にかなり近い。
2022/06/23(木) 21:39:08.37ID:8GFyplgN0
知らんのならいちいち絡んでくるなよ...
そもそもどんな内容が伝わると思ってたんだよw
2022/06/23(木) 21:55:24.01ID:SBEKkY350
何でも低コストで作れる以上、具体的な案件なんてもう必要ないだろう
2022/06/23(木) 22:56:14.90ID:Qj8PYDZt0
会社の人事部の仲良い人に聞いたけど、派遣君でVBAできるヤツは希少な人材と言っていたぞ
ましてやExcel自体まともに操作できない派遣が多い中で。
629デフォルトの名無しさん (ワッチョイ 9a4f-+QtH)
垢版 |
2022/06/24(金) 03:54:27.16ID:ctS3zPLY0
まぁ手広くやるかVBA極めるかだろうけどある程度は手広くやらないとね
「VBAは死ぬ」と言われてもう随分経つけど一向に死ぬ気配はないのは確かだけど
VBAしか出来ないとOfficeに乗っかったアプリしか開発出来ない井の中の蛙状態になるのも確か。

それに他言語やってるとその言語の考え方も取り入れてVBA作るようになるから何かひとつやるにしても取れる手段が増えるんだよね。

まぁ個人的にはPythonは下手に手をつけると算数しか出来ないバカな俺には数学出来ないといけないお仕事が降ってきそうでちょっと敬遠するけど。

後JAVAは個人的に肌に合わなかったのでやって良かったってなるのか分からないけど、
JavaScriptはWeb系やるならまず必須になるし、とりま後はC#辺りやっとけばいいんじゃないかと思う。
630デフォルトの名無しさん (ワッチョイ 9a4f-+QtH)
垢版 |
2022/06/24(金) 04:14:34.15ID:ctS3zPLY0
後、このスレには俺みたいなジジイが結構いるみたいだから話しておくと、
遠い昔まだPCがマイコンとか呼ばれていた頃、すがやみつるって「ゲームセンターあらし」とかいう漫画描いてた人が「こんにちはマイコン」ってBASICでブロックの無いブロック崩しみたいなののプログラムを作る工程を漫画で説明しながら描いてたんだけど、
ちょっと前に「こんにちはPython 」って同じ感じの内容をPython でやってるのを出してたから話のネタに買ってもいいかも知れないよ。
ただ、新品買うほどの価値があるかは微妙だから中古でもいいと思うけど。

まぁスレ違いだからこの辺にしとくわ。
631デフォルトの名無しさん (ワッチョイ 4b02-WaTF)
垢版 |
2022/06/24(金) 04:39:40.48ID:61TcLrsp0
activecellを使って掛け算をしたい時どうすればいいのか分かりません
教えていただけたら嬉しいです。
inputboxで数値を入力してその数値を使って計算したいです。計算する時にactivecellを使いたいです
2022/06/24(金) 07:42:23.66ID:24qb8CGk0
>>631
Sub foo()
Debug.Print ActiveCell.Value * InputBox("")
End Sub
633デフォルトの名無しさん (アウアウウー Sa47-vQ73)
垢版 |
2022/06/24(金) 09:49:37.06ID:K2we1Lara
こういうのが尼崎事件を起こすんだろうな
634デフォルトの名無しさん (アウアウウー Sa47-iAjv)
垢版 |
2022/06/24(金) 12:20:36.40ID:SlsiDUV+a
需要と供給
2022/06/24(金) 15:06:54.11ID:kZFfj4TG0
難しい話ね。
これから他の言語も必要なら習得の必要あるしね。
636デフォルトの名無しさん (ワッチョイ 3b5f-8Usu)
垢版 |
2022/06/24(金) 15:26:03.25ID:bvc+MoD20
VBA覚えるの大変ですね
理解してコピペできるくらいにはなりたい
2022/06/24(金) 15:31:46.16ID:RLAl6U0RH
一度VBAエキスパートとか取るくらい勉強すれば
毎回Offsetの横は行が先か列が先かどっちだったかな?って(Resizeでも同じことやってる)やってるワイでも
大体コピペで作れるくらいには成長するよw
638デフォルトの名無しさん (ワッチョイ 3b5f-8Usu)
垢版 |
2022/06/24(金) 19:49:28.19ID:bvc+MoD20
>>637
ありがとう
やってみるか
参考書検討しようかな
2022/06/24(金) 20:26:28.92ID:oJCwQA/d0
コピペしたVBAってみんな捨てて去ってるのかな、貰ったことないかも。
2022/06/24(金) 21:29:08.60ID:kZFfj4TG0
コピペはダメと教わったがな最初の会社で。
あちぃなしかし今日は
2022/06/24(金) 21:34:54.88ID:p6zHePCT0
熱がこもって32度あるわ
2022/06/24(金) 21:35:55.33ID:p6zHePCT0
コピペしてそのまま使うことはほぼなくなる
コンパクトにまとめないと、後で見て何書いてるかわからなくなる
2022/06/24(金) 23:00:17.91ID:oJCwQA/d0
ネットにうpしてあった100行のやつをコピペして100000行にしてる、コンパクトという発想がなかったわ。そもそも意味わかんない行もあるけど消すと動かないし。
後任に渡そうと思ったけど恥ずかしいからやめとくか...。
おまえら上級者なんだね。
2022/06/24(金) 23:49:49.39ID:ueFhN9Vh0
VBAはコピペして動くからいいよな。
Pythonはだいたい動かない。
しかも、Pythonのページ作るやつて
断片的にソースを乗っけるから、なおさら動かない。
2022/06/24(金) 23:54:16.48ID:WnxbT+0Sr
コピペして動かすのって怖くないか?
少ない量ならまだしも100行だと何が起きてもおかしくない
2022/06/25(土) 01:09:59.54ID:XeF3ZBAK0
それを修正できるスキルがあれば別かもだけど、なかなかいないのでは
2022/06/25(土) 08:29:17.86ID:hk0FSiYld
ネットソースだとwsの指定とか省略されててコピペじゃ怖くて使えたもんじゃない
2022/06/25(土) 09:09:54.09ID:HMw3/wS6H
自分で一から書ける能力があればわざわざコピーなんざしないのさ。。。(-_-)

切り貼りつぎはぎだらけで変数の宣言がぐちゃぐちゃになってる
分かってくれる人いないかな(笑)
2022/06/25(土) 09:43:24.30ID:XeF3ZBAK0
独創でコード書けないと保守で詰むでしょ。
650デフォルトの名無しさん (アウアウウー Sad3-n9/C)
垢版 |
2022/06/25(土) 10:00:09.34ID:kapo/xgia
コピペが悪いのではなく、コピペで作ったコードを自分が提供した責任があるのだよ
2022/06/25(土) 10:15:11.28ID:HMw3/wS6H
>>649
自分だけで時間短縮のために使ってるマクロだからそんなに困らないよ

みんなに配布するレベルはこれからもしないと思う^^
652デフォルトの名無しさん (ワッチョイ 7f10-60CD)
垢版 |
2022/06/25(土) 10:49:20.62ID:Wc9Qs34b0
>>648
分かるけど理解はしない
それを許したらそこでおしまい
2022/06/25(土) 10:54:34.90ID:PITDVbGU0
まあ自分で使うだけならいいんじゃね
2022/06/25(土) 12:26:01.77ID:W4jZJdCLd
書ける能力あっても今までに作ったコードをコピペするだろ?
場合によっては共通関数の入ったモジュール程度を持ってくるにしても
お前らもしかして同じこと1から書いてるの?
2022/06/25(土) 12:41:36.76ID:7YC4We+Er
別部署に行って、「規則が変わるからこのマクロも修正してくれ」って言われ、中を見てみたらセレクトメゾットやコピーメゾットが使われてた時の絶望感
「クリップボードの履歴を有効にしていると正常に作動しない事があるから必ず無効にしてくれ」ってそれ書き方おかしくないか?
そして変数の宣言が強制されていなくて更に絶望する
2022/06/25(土) 12:56:07.50ID:Fu1pMYi/M
>>655のレベルもたぶん似たようなもんだよ
2022/06/25(土) 14:57:17.56ID:XeF3ZBAK0
>>654
と言うより、作って使用したらマクロは消しているのです。
再び必要になったら1から書いてますはい。
職場のローカルルールとして。
2022/06/25(土) 17:13:39.41ID:ehcxDoIm0
>>657
ないわー
関数自体が使いまわし前提の考え方だし
2022/06/25(土) 17:43:12.02ID:hk0FSiYld
>>654
理解しないでコピペするか理解して書いたコードを使い回すかの差は途轍もなく大きい
2022/06/25(土) 18:56:11.02ID:XeF3ZBAK0
それどころか回りの奴らはVBAにしろExcelの学習すらやろうとしない。
仕事終わったら飲みに行く事しか考えていない。休日も何も努力しない現実。
興味ないヤツには進めてもダメなのかな
2022/06/25(土) 19:21:59.19ID:WbawSRHfM
VBA使いに向上心を求めるのは酷でしょ
それがないからこそVBA止まりなのに
2022/06/25(土) 21:29:35.48ID:Ujo38STt0
>>660
自分が使うのは勝手にしろだけど、それで優越感に浸って「周りの奴らは~」とかキモすぎだろ
たかが仕事で使うの1つのツールごとき にここまでイキれるのはヤバいわ
2022/06/25(土) 21:31:08.83ID:tv1Cabyi0
他はすべて負けてるから何か一つでも勝てるものがほしいんや
2022/06/25(土) 21:32:27.25ID:xn3lQ0RO0
レスバで勝てば世界ランクあがるしな
2022/06/25(土) 21:44:09.88ID:VazVwqbS0
>>647
それってコピペしただけじゃ動かないってことよね?
動くように自分で指定すると思うんだけど、こわいってのはどういう事なんだぜ?
2022/06/25(土) 21:53:20.34ID:Of9vbGQH0
>>663
負けの数ではお前が一番だ
2022/06/25(土) 22:26:51.85ID:XeF3ZBAK0
勝利するかために複雑な知識や技術を身につけているのだが??
間違ってる?
2022/06/25(土) 22:29:13.51ID:hk0FSiYld
>>665
wsを指定しないとActiveSheetで動こうとするから誤作動の原になる
2022/06/26(日) 00:40:58.82ID:NOZ7SEa20
Webbrowserで証明書を自動選択する方法は無いものでしょうか?
2022/06/26(日) 00:44:34.36ID:NC1QoP++r
>>667
誰に勝利するの?
何に勝利するの?
671デフォルトの名無しさん (ワッチョイ 3f4f-60CD)
垢版 |
2022/06/26(日) 07:38:11.30ID:5vPg/0Rp0
他言語やったからって
excelやVBAでやったことが無駄になることはないよ
他の言語で作ったもののUTのエビデンスをとるのに
excelがもし無ければと思うとゾッとするし
テストデータ作成にもVBA使うととっても便利な場合が多いし
2022/06/26(日) 09:43:13.22ID:/e5N//9v0
エクセルのある列に数字が入ってます。
そのエクセルと同じ階層にあるフォルダの下に
上記の数字から始まる名前のフォルダがあります。
(数字のあとに日本語が付いてます)
このフォルダの探し方を教えていただきたく
2022/06/26(日) 09:45:37.60ID:Xa6L6yDT0
会社のパソコンでVBAを使って
pdfをテキストへ変換しています。
(com.adobe.acrobat.plain-text)
変換処理は不安定でエラーが出ることが多いが
成功することが多いです。
しかし有料ライセンスは一切買ってもらっていません。
これはライセンス違反ですよね??
違反ならもうやめます。
674デフォルトの名無しさん (ブーイモ MM5f-c/Mv)
垢版 |
2022/06/26(日) 09:56:38.78ID:IFq6Yt8DM
>>672
num=cells(行,列).value
dirname=dir(thisworkbook.path&"\"&num&"*",vbDirectory)
675デフォルトの名無しさん (ブーイモ MM5f-c/Mv)
垢版 |
2022/06/26(日) 09:59:07.88ID:IFq6Yt8DM
dirname=dir(thisworkbook.path & "\" & num & "*", vbDirectory)
2022/06/26(日) 10:18:26.90ID:6drPPg2U0
>>673
PowerQueryでもAdobeのAcrobatなしで
pdfをある程度変換出来るけど?
2022/06/26(日) 10:25:43.07ID:yfX3wl/l0
>>673
adobeに聞けとしか
2022/06/26(日) 11:39:03.04ID:XMcnD9d40
EULA読んでダメって書かれてなきゃいいだろ
679デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)
垢版 |
2022/06/26(日) 12:11:58.60ID:hFDBYOe90
クラスが入ってるCollectionの要素を置き換えるにはどうすればよいでしょうか?

Set col(2)=New MyClass()

とやってもできないんです。
2022/06/26(日) 12:23:08.37ID:tixRR40Y0
置き換えはダメだからRemoveしてAdd
681デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)
垢版 |
2022/06/26(日) 13:30:17.16ID:hFDBYOe90
>>680
そうですか
ありがとうございます

でもなぜ置き換えできないのでしょう?
そのしくみを理解したいのですが
スキルがあがるステップだと思うので
2022/06/26(日) 13:35:51.31ID:VKkh0pnir
IEの入力欄に値いれるマクロ使ってたんだけど、エッジに移行して動かなくなったんよ
エッジの入力欄いじる方法ってご存知ないですか?
調べてもよくわからなくて
2022/06/26(日) 13:39:54.64ID:PhXCrOZEd
VBAを投げ捨ててEdgeの拡張機能を作ろう
2022/06/26(日) 14:11:21.83ID:1bCfGQVkd
Sendkeys
2022/06/26(日) 15:05:50.62ID:WjaufMigd
まだInternetExplorer.Application は有効でしょ
サポートは切れたが動かなくなる訳ない
686デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)
垢版 |
2022/06/26(日) 15:26:20.76ID:hFDBYOe90
なぜMsedge.Applicationにしないの?
687デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)
垢版 |
2022/06/26(日) 15:32:17.63ID:hFDBYOe90
クラス(例:MyClass)が入ってるCollectionの要素(つまりMyClass)をある条件でsortしたいのですが
簡単な方法はないのですよね?
これは標準モジュールにそのソート用のsubかfunctionを書くのが一般的ですか?
「ある条件」というのが複数あるので、複数個それを作るのが面倒。
あといま思い付いたけど、そのCollectionをメンバとして含む親クラスをつくり、その親クラスにその複数のsortに相当するfunctionを作るのがカッコイイです?
2022/06/26(日) 18:21:23.39ID:WjaufMigd
たぶん用途的にArrayListが良いと思う
>>687
2022/06/26(日) 21:43:05.30ID:h799Melv0
VBAのマクロ名てなにか制限ある?
Sub n98()
MsgBox "a"
End Sub
というマクロを作ったんだが、実行できない。実行ボタンがグレーアウトする。
しかも、マクロボタンを押すとセルカーソルが彼方に飛ばされるんだが。
https://i.imgur.com/7iCfenT.mp4
2022/06/26(日) 22:29:47.48ID:UUS+pyK9H
>>689
ワイはそのコードコピペしたらちゃんと動いたよ
モジュールのコード上でF5キー押してみたら?
2022/06/26(日) 22:31:36.52ID:UUS+pyK9H
マクロ名の制限ももちろんあるよ
ググればすぐ出てくるはず

だけどこのコードのマクロ名は問題無い
2022/06/26(日) 22:39:05.59ID:h799Melv0
>>690
VBEでF5なら動くが、
エクセル本体で開発タブのマクロボタン押すとああなる。
ちなみにバージョンは2013。
マクロ名が英字2字+数字だと、マクロボタン押すとそのアドレスのセルに飛ばされるな。
もちろんマクロは実行できない。
そんな制限あったけ?
セルのアドレスて「予約語」になるのか?
2022/06/26(日) 23:12:48.18ID:47IFcp1V0
>>689
excel2010だけど全く同じ現象が起こるわ
F5からじゃくてAlt+F8な
2022/06/26(日) 23:30:30.80ID:CNfWwh200
この画面開いたらn98セルに行って勝手に選択(コピー?)してくれる
https://i.imgur.com/8G6jMt0.png

逆に、alt+f8でマクロを開いた状態でセル選択するとテキストボックスに反映されるので、
ここは参照かなにかで連動してるっぽい
https://i.imgur.com/cIRhTsz.png
2022/06/27(月) 07:11:11.91ID:KEClHONvr
>>694
予約語とかセル番地名、数字始まりは駄目
2022/06/27(月) 07:18:40.52ID:pJh/2YwLH
>>695
セル番地もダメだったのか、ウソついてごめんなさい
2022/06/27(月) 07:20:43.06ID:kD2T1aicd
セル番地名ってダメだったのか
698デフォルトの名無しさん (ワッチョイ 4f0e-6kVq)
垢版 |
2022/06/27(月) 07:28:39.14ID:JHJu1s6G0
For each i in collection
 if a=1 then
  if b=1 then
   if c=1 then
    Debug.print "うんこ"
   end if
  end if
 end if
next i

こんな階層はしないほうがいいですか?もしそうならどうすべきですか?
ちなみに実際の条件文はa=1などのように単純ではなくてもっと複雑怪奇で長い文字列です。
2022/06/27(月) 07:42:09.30ID:/YUVVdlZD
インデント揃えてれば良いんじゃない?
それかある程度深くなったら別ルーチンや関数に飛ばすとか
2022/06/27(月) 07:44:02.36ID:cx09ANOo0
if a=1 and b=1 and c=1
にすればすっきり
2022/06/27(月) 08:00:18.06ID:qwmHCu1Hd
>>700
VBAはショートサーキットじゃないから遅くなる
2022/06/27(月) 08:05:04.58ID:3L19Fpz+0
>>695
それどこかに書いてある?
まあ予約語や数字始まりがダメなのはわかるけどセルアドレスは盲点だわ
2022/06/27(月) 09:20:29.88ID:WYWqaC3Yd
>>698
何がしたくてそのIF文を書いてるかわからないけどELSEに対しての記述がなければ>>700みたいな書き方にしてもいいけど
自分はその程度のネストは許容範囲だけどね
それとなんでしないほうがいいと思ったかも書くと他の回答もらえるかもね
2022/06/27(月) 09:26:36.50ID:iDqL/u9w0
年取ると4階層なんかもう見たくない
2022/06/27(月) 09:27:26.36ID:HPVEPi/ad
Excel2021でも再現したわ
セル番地はモジュール名にできないのか、知らんかった

捨て変数とか作業ファイル名なんか普通にaaa1とか使ってるから、いつひっかかってもおかしくなかったのに
思い返してみると、なぜか捨てSubはtest1とかmacro1にしてた
2022/06/27(月) 09:31:15.07ID:iDqL/u9w0
今わかってる範囲では、モジュール名にできるけど挙動が少しおかしくなる
避けられるなら避けたほうが無難だろうね
2022/06/27(月) 09:34:13.54ID:Kt0Hv+oPd
>>692
英字1文字でも3文字でも飛ばされる
なんかの裏技に使えそうな気がする
遠くのセル範囲をちょっと確認したいとか
708デフォルトの名無しさん (ワッチョイ 8f5f-tCSL)
垢版 |
2022/06/27(月) 09:36:09.63ID:kVADuAyl0
>>698
いわゆる早期リターンとかガード節ってやつ

For Each i In Collection
If a <> 1 Then GoTo continue
If b <> 1 Then GoTo continue
If c = 1 Then
Debug.Print "OK"
End If
continue:
Next
2022/06/27(月) 09:50:33.84ID:WYWqaC3Yd
>>708
自分としてはもともとの判定を変更するような回答はどうかと思ったりするんだよね
複雑怪奇とかいてるのでわかりやすい回答なら「if not (a = 1) then」にしたほうがいいのではないかと
それとそこまで書いたらcの判定もcontinueで飛ばしたほうがすっきりするかと
2022/06/27(月) 09:53:16.46ID:H4LNDdnJ0
>>707
マクロじゃなくてジャンプでいいってなるんじゃ
711デフォルトの名無しさん (アウアウウー Sad3-n9/C)
垢版 |
2022/06/27(月) 10:00:09.47ID:Do3p35pda
>>698
内容がわかるようにコメントつければいいんじゃね
2022/06/27(月) 10:15:26.20ID:3L19Fpz+0
>>705-706
モジュール名にはできないけど>>694のは手続き名だからモジュール名で修飾(※)すれば呼び出せるよ
※ マクロ名の欄に直接 Module1.n98 のように入力する
2022/06/27(月) 10:19:02.79ID:iDqL/u9w0
>>712
スマン、勘違いしてた
2022/06/27(月) 10:24:13.47ID:3L19Fpz+0
>>698
一般論としてネストは浅い方が理解しやすいからそのコードであれば>>700>>708みたいにした方が読み易い
ただ>>701が言うようにVBAにはショートサーキット(短絡評価)がないので遅くなるのはいいとしても
If N <= UBound(A) And A(N) = 1 Then ...
みたいなのは
If N <= UBound(A) Then
If A(N) = 1 Then ...
のようにする必要がある
715デフォルトの名無しさん (ワッチョイ 8f5f-tCSL)
垢版 |
2022/06/27(月) 10:29:53.48ID:kVADuAyl0
まあ、複雑な判定するならメソッドに切り出すのが間違いないわな
VBEだとIDEのサポートないから若干めんどくさいけど
2022/06/27(月) 11:00:14.42ID:tRNW+/P90
>>698
賛否あると思うが
For Each i In Collection: Do
 If a <> 1 Then Exit Do
 If b <> 1 Then Exit Do
 If c <> 1 Then Exit Do
 Debug.Print "OK"
Loop: Next
みたいな書き方もある
2022/06/27(月) 11:01:13.33ID:tRNW+/P90
最後の行間違えた
Loop Until 1: Next
2022/06/27(月) 11:05:37.12ID:zkyvRAcfa
あんまりにもネストするなら、判定文(if複数)だけ別プロシージャ(Function)として外出しして、TrueかFalseを返させるようにするかな
IsGoukaku みたいなプロシージャ名にすると何したいかがわかってメンテ楽だし
2022/06/27(月) 11:29:16.42ID:gUdOjGv30
セル番地がダメならダメでいいけど、あんな挙動をするのはバグだよ。
本来はメッセージだして弾くべきじゃね?
office365でも同じならだれかMSにチクってみてくれ。
以前、MSの掲示板にWinの不具合を書いたら、
速攻で消されたが、
こっちでも確認できたから開発にレポしといたていうメールが来て感動したわ。
2022/06/27(月) 11:31:14.56ID:iDqL/u9w0
>>719
365でも同じだよ
2022/06/27(月) 11:34:53.87ID:gUdOjGv30
>>700
if a=1 and b=1 and c=1
にすると内部では判断を3回することになる。

if a=1 then
if b=1 then
if c=1 then
にすると判断は少なくなるのだから、ネストするほうが正解じゃね?
もちろん、ifを書く順番は判定が少なくするようにする必要はあるが。
2022/06/27(月) 11:48:23.44ID:Fr547gX6r
>>719
ゆうてVBAとかアプデすんの?
2022/06/27(月) 11:52:04.31ID:iDqL/u9w0
してるよ
■ このスレッドは過去ログ倉庫に格納されています