Excel VBA 質問スレ Part77

■ このスレッドは過去ログ倉庫に格納されています
2022/07/17(日) 07:07:35.59ID:tS4zKdphH
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

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

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

※前スレ
Excel VBA 質問スレ Part76
https://mevius.5ch.net/test/read.cgi/tech/1651339421/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/09/06(火) 13:07:25.60ID:Z9J6cI+IM
printfデバッグでどこまで動いているか確かめましょう!
2022/09/06(火) 13:13:46.25ID:Td+5EGNEa
>>496
始めに宣言を書いている方が探しやすいと思うけど
要らなさそうなものはまとめてコメントして確認すればいいわけだし
2022/09/06(火) 15:27:46.04ID:NuTb9qxy0
VBAでメールとか初めて見た
2022/09/06(火) 15:38:34.30ID:iobTnTaB0
>>500
手動で実行できるなら、VBSで起動しているときのユーザとその権限があやしい
つかエラー吐いてないんじゃなくて、ちゃんとエラー捕まえられてないだけだと思うが

あとスクリプト系からのメール送信はいろいろセキュリティ周りでチェックされるかもしれん
とくに会社で管理されてるようなPCなら、ちゃんと管理者に許可とってからやれよ
2022/09/06(火) 15:44:13.81ID:+5wORWUf0
メール送信用のc#のexeつくって呼び出させるようにしたことならある
あとsendgridAPIよぶの
前者は他にも使い回したな。.NETcoreだった気がするからいつまで使えるやら
2022/09/06(火) 15:58:15.39ID:z3X/Y8zI0
>>498
あるものもある、例えばPowerShellにはそのものズバリのRemove-Variableなんてものがあったりする
2022/09/06(火) 16:28:13.42ID:QxRWO4Sk0
>>503
>タスクバーのエクセルが点滅して動作が止まります
バックグランドで起動しているだけじゃ、エクセルのマクロが実行されないのかも

printf デバッグで、どこまで動いているか確かめるべき!
エクセルのマクロの、Outlook の起動コードの前後で、何かを出力すれば?

Outlook の起動前に、端末・ファイルへ出力する
Outlook の起動コード
Outlook の起動後に、端末・ファイルへ出力する
511デフォルトの名無しさん (アウアウウー Sa8b-2LH/)
垢版 |
2022/09/06(火) 20:05:52.59ID:D5ckGmEva
動作が止まるのは終了したからかもよ
512490 (ワッチョイ bf66-bBdM)
垢版 |
2022/09/06(火) 20:19:56.69ID:uuhY1QFW0
>>505
なるほど。そういう方もおられるのですね。
EXCEL VBAのプロシージャはあんまり長くしない方がいいよみたいなサイト読んで影響受けてます。
コードの書き方って結構こだわりを持っている方がいるようで、自分はそれに影響を受けやすい方です。
自分もこだわりたい方なんだと思います。

EXCEL VBAを知って、宣言は直前が基本ですよみたいな記事読んで強く影響受けました。
だから使い終わるごとに未定義に出来れば毎度宣言しなおせるからすっきりするのになぁみたいな気持ちでした。
EXCEL VBAとしてはfor やfor eachに使うような変数は先頭宣言にしてやっていこうと思います。
2022/09/06(火) 20:29:06.28ID:nWcJdu8F0
ちゃんとfunction分けてたら直前でいいけど、
大抵クソデカ関数ひとつか、グローバル宣言祭りだろうからなあ
2022/09/06(火) 20:37:51.18ID:z3X/Y8zI0
>>512
> EXCEL VBAとしてはfor やfor eachに使うような変数は先頭宣言にしてやっていこうと思います。
とりあえずそれで動くところまで持って行ってコードが固まったらこだわりのコードスタイルにリファクタリングすればいいかと
515デフォルトの名無しさん (ワッチョイ e78e-VPUc)
垢版 |
2022/09/06(火) 21:28:56.11ID:3UeoLADl0
>>512
>他の言語だとあるのであるかなと思ったのです。

