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/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時間くらいなら今からやれよ
804デフォルトの名無しさん (ワッチョイ 068e-pUVk)
垢版 |
2022/04/13(水) 17:28:47.62ID:MldHjaMW0
>>802
あちこちマルチで書いて馬鹿かよ
どこかに金を出して頼めよ
ゆとりの馬鹿はこれだから
2022/04/13(水) 17:42:34.06ID:Wmi1ga+iM
>>801
該当のファイルを開いた状態でファイルタブのどこかにある自動保存云々が書いてある場所を探せ
運が良ければ一時ファイルが残ってる
残ってなけりゃ諦めろ
次からは動作確認をする前に保存する癖をつけるようにするんだな
2022/04/13(水) 19:21:42.96ID:9TA12m3K0
>>801
これがあるからコーティング中はOneDriveに置いとる
2022/04/13(水) 21:38:12.45ID:wBIIYhTid
>>805
何で誰でも言える極々普通のアドバイスをこんなに上から目線で言えるんだろう
2022/04/13(水) 21:47:36.66ID:MBul3VW80
便所の落書きにいちいち目くじら立てて突っ掛かるなよ
より一層老けて見えるぞ
2022/04/13(水) 22:55:33.89ID:uonj2wEf0
全国10エリアのそれぞれに、2016年度から6か年度分の「各年度集計用book」があり、
中身は1時間値と月合計を集計する等のクエリーが17あって、
これをsheet上のクエリーリストを基に
For Nextで順次更新・上書き保存するVBAを仕込んであります。

これとは別に、各エリアごとにやはりbookのフルパスリストを基に
For Nextで「各年度集計用book」を順次開いて、
中のVBAを実行するよう仕込んだ「各エリア一括更新book」を作りました。
(今さら2016年度を再集計するのは、たまにシレーッと修正が訴求修正が入るため)

これまで10ヶ月間ほどの月次更新では問題もなく動いてきたのですが、今月の更新で
・sheet名とクエリー名によるクエリー更新のステップでデバックエラーで止まった
・2つ目2017年度あたりのbookをVBAで開いたと思ったら、Excelごと落ちた
となり、不安定になりました。

モジュールごと再構成たり、「各年度用集計book」クエリー計算を簡略化して17ステップに削減したりして、
・タスクマネージャーでは動作中のメモリーは最大10GB/32GBくらい、CPU使用率は最大60%弱
・1つの「各年度集計用book」の所要時間に30秒程度
まで軽量化したのですが、今後もbook数が増えることを考えると
何か工夫のしどころはないものかと。

自分で気になっているのは、6か年度分のbook更新がどうにか上手くいっても、
「各エリア一括更新book」のプロジェクトに、
済んだはずの「各年度集計用book」の情報が残っていること。
https://i.imgur.com/BvkH6sr.png
よく分からないけれど、VBAが扱えるインスタンス数を超過しているのか?
これが残っていて良いのか、よくわかりません。

・Set wb = Workbooks.Open で開いて
・wb.Close SaveChanges:=True で上書き保存して閉じているのですが、
・For Next内で済んだ変数はできる限りNothingで開放
していますが、改善の余地はありますか?
2022/04/13(水) 23:53:53.55ID:uonj2wEf0
>>809 タイポ訂正
誤) 訴求修正
正) 遡及修正
2022/04/14(木) 08:48:02.28ID:jf4kHNax0
>>809
2022/04/14(木) 09:46:20.53ID:EGNxXvqd0
>>809
マクロを1つの専用ブックにまとめてみたら
2022/04/14(木) 13:25:49.47ID:E7ePXpuT0
VBAで他ブックのプロシージャを実行したいんだけど、実行まちをなくすことてできる?
Application.Run "Book2!Test2"
を実行したあと、"Book2!Test2"の処理終了を待たずに次の行に移りたいんだが。
2022/04/14(木) 13:53:36.44ID:TZzbtw0W0
非同期は無理
試してないけど、別のApplicationインスタンスを作成して
そちらでファイルを読み込んで実行とか
2022/04/14(木) 18:58:30.99ID:RElcaA4D0
メソッドを使い回したいときはクラスを別のクラスに参照渡ししてるんだけど、これってVBAに継承があれば機能的に処理できるのか
2022/04/14(木) 19:03:41.33ID:sxqTZKvqM
クラスのメンバーに他のクラスを入れるのがマイルド
2022/04/14(木) 19:25:43.40ID:RElcaA4D0
いいね
それ試してみよう
2022/04/14(木) 20:26:12.03ID:VI/N1Akx0
>>816
継承を委譲で置き換える、というだけですね…
2022/04/14(木) 21:25:22.08ID:YCtpuDrNx
参照設定なしでエクセルからアクセスファイルの操作をしようとしているのですが
フィールド定義の構文エラーが出ます。
テーブルの登録数を減らすと通りますが
上限か何かに引っかかっているのでしょうか?

Sub Test()

Dim CN As Object

