Excel VBA 質問スレ Part75

■ このスレッドは過去ログ倉庫に格納されています
2022/02/09(水) 14:24:32.62ID:I0u44nFvd
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/04/02(土) 20:08:08.57ID:rQp/oHNqa
>>703
なんでドキュメント読まないの?

複数の Case 句の expressionlist 式に一致する場合は、最初に一致した句に続くステートメントのみが実行されます。
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/select-case-statement
2022/04/03(日) 00:02:19.90ID:ZgXClf4M0
A=1かつB=1かつC=1だったらXが実行されるって言う事ではないのね
なんかややこしいね(´・ω・`)
2022/04/03(日) 03:01:36.86ID:J74pUyNp0
俺は中身が1行の時はCaseを1行にまとめる派
Sub Macro()
  Select Case True
    Case C <> 1: errmsg ("C")
    Case B <> 1: errmsg ("B")
    Case A <> 1: errmsg ("A")
    Case Else: MsgBox "メイン処理を実行します"
  End Select
End Sub

Sub errmsg(s$)
  MsgBox s & "=1じゃなかったので実行しなかった"
End Sub
2022/04/03(日) 06:50:49.06ID:o4u0MtXma
>>706
errmsg の呼出時の括弧は要らないのでは?
2022/04/03(日) 07:52:44.68ID:6Vj/pyuu0
>>706
こういうふうにはしないほうが良い?

Sub Macro()
  Select Case True
    Case C <> 1: msg ="C"
    Case B <> 1: msg ="B"
    Case A <> 1: msg ="A"
    Case Else: msg= "メイン処理を実行します"
  End Select
End Sub

msgbox(msg)
2022/04/03(日) 08:39:48.32ID:D1zTFGCZM
そうやって本筋じゃない方へ話題は逸れていく
2022/04/03(日) 09:01:58.41ID:Uf1/B9Ep0
Subの場合は
括弧を付けるならCallも付ける
Callを付けないなら括弧も付けない
それだけ
2022/04/03(日) 09:05:23.70ID:r53Jbhkva
>>708
> こういうふうにはしないほうが良い?
うん、それだと C = 2 でテストしたら単に C って表示されるだけだし
2022/04/03(日) 09:06:11.26ID:6Vj/pyuu0
>>709
今回はどんどん話を膨らませていいよ
2022/04/03(日) 10:18:01.32ID:spDayutJd
僕が考えた最高のコード
ってやつだろこんな話題にくいつくのもはずいわ
2022/04/03(日) 10:39:12.57ID:6Vj/pyuu0
>>708は間違いね
こういう風に、メッセージの中だけ変数に入れて最後で表示させるってのはやめたほうがいいでしょうか

Sub Macro()
  Select Case True
    Case C <> 1: msg ="C=1じゃなかったので実行しなかった"
    Case B <> 1: msg ="B=1じゃなかったので実行しなかった"
    Case A <> 1: msg ="A=1じゃなかったので実行しなかった"
    Case Else: msg= "メイン処理を実行します"
  End Select
End Sub

msgbox(msg)
2022/04/03(日) 10:49:41.47ID:LxaPNz9fM
好きにすればいい
2022/04/03(日) 12:48:35.67ID:AxYcslms0
>>714
実行しなかったって表示するのに実行しそうだな
2022/04/03(日) 13:26:31.81ID:mz7mxvwZp
しねーよハゲ
2022/04/03(日) 15:21:18.52ID:4YOQBH220
お前ら頑張ってるけど
メッセージなんかただの処理サンプルだろうから
>>701が採用されそうだけどね
2022/04/03(日) 15:52:40.85ID:vYlFEoJTd
実際の仕様でもなんでもない話に採用もクソもないのでは
好きにすればいいはなし
2022/04/03(日) 17:28:53.57ID:m8vuVm8ra
話題に食いつくのははずいのに批判だけはするんだな
てか、批判しかできないのかなw
2022/04/03(日) 17:42:03.95ID:6Vj/pyuu0
2022/04/05(火) 23:43:32.11ID:4aElhsU0a
>>714
最高のコード
2022/04/07(木) 20:06:13.11ID:k57kmbe60
>>722
End Sub の下に msgbox(msg) があるのに?
724デフォルトの名無しさん (ワッチョイ 234f-RJrg)
垢版 |
2022/04/07(木) 20:57:01.15ID:WZu7hIyw0
やっと書き込めた。
BB2Cが死んでJane Stileとかいうアプリで書き込んでるけど、VBAスレもその煽りかめっきり書き込み減ってるね。
2022/04/07(木) 22:52:18.94ID:shKfmndDa
>>723
最(もお茶が)高(く噴き出た)のコード
2022/04/08(金) 09:32:33.40ID:P5V0Axif0
ハイパーリンクで、他のファイルを開こうとすると、警告ダイアログが出ますが、
(「ファイルには、ウイルスやコンピューターに問題を…」)
非表示にできますか?

レジストリでDisableHyperlinkWarningをやっても、ダメでした…。
2022/04/08(金) 09:48:16.01ID:O75PAQWK0
ユーザーフォームに設置したボタンをクリックすると
Private Sub 〜〜〜_Clickのイベントプロシージャが追加されますが、
このコードの追加位置はどういう基準で決まっていますか?

すぐ隣のボタンのClickの近くに挿入されることもあれば、
結構離れた位置に挿入されることもあります。
2022/04/08(金) 18:32:41.81ID:DozpoMh4a
質問は一人一つまで。
2022/04/08(金) 19:07:30.71ID:aNhRPKRk0
>>726
ウイルスでも作っているの?
2022/04/08(金) 19:44:29.30ID:p3Omju050
エクセルVBAでウイルスを作ることはできますか?
エクセルVBAでAIを作ることはできますか?
2022/04/08(金) 19:49:56.82ID:0/Kcf5P10
>>726
試してないから出来るか分からんけどディスプレイアラートは?
732デフォルトの名無しさん (ワッチョイ 234f-RJrg)
垢版 |
2022/04/08(金) 19:59:37.27ID:iHtexTHZ0
>>730
直クライアントだからな
余裕で出来る
2022/04/08(金) 20:10:13.83ID:cwm3b4Q1d
>>730
はい
はい
2022/04/08(金) 20:43:11.43ID:p3Omju050
>>732
でもおまえウイルスの作り方わからないじゃん
2022/04/08(金) 20:59:12.69ID:AMkeYZ900
ウィルスの定義は「操作する人が意図しない動作を起こすプログラム」
だから空白のボタン押すと背景の色が変わるとかそんなんでもウィルスです
2022/04/08(金) 21:53:49.35ID:iHtexTHZ0
やっとBB2Cが使えるようになった
>>734
煽ってもダメ
ウイルスなんて作らないし
作り方だって載せるつもりはないよ
2022/04/08(金) 22:14:19.86ID:AMkeYZ900
>>736
いやもう作り方載せたって>>735
2022/04/08(金) 22:18:44.47ID:7fG2FYL40
ヤンキー・ドゥードルが懐かしい
2022/04/09(土) 00:48:37.33ID:C63TJhml0
AIの定義が明確に定まってないので自己学習して勝手に洗練されていくものもAIだしただのマクロもAI
2022/04/09(土) 00:55:30.60ID:tyw5ZPAK0
AIは作るものじゃない
育むものなんだよ
2022/04/09(土) 02:28:28.01ID:FQQX8rtBa
>>736
もうすでにウイルスのソースコード載ってますが?
>>714
2022/04/09(土) 06:04:10.90ID:+bGajSMm0
任意の列が左端に来るように水平スクロールする方法ってある?
Application.Gotoで左端に寄せてSmallScrollで上下位置を調整してるけど完全な水平スクロールにはならないんだよね
2022/04/09(土) 07:34:48.36ID:Dec5MFVZ0
With ActiveWindow
.ScrollRow = x
.ScrollColumn = y
End With
2022/04/09(土) 08:12:43.36ID:+bGajSMm0
>>743
それも試したけど、アクティブセルが変わると数値が変わらない?
2022/04/09(土) 08:52:12.11ID:+bGajSMm0
任意の列とアクティブセルの列の差を求めればScrollRowで行けるかな?
今度試してみよう
2022/04/09(土) 11:14:24.15ID:Mfv2lAJId
Sub World()
Dim Abe As Virus
Set Abe = New prime minister
Abe.coin.End(xldown)
Abe.tax.End(xlup)
Abe.wing.End(xlright)
End World
2022/04/09(土) 12:54:27.64ID:FQQX8rtBa
で、誰かがズームしたりページレイアウト変えたりして、
トラブルの元になると。
ウィンドウ系はいじらない方がいいと
職場のおじいちゃんが言ってた。
2022/04/09(土) 13:45:19.95ID:6rDUdJJw0
アース、ファイア、ウォータ系の属性のほうがいいかもね
2022/04/09(土) 14:39:59.55ID:FQQX8rtBa
Excel VBA の Window 関連のオブジェクトって、船に刻して剣を求むって感じ
走っている電車の中から、指で窓ガラスに風景を描くみたいな
2022/04/09(土) 15:26:28.03ID:+bGajSMm0
さっぱり例えが分からんw
2022/04/09(土) 16:04:42.29ID:2h0/Yyo40
詩的すぎるだろw
752デフォルトの名無しさん (ワッチョイ 9b2f-jtTv)
垢版 |
2022/04/09(土) 18:41:50.44ID:8cH1hwr70
>>749
なるほど納得。
納豆食う。
2022/04/09(土) 20:23:31.13ID:8/Ft6Y7L0
日本人だけど意味がさっぱりわからんw
2022/04/09(土) 22:16:01.68ID:XcpxlUbda
ごめん失敗したテヘ
2022/04/10(日) 01:02:21.87ID:tD6svEJl0
ヘッドレスChromeをseleniumやWebdriverなしでどうにかなりませんか?
2022/04/10(日) 19:56:53.98ID:anoG1hsda
>>755
UiPathおすすめ
2022/04/11(月) 21:59:21.11ID:Kyp6sDnX0
オブジェクトの代入を同一プロジェクトで使いまわすことはできるでしょうか?

Public ws1 as worksheet
Module1
Sub test1()
Set ws1 = Worksheets("Sheet1")
ws1.Range("A1") = "Test1"
End Sub

Module2
Sub test2()
Set ws1 = Worksheets("Sheet1")
ws1.Range("A2") = "Test2"
End Sub

これを下記のようにできないかな、ということです。

Public ws1 as worksheet
Set ws1 = Worksheets("Sheet1")

Module1
Sub test1()
ws1.Range("A1") = "Test1"
End Sub

Module2
Sub test2()
ws1.Range("A2") = "Test2"
End Sub
2022/04/11(月) 22:26:56.33ID:p2QF/trT0
なにがしたいのか
2022/04/11(月) 22:56:21.06ID:7xr/cYmKd
オブジェクトは無理でしょ
Funtionで対応すれば良い

最もそうしない方が良いからデフォで出来ないようになってることは考慮すべきだと思う
2022/04/11(月) 23:25:19.91ID:9dLPe5470
ん?そもそもワークシートってオブジェクト化されてるんだからわざわざ変数にセットする必要なくない?
対象のシートがコードを書いているファイルにあるなら
Sheet1.Range("A1").Value = "Test1"
で良いでしょ?
2022/04/11(月) 23:56:27.01ID:Kyp6sDnX0
簡略化するためにThisworkbookを省略して書きましたが、実際には
マクロ動作中にほかのブックを触っても大丈夫且つコードがすっきり
するようにSet ws1 = Thisworkbook.Worksheets("Sheet1")のように
しています

少し時間ができたので増築増築でややこしくなったコードを整理している
最中で、複数のプロシージャで使う固定のシートはまとめて変数にセットして
おこうかと思ったのですがFunctionで調べてみます、ありがとうございます
2022/04/11(月) 23:58:43.07ID:amT3mnzR0
変数を使いまわす(というか広域で使う)のは普通にできる
モジュールレベルでPublic変数定義するだけ
なんならモジュール名で修飾してもいい

ただ、変数の寿命が管理しにくいから、
中身がセットされてないとか、いつの間にか中身が消えてるとかいうことになるかもなw
2022/04/12(火) 00:23:20.44ID:ccOkbRo70
シートをオブジェクト名で指定すればどのブックを触っていようがそのコードが書いてあるブックから参照すると思うのだけど
>>761 がやろうとしてる事って他のブックのシートを変数に収納したい場合しか使わなくないか?
2022/04/12(火) 02:00:50.12ID:vEgugssg0
>>763
一部のメソッドでオブジェクト名を省略できないのがあるじゃん
自分がちゃんと理解してないのが原因なのはわかってるけど、構文とかデフォルトのオブジェクトとかいちいち覚えるのが面倒くさいんだわ
2022/04/12(火) 06:30:21.52ID:j+U2fOIu0
やるならこうか?
init()に色々初期化みたいなものをまとめて、毎回呼び出す

Public ws1

Sub init()
Set ws1 = Worksheets("sheet1")
End Sub

Sub foo()
Call init
Cells(1, 1) = 1
End Sub

Sub foo2()
Call init
Cells(2, 2) = 2
End Sub
2022/04/12(火) 06:46:39.08ID:da5RcI7d0
汎用性と独立性を確保するなら引数でシートを渡せ
2022/04/12(火) 07:15:19.69ID:t+9U/8lg0
>>757
初心者がかち当たるあるある疑問だよね。
最初は>>762の言う方法でやってみればいいと思うよ。
もう少しやり込んでくればデバッグし易くするためにモジュールスコープレベルのPrivateな変数をPublicな関数やプロパティでやり取りするようになるんだけどね。
2022/04/12(火) 07:20:31.49ID:j+U2fOIu0
こういうイメージ?
よく考えたらpublicにする必要性が全くない

Sub init()
Set ws1 = Worksheets("sheet1")
Set ws2 = Worksheets("sheet2")
Set ws3 = Worksheets("sheet3")
Set ws4 = Worksheets("sheet4")

End Sub

Sub foo()
Call init
ws1.Cells(1, 1) = 1
End Sub

Sub foo2()
Call init
ws2.Cells(2, 2) = 2
End Sub
2022/04/12(火) 07:21:37.35ID:j+U2fOIu0
と思ったらpublicいるわスコープ他の言語と間違えたわ
2022/04/12(火) 17:42:54.51ID:oSnOjvyr0
Recordset.openでselect文を実行するとエラーになるけどツールでログに出した物を実行してもエラーにならない時って何が原因?
ダブルクォートは含まれてない
あとはイミディエイトウィンドウに出てくるsqlが変なとこで改行されてるけど関係ないよね?
2022/04/12(火) 17:45:16.76ID:pq/BAZJoM
シラネーヨ
2022/04/12(火) 19:22:20.07ID:D2BP6h+A0
742で書いた完全な水平スクロールできたわ
2022/04/12(火) 19:25:18.42ID:D2BP6h+A0
>>757
Sheet1モジュールに書くだけでは?
2022/04/12(火) 19:48:28.48ID:hYDOb6070
>>770
それだけで答えられるほどエスパーじゃない
2022/04/12(火) 19:58:04.86ID:t+9U/8lg0
>>770
まず出力されているエラーは何なの?
2022/04/12(火) 20:52:44.19ID:oSnOjvyr0
ora 00933
sqlコマンドが正しく終了されていません
が出るんだよね
2022/04/12(火) 21:13:36.65ID:cLFsXNmb0
そのままのエラー文でググれば一発で回答出てくるぢゃねーか
2022/04/12(火) 21:30:37.91ID:t+9U/8lg0
>>776
SQLのケツに;付けろってよ
2022/04/13(水) 01:24:31.19ID:idY8HIbz0
757です、いろいろご意見ありがとうございます
その後考えた結果、シートのオブジェクト名を変数として代入しようとした名前に変えればいいんじゃないかと思いついたんですが問題ないでしょうか
2022/04/13(水) 03:33:56.70ID:+aMOkW0p0
>>779
シチュエーションにもよるかな。
シート名を変えられてもそのシートを使う前提であればそれでいいんじゃないかな。

その場合、
自ブックのシートであれば
Dim targetSheet As Worksheet
Set targetSeet = 変更後のシートオブジェクト名
みたいに使えるし、

他ブックのシートを扱う場合は
Dim targetSheet As Worksheet
Set targetSheet = ブックオブジェクト.(シートオブジェクト.Name)
みたいに書けば設定出来る。

もっとも、後者の書き方で前者を賄えるから後者だけ関数化してそれを使い回してもいいけどね。
2022/04/13(水) 07:03:06.30ID:CoVp5Ukt0
>>779
オブジェクト名はやめたほうが良い。あんまり意味が無い
やるなら、シートの内容を変数名にする

ローマ字
set shain_master = sheet("社員マスター")

日本語許容するなら
set 社員マスタ = sheet("社員マスター")

なおベストは英語
2022/04/13(水) 07:35:12.98ID:6wqio091M
会社員を英語でなんと言うかがわからんわ

worker(労働者)やemployee(被雇用者)じゃニュアンスが違うしー
辞書なしですぐ出てくるレベルのやつはVBAなんかやってないやろ、という偏見
2022/04/13(水) 07:37:38.41ID:CoVp5Ukt0
staffでええやろ
2022/04/13(水) 07:50:17.55ID:+aMOkW0p0
>>782
会社員だから
companyEmployeeでいいんじゃね?
2022/04/13(水) 07:56:48.50ID:HWn/7Hddd
Google翻訳だとmember
んー、なんかしっくり来ない
2022/04/13(水) 07:59:18.64ID:PsKYJxH90
staffは関係者ってイメージ
2022/04/13(水) 08:15:50.97ID:1kKv9jFRd
staffという単語はcompanyと同義で集団に対して使うって日本人は意外とわかってない
2022/04/13(水) 08:30:55.20ID:CoVp5Ukt0
employee以外ないだろう
2022/04/13(水) 08:56:08.44ID:wBIIYhTid
会社員という表現は英語では難しい
大人しく syachiku か Karoushi_Man にしとけ
790デフォルトの名無しさん (ブーイモ MM02-CB6w)
垢版 |
2022/04/13(水) 09:04:23.41ID:YJgAVhDkM
業務用語の変数は日本語で業務用語そのものを使ってる
中途半端な英語だと誤解しやすいし、ローマ字は読みづらい
2022/04/13(水) 10:04:01.74ID:NHlBNLdW0
Accessならお馴染みの「Northwind」のテーブルでは Employee List とか Employee Details
概念としての会社員ではなく、自社の社員リストなので「従業員・使用人」の意で
ま、そのファイルを誰が見る?誰が使う?どこに出す?で適宜に 恥かかない程度で 何だっていいんだろうけれども
2022/04/13(水) 10:09:02.25ID:93SXwTUS0
リーマンが和製英語からすでに世界に浸透してる
2022/04/13(水) 10:28:39.30ID:Wmi1ga+iM
ワークマン
2022/04/13(水) 11:06:56.09ID:BozzLOUH0
ワークマンは流行りよ
795デフォルトの名無しさん (スップ Sd22-2p/j)
垢版 |
2022/04/13(水) 12:58:38.46ID:7IxClg8bd
緊急です!

マクロの入ったボタンが図だかイラストになってしまい困ってます。
直し方のアドバイスお願いします。
2022/04/13(水) 13:07:23.24ID:zDnWB3YN0
>>795
https://mevius.5ch.net/test/read.cgi/bsoft/1647570025/342
2022/04/13(水) 13:09:58.08ID:Wntan1Ql0
こういうの30分一万円無保証とかで稼げないかな
2022/04/13(水) 13:57:45.74ID:+aMOkW0p0
>>795
もうその図からマクロ実行させちゃえばいいじゃん
2022/04/13(水) 14:00:17.02ID:uBZa/q6E0
■質問
サウンド再生は何通りかあるけど、
一番遅延が小さい方法は何ですか?

winmmのPlaySound ?
800デフォルトの名無しさん (テテンテンテン MM8e-2p/j)
垢版 |
2022/04/13(水) 14:08:46.36ID:6qNApkxLM
>>798
多分それ自体わからんのちゃう?
Excel作った本人とかじゃなく事務員とかだろうし
2022/04/13(水) 15:42:21.02ID:7cmYTCQn0
3時間くらいかけてVBA作って、合間に別のエクセルファイル開いて、閉じようとしたら
「変更を保存しますか?」って出たので、保存せずに閉じたら。
VBAを作った方のファイルまで変更保存せずに閉じられてしまったーーー!!
どうにかならない?
802デフォルトの名無しさん (スップ Sd22-2p/j)
垢版 |
2022/04/13(水) 15:45:55.22ID:7IxClg8bd
とりあえず顧客に頭を下げてFAXでリスト送って頂いたのでしばらくはなんとかなりそうですがエクセルファイル自体のトラブルについては全員サッパリ意味不明なためどうしようも無さそうです…
(エクセルファイル作った方自身が既に会社にいないのでどうしようもない)

とりあえずエクセルファイルがどうする事もできないため私と社長ら数名は土日も休日出勤して1月から4月までの記録も全部紙ベースの資料に手書きで書き写す事になりそうです

しばらくは紙とペンでのアナログなやり方で回すしかないですがアドバイスくださった方ありがとうございました
2022/04/13(水) 17:20:07.59ID:SMVlXKyy0
>>801
3時間くらいなら今からやれよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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