他の言語って具体的に何?
答えられない?逃げる?それともまた言い訳?
2022/09/06(火) 21:54:35.94ID:iobTnTaB0
>>512
個人的に、VBAに限定した話で宣言は直前とかいう記事はあんまり信用できないと思ってる
最近の言語ならそれで良いんだけどね
2022/09/06(火) 22:58:52.94ID:z3X/Y8zI0
>>515
>>509
煽るならもうちょい知識をつけてからにした方がいい
2022/09/06(火) 23:05:26.43ID:NuTb9qxy0
あまり複雑化しても辛くなるしな
シンプルにシンプルによ
519デフォルトの名無しさん (ワッチョイ 875f-Iguz)
垢版 |
2022/09/07(水) 07:28:44.73ID:TmSq6TyA0
>>516
どういうこと?
最近の言語と違って
・ブロックスコープがない
・宣言と同時に代入できない
以上VBAの特徴2点を差し引いたとしても、
先頭宣言が直前宣言より優れている所なんかひとつもないと思うんだが
520デフォルトの名無しさん (ブーイモ MM8f-9tU7)
垢版 |
2022/09/07(水) 09:01:28.19ID:l5y/t4MDM
個人的信条を議論するのは無意味
2022/09/07(水) 17:30:20.88ID:5SecbqGCM
変数はImmutableにするのが最近の言語でしょ
こうなるもうどこで宣言しようが関係ない
2022/09/07(水) 19:33:33.73ID:nObPwJJb0
>>519
まあ>>520に同意しつつ、一番の理由は、
VBAでの一般的なスタイルに反するからなんだが

ブロックスコープがないのに直前で変数宣言するのは、
違うブロックで宣言された変数と宣言が被るリスクが上がるだけなんだが
むしろ直前宣言が優れている点ってどこだよ?
2022/09/07(水) 19:40:46.55ID:qgePcMk7a
>>519
同意する
まあ>>516は理由を書いてない時点であまり信用できないと思ってる
2022/09/07(水) 19:45:10.64ID:qgePcMk7a
>>522
> 違うブロックで宣言された変数と宣言が被るリスクが上がるだけなんだが
そんなものどこで宣言しても同じだろ

> むしろ直前宣言が優れている点ってどこだよ?
コードを追う時に見える範囲に宣言あれば型とかも分かるだろ
2022/09/07(水) 19:47:45.63ID:URQHgzNh0
>>522
・別functionにしない
・設計が出来ない
・順番がコロコロ変わる

こういう場合は直前の宣言がいいんだろうな
2022/09/07(水) 19:48:48.00ID:ie60y+bR0
インデックスとはいえ変数を使い回すのはNGなのです!
VBAだとしても許されません!ロボコン0点
2022/09/07(水) 20:14:29.57ID:lr2lUZXda
質問でもなく他人のコードの変数をどこに書こうがどうでもいいのに書き方に熱くなる人はバカなんだろうね
まあそういう技術的な部分に関係ないところしか語れない程度が集まるスレなんだろうけどw
2022/09/07(水) 20:36:38.49ID:pBpkzzj3a
>>527
そんなに熱くなるなよw
529デフォルトの名無しさん (スッップ Sd7f-VPUc)
垢版 |
2022/09/07(水) 20:40:11.15ID:dC3z0bZtd
>>517
で、答えられずに逃げたのかよ
2022/09/07(水) 20:55:49.52ID:qYDBMpOU0
>>529
マジでアホなの?
PowerShellって書いてあるだろw
531デフォルトの名無しさん (ワントンキン MM3f-HKBf)
垢版 |
2022/09/07(水) 21:25:08.49ID:dOhAzb3IM
>>530
へー、shellコマンドと言語の違いがわからない人か
納得
2022/09/07(水) 21:50:42.41ID:qYDBMpOU0
>>531
PowerShellって結構リッチなプログラム言語ですけど?
頭大丈夫?
2022/09/07(水) 22:25:03.60ID:GXE70sRqM
シェルとシェルスクリプトは間違えてませんですわー
534デフォルトの名無しさん (ワッチョイ 5f4f-ozIc)
垢版 |
2022/09/07(水) 22:55:46.20ID:N0bzWtYO0
>>524
そうね。ブロックスコープは確かに便利。
ただ、匙加減の問題にもなるけど
ブロックスコープに慣れるとついつい
単一責任原則の考え方がおざなりになりがちで
密結合なものを作ってしまい易くなる。