Set CN = CreateObject("ADODB.Connection")
CN.Open "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" & "C:\Users\Downloads\データ.accdb"
CN.Execute "CREATE TABLE TBL(管理 INT,日付 DATE,番号 INT,内容 MEMO,担当 MEMO,OrderTeam MEMO,Place MEMO,Floor MEMO,GuestNum INT,種別 MEMO,物品 MEMO,対象 MEMO,状態 MEMO,時間1 MEMO,時間2 MEMO,Note MEMO,Total MEMO);"
CN.Close

MsgBox "作成しました。"

End Sub
2022/04/14(木) 21:40:59.88ID:zMqJUzcEa
MsgBox は、End Sub の外に出して下さい。
このスレの流れ的に。
2022/04/14(木) 22:31:20.84ID:Ep0kCh050
フィールド名 DATE は?  予約語では?
他には、day、month、table、text、user、when、where、year、zone とかも
2022/04/14(木) 22:55:38.45ID:Ep0kCh050
すまん 読み間違いだった MEMOが多いような気がするが、それも多分外してるな すまん 居ないことにしといてくれ
2022/04/14(木) 23:23:47.63ID:fL/YN0Wd0
予約後はNote
[]で括れ
2022/04/14(木) 23:41:44.78ID:kOhvUD5R0
解決しました。
感謝です!
2022/04/15(金) 14:24:02.27ID:TsNK8La+0
>>816
クラスになじめなかったくせに
2022/04/15(金) 15:02:32.60ID:m9CVWFGZ0
う、うるさい!
2022/04/16(土) 10:04:25.26ID:g0AA3ay0p
無理してクラス使わんでもええんやで
2022/04/16(土) 10:12:12.08ID:94XVUrLP0
保健室でいいってことか
2022/04/16(土) 10:20:43.39ID:Xjbe7mxod
特別クラスにさえ入れてもらえないのk
2022/04/16(土) 14:51:07.70ID:gJCOre2S0
今は特殊学級は廃止されつつあると聞いたわ
差別に繋がるからだとか
2022/04/16(土) 14:55:23.27ID:pYTE49690
>>830
それな

・ひまわり学級導入
 差別だから廃止しろ!

・ひまわり学級撤廃
 障がい者と一緒に授業できるわけねーだろ!分けろ!

これを5年ぐらいの周期でず〜〜〜っと繰り返してる。少なくともここ30年はそう
2022/04/16(土) 15:07:04.56ID:rh08QZl8a
1年目 ひまわり学級導入
6年目 ひまわり学級撤廃
11年目 ひまわり学級導入
16年目 ひまわり学級撤廃
21年目 ひまわり学級導入
26年目 ひまわり学級撤廃

30年目、ひまわり学級は撤廃された状態
2022/04/16(土) 17:39:51.13ID:aIa1oxEK0
コールバイネームしたいから無理にクラス使うというのはある。
2022/04/16(土) 18:34:28.46ID:gJCOre2S0
自分が通っていた学校の特殊学級は8組て名称だった
6組まではノーマルで何故か7組が無くて8組が特殊だった。
2022/04/16(土) 18:39:26.14ID:vqf9SIAK0
>>833
何故無理にCallbyName使う必要があるの?
標準モジュールなら普通にApplication.Runじゃダメなの?
2022/04/17(日) 02:09:30.35ID:BVP+DOJH0
>>835
コールバックのやり方調べた時に、
何か忘れたけど、他は面倒な制約があって、
コールバイネームしか使わなくなった。
2022/04/17(日) 03:28:38.26ID:N2omx0Taa
たまーに出てくるオブジェクト指向の話。
もうオブジェクト指向なんて忘れたは。
2022/04/17(日) 07:38:47.19ID:X2S+9pHC0
ワイのコードは素人指向
2022/04/17(日) 09:54:53.72ID:c23oRZKe0
>>837
それでも知らんうちに使ってるんやで
使ってる奴に意識させないのがオブジェクト指向
840デフォルトの名無しさん (ブーイモ MM8f-3xp7)
垢版 |
2022/04/17(日) 10:13:47.49ID:a3I3T2VGM
excel vbaではオブジェクトを利用したプログラミングにはなるけど、
それだけでオブジェクト指向だとは言えないな
2022/04/17(日) 10:56:37.84ID:acUYvJMnd
玄人志向が玄人向けだったのは最初だけ
842デフォルトの名無しさん (ワッチョイ 77da-+xkO)
垢版 |
2022/04/18(月) 22:09:45.73ID:dtBLR+IO0
どなたか相談に乗っていただきたいです。
現在、大学の講義で使用するため関数を作成しているのですが、最後に関数に戻り値を入れる際に「代入式の左辺の関数呼び出しは、バリアント型またはオブジェクト型の値を返さなけれななりません。」
とコンパイルエラーが出てしまいます。このエラーはどのように解決したらよいでしょうか?
2022/04/18(月) 22:14:18.56ID:5XyRTXLN0
コード見ないとちょっときつい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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