なので、あくまで俺はだけど
EXCELのVBAに関してはメソッドや関数の
頭に変数定義を行うようにしている。
それでコードが読み辛くなるようであれば
その時点でリファクタリングの対象になるという考え。
2022/09/07(水) 23:29:34.28ID:N0PmJDO50
でも誰も読まないんだよなー
2022/09/07(水) 23:46:23.08ID:QgSPv1dJ0
ここの回答者は上級者なんだからVBAの事端から端まで知っていると思っていたんですけど??
なんでこんなに荒れているのですか?
2022/09/07(水) 23:51:19.61ID:oCHm3LOdM
VBAで単一責任て
そもそも表計算ソフトで画面やDBモドキ作ってる時点でおかしいと思わないのか
2022/09/08(木) 00:18:03.89ID:GEpvz+Yp0
知識と人間性には何も関係がないからじゃね
2022/09/08(木) 01:29:45.47ID:ih3U5PTX0
だって回答者に回れるって事は知り尽くしてるって事なんでしょ?
ちょっと詳しいだけじゃ回答できるはずないもんね?
2022/09/08(木) 01:40:01.52ID:eb3KVsRH0
>>539
ソースは?
誰の発言?
2022/09/08(木) 04:43:57.30ID:dSUuwrfW0
>>534
なので、の前後の関係がよくわからん
> EXCELのVBAに関してはメソッドや関数の頭に変数定義を行うようにしている。
それこそ余計蜜結合になるかと
2022/09/08(木) 06:11:23.79ID:vw1M88UR0
誰が上級者と認定したん?
ここのカキコに資格試験なんかあるかいな・・・

回答が使えるかどうか、正しいかどうかが全てじゃ。
2022/09/08(木) 06:33:16.02ID:13BgqVgC0
どこで宣言するか問題って、画面上部をスクロールせず固定出来るようになれば解決するんだろうな。
エクセルは出来るんだから、VBAの画面も出来るようにして欲しいものだ。
2022/09/08(木) 06:54:06.36ID:9KZ4CtoQa
>>543
VBEは昔ながらのUIなので垂直スクロールバーの上部を下にドラッグすると同一オブジェクトコードの水平分割表示ができるけれど
545デフォルトの名無しさん (ワッチョイ 5f4f-ozIc)
垢版 |
2022/09/08(木) 08:07:26.88ID:YfOXyicz0
>>541
分かり辛かったかな?
平たく言うと変数が何に使っているか分かり辛くなるような長いコードをひとつの関数やメソッドに書くなということ。

そもそもひとつの関数やメソッドにはひとつの役割だけ持たせるべきで、そうした場合、変数が何に使ってるか分からないくらい長くなること自体あまりないし、
それで長くなるようであればそもそもの作りがおかしいのでリファクタリングの対象とする、ってことなんだけどね。
546デフォルトの名無しさん (アウアウウー Sa8b-Ro21)
垢版 |
2022/09/08(木) 09:21:51.81ID:JEMfdspaa
VB/VBA/ExcelもAccessもOfficeごと窓からポイッ
2022/09/08(木) 10:06:01.26ID:dSUuwrfW0
>>545
> 平たく言うと変数が何に使っているか分かり辛くなるような長いコードをひとつの関数やメソッドに書くなということ。
それ変数の宣言位置とは違う話だろ
まあ先頭に変数宣言するメリットを説明できないならいいや、バイバイ
548デフォルトの名無しさん (ワッチョイ 5f4f-ozIc)
垢版 |
2022/09/08(木) 11:40:59.40ID:YfOXyicz0
>>547
なんで?
どうせ同じ関数内で同じ名称の変数なんて作れないんだから
全部纏めて同じ位置にあった方が「この変数はこのシチュエーションのときにこう言った意味で使う」とか命名し易いじゃん。

使ってる変数名を再宣言しようとして「あ」となることもないし、
同じ変数をバカみたいに使い回して本当は値変えると不味かったのに変えちゃったりとかアホなことも減るよ。
549デフォルトの名無しさん (ワッチョイ 5f4f-ozIc)
垢版 |
2022/09/08(木) 11:47:17.27ID:YfOXyicz0
ま、そもそもそんなこと気にするくらい長いコード書いちゃいけないんだけどね。
そちらのレベルに合わせて話してもそれだけのメリットはあるよ。
2022/09/08(木) 13:19:53.66ID:E2yDW5TJ0
Wordがどうしようもなく使いにくいので、
Excel VBAで代わりのツールを作りたいと思います。
こんな考え方は邪道でしょうか?
2022/09/08(木) 13:50:27.43ID:N6XG++JQ0
WordVBAを何故つかわない?
マウロ記録がないOutlookVBAやPowerpointVBAなら一瞬気持ちがわかるが
552デフォルトの名無しさん (ワッチョイ 27da-2LH/)
垢版 |
2022/09/08(木) 14:17:07.18ID:Sm7a3fWy0
loopのカウンタを使用後に消さないと
順番入れ替えたらバグるとか気にする初心者にはvba向いてないと思う
2022/09/08(木) 16:06:28.64ID:e4Jhfn6X0
ワードにできることはエクセルでほぼ出来るからワードの使いかた忘れてしもた
しかし困ったことはない
2022/09/08(木) 17:02:48.44ID:dSUuwrfW0
>>548
> 全部纏めて同じ位置にあった方が「この変数はこのシチュエーションのときにこう言った意味で使う」とか命名し易いじゃん。
コボル臭が... w
まあ使ってる近くにあれば宣言なども簡単に確認できるメリットより命名のメリットを重視する人もいるんだね

> 使ってる変数名を再宣言しようとして「あ」となる
んだから
> 同じ変数をバカみたいに使い回して本当は値変えると不味かったのに変えちゃったりとかアホなことも減るよ。
なんてなるわけないと思うけど?
2022/09/08(木) 19:47:18.35ID:wUuMBq/Ad
Excel → Markdown → Word アウトライン変換のマクロを作れば大分マトモになる予感
Excelの列で見出しを識別する感じで
2022/09/10(土) 00:50:29.07ID:yQKHhevv0
intersect( activecell.ListObject.HeaderRowRange,activecell.EntireColumn).Address

テーブル上にアクティブセルがあり、そのセルの列ラベルのアドレスを調べたく
こんなのを書いたのですが、もっと他にイケてる書き方はないでしょうか
2022/09/10(土) 10:48:25.59ID:+u60WJ7w0
activeCell.End(xlUp).Address は?
上に隣接する別のテーブルがないことが条件だけど
558デフォルトの名無しさん (ササクッテロレ Spbd-0QGi)
垢版 |
2022/09/10(土) 15:51:20.36ID:qRafw5tCp
>>557
それだとテーブルが1行目開始でなくて
テーブルの項目名の部分にアクティブセルがあった場合は
テーブルから離れた位置にカーソルが行ってしまうな
2022/09/11(日) 01:14:19.08ID:W9G67fQJ0
バイナリデータの書き込みについて質問です。
hello という文字列をいったんバイナリにしてファイル書き込みするような
プログラムを書いているのですが、書き込みすると
h e l l o
というように変なゴミが入ってきます。
vbaではバイナリデータの書き込みは完全にはできないということなのでしょうか。

該当コード
https://ideone.com/MDI6yW
2022/09/11(日) 01:15:18.73ID:W9G67fQJ0
書き込みすると変なゴミデータが見えなくなってしまいましたが、要するに
正確に半角英数字でhelloという文字が再現できないのです。
2022/09/11(日) 01:27:32.82ID:PnV//sAoa
>>560
どういう内容なのかダンプして確認しないのかい?
2022/09/11(日) 01:41:57.90ID:yPB6Wd0g0
>>559
Option Explicit
Sub main()
  Dim bs(4) As Byte
  bs(0) = Asc("h")
  bs(1) = Asc("e")
  bs(2) = Asc("l")
  bs(3) = Asc("l")
  bs(4) = Asc("o")
  Dim fn As Integer: fn = FreeFile
  Dim fpath As String: fpath = "C:\指定のパス\output.txt"
  Open fpath For Binary As #fn Len = 1
  Dim i As Integer
  For i = LBound(bs) To UBound(bs)
    Put #fn, , bs(i)
  Next i
  Close #fn
End Sub
2022/09/11(日) 01:50:58.58ID:W9G67fQJ0
>>562
for each で受ける変数をvariant型にするとうまくいかんということですか?
open の変数にLen=1(1バイトごと)っていれられるんですね。
2022/09/11(日) 01:53:10.28ID:yv0WXRwp0
>>559
説明はちゃんと読もう
vbaはかなりゆるゆる言語なので、なるべくvbaにあわせたコードにしたほうがいい
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/put-statement

>書き込まれる変数が 数値型の Variant である場合は、Put により、Variant の VarType を識別する 2 バイトが書き込まれた後に、変数が書き込まれます。
こんなもん追いかけてられんよ
ステートメントは極力使わず、関数にした方がいいと思う

もう少し言うと、実現したい事を直接聞いた方がいい。
vbaでバイナリとかめんどくさすぎて誰もやってないので、
できるかどうかなんてあんまりみんな分かってない

>>561
してもあんま意味ないだろ
2022/09/11(日) 02:05:46.07ID:yPB6Wd0g0
>>563
Len = 1 にしても無駄
あと、EachはVariantしか使えない

>>564
ところがバイナリダンプしてみると1文字あたり2バイトしか書き込まれてないんだよな
その説明の通りだと3バイトずつ書き込まれるはずなのに
2022/09/11(日) 02:07:03.03ID:W5Eoe6lQa
>>564
今回はもう結果が出ているけれど、入出力を行ったら確認しないのか?
出力結果から意図するものとどう異なるかによって予測できる場合もあるだろ
2022/09/11(日) 02:11:34.10ID:W9G67fQJ0
>>564
正直説明一々読むの大変なのでここで聞いてそのあたりをつけようと思ってます。

>ステートメントは極力使わず、関数にした方がいいと思う
ちょっとここがよくわからないんですがどういうことですか。

>もう少し言うと、実現したい事を直接聞いた方がいい。
vbaの練習のためにとりあえずbase64エンコーディングを実装しようとしてました。
エンコーディングはできました。デコードでつまづいて格闘してましたが、デコードもとりあえずできました。
つぎは、bmpファイルを読み込んで1x1pixcelに縦横絞ったセルのシートに画像表示させるとか
やろうと思ってます。
2022/09/11(日) 02:12:49.77ID:yv0WXRwp0
>>565
3バイトずつだぞ
https://i.imgur.com/Um3HyuV.png
2022/09/11(日) 02:19:41.47ID:yv0WXRwp0
>>567
結局やりたいことはライフゲームとか、画像処理だろう
vbaは、事務処理特化なんだ。本当にやめたほうがいい。

vbaでクリエイティブな事をやろうとすると、めちゃくちゃ遅い
入出力用のセルがすごく見やすいのはわかるんだけど、別言語でやったほうがいい
具体的に言うとC#かvb.netがいい。
jsならそのままアプリにも移行できる
2022/09/11(日) 02:24:11.91ID:W9G67fQJ0
とりあえず入門したいんで、アルゴリズムわかるやつ実装してるだけなんであんま考えてない。
最終的には機械学習実装できりゃいいなと思ってるんで、bitmap表示実装できたら
vbaでそこまでやるレベルになるかなと。
2022/09/11(日) 02:44:48.34ID:+Dglx5gI0
vbaの使い方間違ってますよ
2022/09/11(日) 11:47:30.27ID:scHPWuyOa
他人が何をやろうと勝手なんだから質問にこたえないなら放置すればいいと思うけど
説教野郎って減らないよね
573デフォルトの名無しさん (スプッッ Sd0a-JgIN)
垢版 |
2022/09/11(日) 13:01:03.57ID:qfkrXmQcd
>>567

>正直説明一々読むの大変なのでここで聞いてそのあたりをつけようと思ってます

死ね
2022/09/11(日) 13:48:26.08ID:4omWB5g70
いや、普通に頭くるだろ?
ダメダメな使い方してると
2022/09/11(日) 17:18:35.58ID:9MrulJbSd
>>569
ライフゲームってなんなのかグーグルで検索したら
結果ページ上で勝手にライフゲームが始まってたわ
さすがグーグル
576デフォルトの名無しさん (ワッチョイ 11da-kBqH)
垢版 |
2022/09/11(日) 18:42:32.58ID:+bJdyqft0
>>575
気づいたときにはライフがゲームオーバーになってるよ
2022/09/11(日) 20:43:41.22ID:yPB6Wd0g0
本当だ
ブラウザの背景でライフゲームが動いてるw
無駄な機能多すぎるだろGoogle
578デフォルトの名無しさん (ワッチョイ 5e66-Ba9i)
垢版 |
2022/09/11(日) 22:06:38.09ID:mrmcBHlY0
ttps://excel-ubara.com/excelvba5/EXCELVBA228.html
エクセルの神髄さんのところにあるクイックソートの引数について質問です
lngMinとlngMaxを必ず指定しないといけないようなのですが、
どんな数字を入れればいいのですか?

 vBase = argAry(Int((lngMin + lngMax) / 2))
こうなっていて、argAryインデックスの2倍を超える数値は入れられないようです。
インデックスとしての真ん中であるなら関数側でuboundとかlboundとかから計算すればいいように思いました。

バブルソートやインサートソートと違ってイマイチやってる事がわからないので、
lngMinとlngMaxの引数にいれるべき数値がわかる方おられましたら教えてください。
2022/09/11(日) 22:37:51.72ID:3GTYFVAp0
>>578
配列のうちでどこをソートするか指定できるようになってるんじゃないですかね
2022/09/11(日) 22:42:49.09ID:6zTUjY+M0
>>578
ソートしたいレンジの最初と最後のインデックス
クイックソートは最初にピボットを決めてそれより小さいものをピボットより前に、大きいものをピボットの後ろに移動して、ピボットの前の区間と後ろの区間をそれぞれクイックソートする方法を繰り返す

ピボットの決め方は色々あるけど、その人は配列の真ん中のオブジェクトを選んでるだけ。ランダムに選ぶと平均的には最も良い結果が得られるけど、もうひと手間かかる
2022/09/12(月) 01:30:49.61ID:0s0pxnwOM
ユーザーフォーム内のコマンドボタンではfunctionの呼び出しはできない仕様でしょうか?
似たようなコードのボタンがあり、特定ブックを取得するための同じコードを全部のボタンに書いています
ごちゃごちゃしてしまっているのできれいにしたかったのですが、functionが呼び出せず変数が空でエラーになってしまいます
582デフォルトの名無しさん (ワッチョイ e6bb-I+3W)
垢版 |
2022/09/12(月) 07:39:53.33ID:STPpGgy+0
>>581
呼び出し出来るよ。そのエラーになったコードをここに書いてもらえれば原因がわかるかと。
583デフォルトの名無しさん (アウアウウー Sa21-bmfI)
垢版 |
2022/09/12(月) 11:53:11.04ID:fWVKyvtQa
sub から呼ぶとか
2022/09/13(火) 09:42:49.11ID:g8hgly2P0
>>579
やってみたら確かに!驚きです。
>>580
クイックソートって発明品みたいなものですよね。
人間が手動で並べ替えても慣れる程にクイックソートみたいなやり方が高速になっていくんですかね。

皆さんありがとうございました。
2022/09/13(火) 10:05:15.02ID:kJFB2T9s0
いえいえ
586デフォルトの名無しさん (テテンテンテン MM3e-++ih)
垢版 |
2022/09/13(火) 23:06:23.52ID:m4C/g6mCM
>>582
フォームが3階層くらいありますが

1.モジュールからフォームの呼び出し
Sub commentForm()

rowBtn = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
colBtn = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column

大分類.Show vbModeless

End Sub
587デフォルトの名無しさん (テテンテンテン MM3e-++ih)
垢版 |
2022/09/13(火) 23:09:43.50ID:m4C/g6mCM
すみません、1つ目フォーム呼び出しのモジュール内に以下のコードがあります
Public ShIndex As String

2階層目で3つの大分類の選択

2.分類選択
Private Sub CommandButton1_Click()

'コマンドボタンのタイトル反映 ※エクセルのセルを反映させています。
中分類.CommandButton1.Caption = Worksheets("2-1").Range("C1").Text
中分類.CommandButton2.Caption = Worksheets("2-2").Range("C1").Text
中分類.CommandButton3.Caption = Worksheets("2-3").Range("C1").Text
中分類.CommandButton4.Caption = Worksheets("2-4").Range("C1").Text
中分類.CommandButton5.Caption = Worksheets("2-5").Range("C1").Text

中分類.Show vbModeless

End Sub
588デフォルトの名無しさん (テテンテンテン MM3e-++ih)
垢版 |
2022/09/13(火) 23:11:31.11ID:m4C/g6mCM
3.さらに次の分類へ

Private Sub CommandButton1_Click()

ShIndex = "2-1"

'コマンドボタンのタイトル反映 ※エクセルのセルを反映させています。

中分類1.Caption = Worksheets(ShIndex).Range("C3").Value
中分類1.CommandButton1.Caption = Worksheets(ShIndex).Range("D3").Value
中分類1.CommandButton2.Caption = Worksheets(ShIndex).Range("D7").Value
中分類1.CommandButton3.Caption = Worksheets(ShIndex).Range("D11").Value
中分類1.CommandButton4.Caption = Worksheets(ShIndex).Range("D15").Value

中分類1.Show vbModeless
End Sub
589デフォルトの名無しさん (テテンテンテン MM3e-++ih)
垢版 |
2022/09/13(火) 23:36:32.69ID:m4C/g6mCM
4,最終の選択ボタン
コメントアウトの範囲内をfunction(wbSerch)として、値を返して変数を使用したいです
Private Sub CommandButton1_Click()
Dim wbRepName As String
'########## ここから ##########
Dim i As Long
Dim wb As Workbook
Dim wbFullPath As String
For i = 1 To Workbooks.Count
Set wb = Workbooks(i)
If wb.FullName Like "*検索ワード*" Then ' * *に挟まれた文字を含むブックを検索する
wbFullPath = wb.FullName
Exit For
End If
Next
Dim pos As Long
pos = InStrRev(wbFullPath, "\")
If (pos > 0) Then
wbRepName = Right(wbFullPath, Len(wbFullPath) - pos)
End If
'########## ここまで ##########
Dim rowRep As Long
rowRep = Worksheets("シート名").Cells(rowButton, "Q").Value
Dim num As Long
num = 1
If Workbooks(wbRepName).ActiveSheet.Cells(rowRep + 1, "H") = "" Then
Workbooks(wbRepName).ActiveSheet.Range(Workbooks(wbRepName).ActiveSheet.Cells(rowRep + 1, "H"), Workbooks(wbRepName).ActiveSheet.Cells(rowRep + 2, "H")) = _
Worksheets(ShIndex).Range(Worksheets(ShIndex).Cells(3 + (num - 1) * 4, "E"), Worksheets(ShIndex).Cells(3 + (num - 1) * 4 + 1, "E")).Value
End If
Workbooks(wbRepName).ActiveSheet.Range(Workbooks(wbRepName).ActiveSheet.Cells(rowRep + 4, "H"), Workbooks(wbRepName).ActiveSheet.Cells(rowRep + 7, "H")) = _
Worksheets(ShIndex).Range(Worksheets(ShIndex).Cells(3 + (num - 1) * 4, "F"), Worksheets(ShIndex).Cells(3 + (num - 1) * 4 + 3, "F")).Value
End Sub
590デフォルトの名無しさん (テテンテンテン MM3e-++ih)
垢版 |
2022/09/13(火) 23:37:53.43ID:m4C/g6mCM
コードをアップする際に一部書き換えで変数が微妙に違うのは許してくださいw
2022/09/14(水) 01:24:17.40ID:jzWlgqKP0
>>589
大量のコード張るなら、どっかコード張るサイトあるからそこ使ってくれ

>コメントアウトの範囲内をfunction(wbSerch)として、値を返して変数を使用したいです
やれば良いとしか
自分でやって動かなかったっていうコード出せよ
エラーが出たならエラー内容も

Functionが呼び出されないんじゃなくて、呼び出したけど値を返してないか
返された値をちゃんと受け取ってないんじゃないかと予想したがな
592デフォルトの名無しさん (ワッチョイ e6bb-I+3W)
垢版 |
2022/09/14(水) 05:04:23.30ID:Pxkwm+eH0
>>589
色々気になるところばかりですが、Functionだけについていうと

Public Function プロシージャ名() As String
'処理
プロシージャ名 = ファンクション内で作成した文字列
End Function

という感じで作って、呼び出す側は下記で

wbRepName = ファンクション名
593デフォルトの名無しさん (スプッッ Sdea-mOAX)
垢版 |
2022/09/14(水) 08:09:29.31ID:wHV8fEyKd
>>592
ありがとうございます
やっぱりそれでいいんですよね
とりあえず動かないのは困るので、関数を呼び出すコードは削除してしまったのでまたやり直してみます

適当にネットで検索して継ぎはぎしているのですが、これはやめた方がいいみたいなところがあれば教えていただけると
594デフォルトの名無しさん (スプッッ Sdea-mOAX)
垢版 |
2022/09/14(水) 08:09:41.99ID:wHV8fEyKd
>>592
ありがとうございます
やっぱりそれでいいんですよね
とりあえず動かないのは困るので、関数を呼び出すコードは削除してしまったのでまたやり直してみます

適当にネットで検索して継ぎはぎしているのですが、これはやめた方がいいみたいなところがあれば教えていただけると
2022/09/14(水) 10:47:45.73ID:DQiHAQaU0
>>594
ネットで継ぎはぎはやめたほうがいい
2022/09/14(水) 14:30:03.63ID:AS+oyxbj0
継ぎはぎっていちばんやってはダメな事でしょ
不具合でたら修正困難
597デフォルトの名無しさん (スプッッ Sd0a-JgIN)
垢版 |
2022/09/14(水) 14:39:07.90ID:xmB1xf8ad
>>594
お前みたいな奴がVBAを使うのはやめた方がいい
598デフォルトの名無しさん (ブーイモ MM3e-lqbG)
垢版 |
2022/09/14(水) 14:44:22.14ID:x3WDqTpPM
それな
599デフォルトの名無しさん (アウアウウー Sa21-bmfI)
垢版 |
2022/09/14(水) 15:01:12.80ID:9jzC7a23a
ネットの情報をうのみにするのはよくない
2022/09/14(水) 15:23:36.39ID:mWSu9Hj1M
特にここの奴らの言うことなど……
2022/09/14(水) 16:32:30.56ID:AS+oyxbj0
このスレも含めてネットをなんでもかんでも鵜呑みにしないように。
602デフォルトの名無しさん (ワッチョイ ea4f-0QGi)
垢版 |
2022/09/14(水) 20:19:10.06ID:qlFB5bFT0
むしろガンガンコードのコピーでも継ぎはぎだらけでも何でもやれ
それで痛い目を見れば二度とやらなくなるだろう
ただし、他の人に迷惑を掛けない範囲でな
2022/09/14(水) 20:25:13.51ID:tyPb8uvVM
継ぎ接ぎでもなんでも動きゃいいよVBAなんて
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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