X



Excel VBA 質問スレ Part78

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

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

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

※前スレ
Excel VBA 質問スレ Part77
https://mevius.5ch.net/test/read.cgi/tech/1658009255/

-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/12/22(木) 03:47:51.66ID:gJnKHw8ea
でもな、ネットの無い時代なんてそれこそイチから手探り状態で書いてきたんでしょ??
コピペよりそういった苦労重ねた方が身に付くのでは?
462デフォルトの名無しさん (ワッチョイ ea90-YpVp)
垢版 |
2022/12/22(木) 06:31:04.10ID:VSY8vUs50
>>459
100本ノックあったわ
これやってみるか
ありがとう

あとVBAってみんなExcel付属のアレで書いてるの?
vscodeの拡張見つけたからそっち使おうと思うけど問題ない?
2022/12/22(木) 07:04:53.76ID:bPJoPsOK0
>>461
VBAに限らず苦労しないとダメってのは時代遅れなんだとさ
464デフォルトの名無しさん (ワッチョイ 4fda-ZR1D)
垢版 |
2022/12/22(木) 07:18:24.23ID:U22vDUep0
>>454

郵便局の郵便番号データを取り込んでいろいろやってたことはある。
郵便番号から住所取得とかキーワードを含む住所の郵便番号をユーザーフォームでポップアップさせるとか表示項目を可変させるとか。
465デフォルトの名無しさん (ワッチョイ 4fda-ZR1D)
垢版 |
2022/12/22(木) 07:22:19.76ID:U22vDUep0
>>462
基本VBEで書いてる。最終的にはExcelのモジュールやクラスに入ってなきゃいけないもんだし。
ただ複雑になってよく判らなくなったり他人のコードを解析したいときなんかはVScodeに張り付けて読んだりもする。
466デフォルトの名無しさん (ワッチョイ e619-tZgX)
垢版 |
2022/12/22(木) 08:27:50.14ID:vkTy/rgK0
>>462
EXCELVBAのVSCodeのなんてあるのか
まぁでもEXCELってRangeとかセル位置、
名前定義とかシート見ながらちょくちょく
走らせて確認する場合が多いから
EXCELに付いているVBエディタで
ブレイクポイント掛けてトレースしていく方が
EXCEL単体の作業せあれば楽だと思うけどね

.Net絡みだってUI絡みなら
VS Codeより使えるならVSCoreの方が楽でしょ?
2022/12/22(木) 08:34:31.20ID:vj5ZHJuLr
>>463
苦労しないとダメとは思わないけど、やっぱ自分で書いて実行しながら作ってった方が覚えるからあんまりネットからのコピペはしないな
2022/12/22(木) 09:07:55.33ID:GhJnH83bM
まずはVBの構文からだね
Subに()つけるだけでエラーになるからビビる
次はExcelの巨大なクラスライブラリ
Applicationから始まるオブジェクトツリーにアクセスできればExcelとのI/Oは完璧だ
コピペイヤーが理解していないのはデフォルトプロパティ
いろいろ省略出来て便利なのだがハマることになるだろう
やりたいことはマクロの記録ですぐ分かる
ワークシート関数まで使うのが理想なので最終的には「Excelの使い方」が一番難しい
2022/12/22(木) 10:13:12.73ID:YMkZN6Dm0
ネットがない時代は苦労したって言うけどさ、その「苦労」って結局は正解を手に入れるまでの「時間が長かった」ってだけのことなんだよね
わからないことがあると図書館か本屋へ行って立ち読み、それの繰り返し
ぐぐりまくるのとやってることは同じ
470デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/22(木) 13:55:10.49ID:llMY0dtCH
いや、購入した本が間違ってる場合もあったんだよ
今なら複数のサイト比較して一番いいコードを参考にするって出来たけど、
当時は変な本に当たるとどうしようもなかった

良い本かどうかの判定も難しかった
2022/12/22(木) 14:10:57.81ID:YMkZN6Dm0
>>470
情報の質にバラつきがあるのはネットも同じ
役に立たないサイトのがよっぽど多い
2022/12/22(木) 16:47:07.71ID:lq0Ds6x10
でもさ、初期にExcelの指南本書いていた人達はどこで知識を身につけたのだろうか??
それこそ何も情報が無い時代なはず…
2022/12/22(木) 17:00:36.54ID:nD0nOW6q0
いちばん最初は、分厚い説明書付いてきた 足りなければmicrosoftのFaxへ電話して
欲しい情報の番号押せばダラダラと何十枚ものFAX資料として引っぱり出せた
金有る奴は説明書の最後のページにある有料版の冊子を取り寄せてた ヘルプが充実してきてそれらは廃れた
2022/12/22(木) 17:16:41.62ID:YMkZN6Dm0
>>472
昔はマイクロソフトが講習会とか開いてたんよ
1回何万円も払って授業を受けに行ったわ
2022/12/22(木) 19:04:05.80ID:dL3lthyL0
>>469
趣味ならともかく曲りなりにもビジネスなら時間は重要だろ
あと、ちょっとレアな手法(例はよくないかもだけど例えばクラスにデフォルトプロパティを追加する方法とか)は載ってる本を探しきれない
476デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/22(木) 19:55:30.36ID:b1U2eBw5d
>>472
頭の弱い人の幼稚な発想だね
何歳?
2022/12/22(木) 20:17:52.60ID:lq0Ds6x10
>>476
あんた、最近みんなから相手されないからって拗ねたレスするなよな。
職場でもそういった態度なんか?
2022/12/22(木) 20:53:21.34ID:zxeRX39Sa
>>475
え?クラスモジュールでデフォルトプロパティ設定できるの?
479デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/22(木) 20:57:06.81ID:b1U2eBw5d
>>477
自分がどんな馬鹿なことを聞いたのか理解できないのか?
真正の馬鹿だな
480デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/22(木) 21:07:40.03ID:llMY0dtCH
>>471
だからネットなら比較簡単って言ってるじゃん
最初に見つけた解決法でハイ終わり!って小学生かいな

>>478
気にしたこと無かったけど、凄い方法で実現できるようだ
https://thom.hateblo.jp/entry/2015/02/16/003000
エクスポート、インポートでやっと実現するとか面白いコーディングだ
2022/12/22(木) 21:15:05.86ID:dL3lthyL0
>>478
ちょっとトリッキーだしMSが保証してるかどうかがわからんから例としては良くないって書いたけど
VBA クラス デフォルトプロパティ
でググれば出てくるよ
https://thom.hateblo.jp/entry/2015/02/16/003000
こんなのどうやって見つけたんだろう...
2022/12/22(木) 21:15:50.72ID:zxeRX39Sa
>>480
この人のブログはかなり読んでたつもりだったけど
この記事は完全に見落としてた

ってか、この手法は面白いけどマニアック過ぎるね
後で試してみよう
483デフォルトの名無しさん (ワッチョイ ea90-YpVp)
垢版 |
2022/12/22(木) 21:53:51.19ID:VSY8vUs50
Range(Cells(7, 1), Cells(7, 3)) = "一括入力"
Range(Range("A7"), Range("C7")) = "一括入力"
Range(Cells(7, 1), Range("C7")) = "一括入力"
Range(Range("A7"), Cells(7, 3)) = "一括入力"

結局セルの指定方法のひょうじゅんってどれなの?
2022/12/22(木) 22:20:04.73ID:lq0Ds6x10
>>479
だからこっちがあんたに質問してるの
もう一度聞く
職場でもそんな態度で過ごしてるのか?
2022/12/22(木) 22:31:11.78ID:dL3lthyL0
>>483
範囲が固定なら
Range("A7:C7") = "一括入力"
可変なら
Range(Cells(R1, "A"), Cells(R2, "C")) = "一括入力" ' 行可変
Range(Cells(7, C1), Cells(7, C2)) = "一括入力" ' 列可変
Range(Cells(R1, C1), Cells(R2, C2)) = "一括入力" ' 両方可変
かな
まあ他にもReSize( )使ったりケースバイケースかと
2022/12/22(木) 22:33:05.06ID:GH82dNkB0
>>483
列の範囲だけだったらResizeかな
487デフォルトの名無しさん (JP 0H96-ZR1D)
垢版 |
2022/12/22(木) 23:10:32.55ID:llMY0dtCH
>>483
そもそも一括入力する場面ってのがほぼ無いと思うが・・・
vbaでテンプレートを作らざるを得ないような状況なら、一番上かな。アルファベットでセル指定する意味は無い

>>484
お前がアホだからアホみたいな意見が付いてるんじゃないか
>>472はちょっと酷すぎるぞ
2022/12/23(金) 00:01:20.20ID:ybGAYlyS0
>>483
Range("A7").Resize(1,3)="一括入力"
Cells(7,1).Resize(1,3)="一括入力"

これが一番応用効いて楽だよ
2022/12/23(金) 00:11:39.80ID:qKiD8YiAa
いつものかまってちゃんを相手するなよ。
スルースキルも身に付けろ
2022/12/23(金) 00:17:53.03ID:cgp6NnPO0
>>487
都合の悪い質問に答えられないか。。
あんたさ、職場で上司や同僚から「取っ付きにくい人」とか「話かけにくい」って言われてないか?

そういう性格早く正さないとハブられるよ?
491デフォルトの名無しさん (スッップ Sd8a-g3+u)
垢版 |
2022/12/23(金) 01:52:37.99ID:9H6cWVdzd
>>490
馬鹿だと事実を指摘されて悔しい馬鹿
2022/12/23(金) 03:09:02.33ID:QA4NKpfz0
単なる雑談に噛み付いて謎のマウント取りはじめるとかキチガイだろ
そんなやつに触れるなよ
無視が一番
2022/12/23(金) 08:29:10.87ID:jHuJUdY9M
NG推奨:Sd8a-g3+u
494デフォルトの名無しさん (スッップ Sd8a-zw/P)
垢版 |
2022/12/23(金) 11:57:56.55ID:UPL2DLzJd
別ファイルの複数シート(日付ごと)の特定の値を日付ごとにとってきたい場合ってどうしたらいいんでしょうか
2022/12/23(金) 12:02:19.94ID:qgR3sDVKd
自分で書いてる通りのコードを書けばいいんじゃね
試しに書いてこれでいいですか?ってきいてみようぜ
496デフォルトの名無しさん (ブーイモ MMbf-yF9r)
垢版 |
2022/12/23(金) 12:35:41.71ID:urphUqXfM
マクロの記録で生成されたコードからスタート
2022/12/23(金) 13:27:34.05ID:hEY6OCXna
会社から他の社員にVBA教えてやってくれ、って言われたら素直に応じる?
2022/12/23(金) 13:38:51.27ID:qgR3sDVKd
業務命令で仕事のタスクとして依頼されるなら応じるだろ
それとVBAを教えてやれって言われることなんてあるか?
なんらかの業務で使ってる○○を直すからわからない事があったら質問してくるんで教えてやってくれ
みたいな依頼じゃないのか
2022/12/23(金) 13:47:47.29ID:D9+1PSvKr
でも大概適当な上司はそんなもん
2022/12/23(金) 15:22:20.31ID:9qrIygbaa
ユーザーフォームを表示してテーブルにあるデータのうち任意のレコードを入力させるマクロを作っているのだけれど、テキストボックスにするべきかコンボボックスかそれともリストボックスをクリックさせるべきか、迷っている
皆さんはどういうUIにしてますか?
2022/12/23(金) 15:23:49.23ID:XyJuHQV+0
社長に好みを聞く
2022/12/23(金) 15:59:13.07ID:qgR3sDVKd
要件満たせるならどれも一緒だけどその3つの何で迷ってるか書いてみたら?
2022/12/23(金) 16:13:57.75ID:9qrIygbaa
>>502
テーブルにあるレコードは100件くらいで、その中からなるだけ手っ取り早く入力できるようにしたいんですよね
テキストボックスとリストボックスを併用してどちらか好きな方から値を取れるようにした方がいいのかなと考えています
2022/12/23(金) 16:36:35.72ID:QA4NKpfz0
上司に言われただけじゃ無理でしょ
本人のやる気がなければいくら教えても無駄
まずは自分で調べてできるとこまで書いてもらって、無理ならいくらでも聞いてって形式じゃないと教えられないわ
そこらへんの講義してる先生じゃないんだから教材なんか持ってないのに1から教えるのは不可能
505デフォルトの名無しさん (ワッチョイ bf7e-nV6H)
垢版 |
2022/12/23(金) 17:32:52.63ID:+XkEwRY60
お助けを願います

Range("A1") = "=SUBTOTAL(103,A4:A300)" & """/""" & "COUNTA(A4,:A300)"

計算式の結果と結果の間に文字列のスラッシュを置きたいが上手くいきません
2022/12/23(金) 18:03:29.80ID:qgR3sDVKd
>>503
じゃあそうすればいいのでは
作ってみて違和感あれば別の方法考えたらいいんじゃ

>>505
CONCAT使えばいいんじゃない
2022/12/23(金) 18:28:53.74ID:yAoZE/rR0
>>497
覚えるべきは、あなたです。末端は、組織が作ったシステムを使うだけでいい。
というべき。
2022/12/23(金) 18:40:22.55ID:uM3VpDxWa
VBAのスキルが重宝される程度の職場なら、職務経歴書のいいネタと思って教えてやれよ
それが済んだらお前はさっさとステップアップすればよい
2022/12/23(金) 18:53:30.35ID:yAoZE/rR0
>>508
程度のレベルで身につくんだけど、実際日本人の9割以上はVBAなんて、出来ない。
よくエクセルマクロを使える割合見たいのがあるけど、ああいうサイトに行く人という母数でとっても3割程度。
実際は、まともな企業でも数百人に一人くらいしかいない。
だからVBAだけで神扱いされるんだけど・・・

本来は、幹部こそ覚える技術なんだよね。
システム化って、まさに業務運用そのものを決めるようなものだから。
2022/12/23(金) 19:11:38.96ID:PMhHGTDf0
AからFの列範囲に何行あるかわからないデータがあるとき
データがあるセルの下に
オートシェイプを線を入れるにはどうしたらいいですか?
標準の線では線種が少ないのでオートシェイプでいれたいです
2022/12/23(金) 19:30:37.54ID:6wvtOpdna
>>507
本来うちの会社もそんな感じ考え方だったのだけど
部長(配列もfor eachも使えないレベルの自称VBA名人)が
旗振り初めたお陰でしょーもないVBA講座が始まったんだよ

俺自身は社内でVBA使えることを殆ど話したことなかったが、
お前もなんかちょっとは使えるみたいだから
講座受けて講師手伝えとか言われ始めたわ

下らなすぎてマジで憂鬱
2022/12/23(金) 19:35:41.52ID:yAoZE/rR0
>>511
全員が使える必要はないんだよなぁ
VBAで無駄な作業を消していくから、社員はむしろ削られる方向になる。
だから、末端がやると摩擦が起きるから、幹部がやるのが正しいんだけどねぇ…。

幹部がプログラミングできると、それを理解しているんだけどね・・・。
そもそもシステム化とは、業務運用・業務ルール・業務管理あらゆるものを交換の利く末端に強制的に行わせるものなんだから、それって幹部の仕事だよね?ってはなしなのにね。
2022/12/23(金) 19:42:26.59ID:P8QL3kUaM
自意識過剰
2022/12/23(金) 19:42:56.24ID:imkEbUvu0
>>497
勤務時間内ならそれも仕事だから教えるが
編集の方法だけ教えて細かな内容は自分で調べるように伝える
あとは「教えました」できないのは本人の勉強不足なので質問されれば答えるだけ
2022/12/23(金) 20:17:22.06ID:dQOM9Mcwr
仮に講義したとしても
「初心者にvbaの事をすべて教えるなんて不可能だから、取り敢えず基礎的な事だけ教えるか。配列まで教えるのは無理だな」

「セルだけで処理したら30分くらいかかるし固まるし使えない」

「配列使えばすぐ終わるよ」

「そんなの習ってない。教えないほうが悪い」

上司「何で教えないんだ。不備があるから評価下げる」

ってなる未来しか見えない
自分で調べる事ができるヤツは講義なんか必要なく聞かれた事に回答するだけで十分だしな
2022/12/23(金) 20:19:41.37ID:GG/9dHCFr
結局、講義したいなら有料の〇〇コースって外部の講義を使用するのが一番なんだよな
金がかかるコースなら明確に〇〇まで、って言えるし
金がかかんない内部での講義だと、最終的には教えないやつが悪い。講義するならちゃんと教えろって言い出すヤツは絶対いる
2022/12/23(金) 20:26:33.05ID:Q+yAHYlca
セミナー行っても全員が自信を持って理解できたってことにはならないだろうしな。。
作った気にさせて終わりみたいな。
2022/12/23(金) 20:53:24.44ID:imkEbUvu0
聞かれたら教えるけど、聞かれなかったことは教えようがない
調べればすぐできるのになんで調べないのかわからない
2022/12/23(金) 21:00:03.44ID:cgp6NnPO0
本来、質問するならネット等に載っていない事例を聞くべきだよね。

ただこのスレに対する質問がガクッと減るがなw
2022/12/23(金) 21:06:01.97ID:imkEbUvu0
あと、教わればどんなことでもできるようになると勘違いしている初心者も多い
考えるのと覚えるのは教わる側の問題
2022/12/23(金) 21:45:43.34ID:qgR3sDVKd
>>510
マクロの記録で試しに線を引いてみたらコードを生成してくれるから
それをみてあたりとかつけてみたらいいんじゃないの?
特定セルの座標はTop,Left
高さと幅はHeightとWidthで取得できるから計算して引いてみ
522505 (アウアウウー Sa9f-nV6H)
垢版 |
2022/12/23(金) 22:06:41.02ID:G+gOrUWca
>>506
ありがとうございます
concatなかったんでconcatenateを使いましたが同様にエラーが出てしまいました
基本から調べてみます
スレ汚しすみません
2022/12/23(金) 22:21:44.94ID:qgR3sDVKd
>>522
これでいいんじゃないの?
Range("A1") = "=SUBTOTAL(103,A4:A300)&""/""&COUNTA(A4:A300)"
Range("A1") = "=CONCATENATE(SUBTOTAL(103,A4:A300),""/"",COUNTA(A4:A300))"
524デフォルトの名無しさん (ワッチョイ 6bc7-90ZU)
垢版 |
2022/12/24(土) 10:17:10.27ID:4SoiJAnm0
>>522
セルに入れたい数式自体がエラーになる(間違ってる)からVBAでもエラーになってる。
セルに入れたい数式は下記かと。
=SUBTOTAL(103,A4:A300)&"/"&COUNTA(A4:A300)

VBAで書き込む場合。.Formulaは無くてもいけるけど明確に数式として入れたい場合は書いといた方がいい。
Range("A1").Formula = "=SUBTOTAL(103,A4:A300)" & "&""/""&" & "COUNTA(A4:A300)"
2022/12/24(土) 13:34:40.02ID:xbH5VpiM0
>>524
> "=SUBTOTAL(103,A4:A300)" & "&""/""&" & "COUNTA(A4:A300)"
"=SUBTOTAL(103, A4:A300) & ""/"" & COUNTA(A4:A300)"
じゃだめなの?
526デフォルトの名無しさん (ワッチョイ 6bc7-90ZU)
垢版 |
2022/12/24(土) 13:48:48.91ID:4SoiJAnm0
>>525
それでもいい
2022/12/26(月) 17:51:15.49ID:45VxsXpS0
にんげんだもの
2022/12/26(月) 20:52:11.13ID:04vSlPMR0
正月はVBA三昧!
コード書きまくるぞ~
2022/12/27(火) 10:24:03.69ID:RFEZE8mMa
休みでもVBA書くのか、凄いな

家だとVBAのネタがないからいまいちやる気にならない
2022/12/27(火) 12:52:26.69ID:lugHnWiN0
え?みんな休日はExcelやらないの?
自分は隙あれば何かしらの練習してる。
勘と腕が鈍りそうな気がして。。。
531デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/27(火) 12:56:35.30ID:4LpiodjLH
このスレに質問が来ればいくらでも回答するよ
2022/12/27(火) 14:46:03.57ID:r8IxISV7a
家だとVBAで作りたいネタが思い浮かばない、、

何を題材にして練習しているのか教えてくれると嬉しいな
2022/12/27(火) 14:52:53.05ID:ITKU+yxr0
>>515
VBAを教えるのに必要なのは、講義の時間ではなく、「自分でも業務改善プログラムを作れた!」っていう成功体験だと思う。
処理速度云々は、相当後のほうでいいと思う。

ここで、資質があるやつと、そうでないやつがわかる。
資質のあるやつは、自分の作ったプログラムをさらに改善しようと、いじる。
このいじる作業をしているやつだけを見つけて、さらに教える。
改良作業をやってるやつは、理屈を理解し始めているから、いじれる。
そして、そのうちマニュアルやサイトでの調べ方と適用方法を理解して、自然と、命令数が増えてくる。

改良を試みてないやつは、たぶんプログラム自体、どっかから丸々コピペしてきて、それで運よく目的を達成できてるだけだから、動作原理わかってない。
ゆえに、次の問題を与えても、成長していないから組めない。
534デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/27(火) 15:30:01.29ID:4LpiodjLH
>>532
このスレをずーっと過去に遡って、面白そうな奴を片っ端から解いていくだけでいいんじゃないか?
俺は毎日やってるから出来ないけど

あと、vbaよりもスプレッドシートのGASのほうが色々出来て面白いよ
2022/12/27(火) 15:56:24.02ID:lnirqxnTd
雑談みたいな書き込みは自重すればいいのに・・・
2022/12/27(火) 18:13:52.44ID:lugHnWiN0
いやならスレを開かなければ良い
2022/12/27(火) 23:00:25.77ID:lvm99r8j0
いやなら5chやめればいいのに
2022/12/28(水) 01:04:02.08ID:vaYWjZbJ0
いやならヅラを被れば良いのにな
2022/12/28(水) 20:47:21.58ID:sL7xQ5iP0
いわなら砕けばいいのにな
540デフォルトの名無しさん (ワッチョイ 5319-GrCd)
垢版 |
2022/12/28(水) 23:15:21.21ID:5cqOgtBW0
いや奈良公園にせんべい持ってくと鹿に襲われるけどな
2022/12/28(水) 23:31:04.44ID:iylgISulM
人間用のせんべい持って行くなよ
2022/12/29(木) 06:52:02.69ID:AIOxbE0/0
マジレスすると、2ちゃんねる時代からスレタイから脱線した内容になるのは普通だから。
それが気にくわないなら開かなきゃ良いだけ。
2022/12/29(木) 18:32:00.23ID:tmwuu1S/p
軌道修正レスも普通だから。
いやなら開かなければいいだけ。
544デフォルトの名無しさん (ワッチョイ 5b66-s0Sd)
垢版 |
2022/12/30(金) 09:09:52.34ID:WIIszMQ70
Excell2019 win10という環境で標準のVBEを使用しています。
ローカルインドウやウォッチウインドウにて多次元配列の中身を確認しながらデバッグを
している時に、一個ずつ+マークを押して展開するのが不便に思っています。

一行ずつ動かしながら逐次中身の変化を追いかけたいので、ずっと展開しっぱなしにしたいです。

ボタン一発で配列全部展開してくれるとか、展開しっぱなしにするとか何か良い方法はないでしょうか?
545デフォルトの名無しさん (ブーイモ MMb9-k9wW)
垢版 |
2022/12/30(金) 10:22:12.46ID:xFabiT9dM
無い。
配列の内容をワークシートに展開する関数を作って、
イミィディエトウインドウから 関数(配列) と実行。
546デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/30(金) 11:00:35.06ID:zE3ePWnpH
最初から個別の値をウォッチ式に入れておくとか
a(0)
a(1)
547544 (ワッチョイ 5b66-s0Sd)
垢版 |
2022/12/30(金) 11:34:25.20ID:WIIszMQ70
>>545>>546
ありがとうございました。
個別でウォッチ追加します。
2022/12/30(金) 12:00:12.33ID:MT1c2vte0
いえいえ
2022/12/30(金) 15:58:51.64ID:IwLtnZMZ0
複数のExcelファイルで作業をしていると、ふと見るとVBEの左側のツリーに立ち上げたファイル名がずらずら並んでいることがあります
普通はそのファイルを閉じればツリーから消えるのですが、たまに消えずに延々と溜まりまくるときがあります
こうなるとメモリ消費しまくって最終的にはメモリ不足で動かなくなります

こうなってしまうのはどんな理由が考えられるのでしょうか
それとも、Excelは定期的に全部閉じる癖をつけておくべきなんでしょうか
550デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/30(金) 17:13:53.47ID:zE3ePWnpH
>>549
Excelがファイル閉じるのを失敗している
その場合、一度失敗するとそれ以降全部失敗する

再インストールか、メモリの増設した方がいいと思う
あとLAN上にあるExcelファイルを開くとそれになりやすい
2022/12/30(金) 17:26:59.66ID:esJPCknOd
>>549
マクロで開いてるならマクロがおかしいから
private変数でブックを保持する様にしているならそれが解放されてないと起きるかと
2022/12/30(金) 17:56:14.08ID:IwLtnZMZ0
>>550-551
ありがとうございます
他ファイル参照するために開いて閉じるようなマクロは結構多用してます
基本的には単純に開いてはデータ引っ張って保存せず閉じるというような内容ですが…

参照するファイルはLAN上ではありませんが、OneDriveの共有フォルダには置いてあります(ローカル保存)
一度この辺のマクロを見直してみたいと思います
原因がわからなければ再インストールしてみます
2022/12/30(金) 19:08:24.88ID:k0Mu53Mo0
>>549-552
ウチもマクロで他の個別ブックを開いて
その中のマクロを実行して上書き保存・当該ブックを閉じる
をやってたけど、VBEの左側ツリーに閉じたはずのブックがズラズラ・・・

開くブックが70個ちょっと、中のクエリーをテーブルとして変数に設定するところで
いつもコケるようになった。
ブックの保存先はいずれもローカル。

操作するブックと操作される個別ブックの変数、プロシージャ名は
重複しないようにしていたがダメ。
次のブックを開くインターバルを1秒~とか、
クエリーはテーブルオブジェクト変数に入れているので、
毎回Nothingを入れてみたがダメ。

結局、地域毎に開くブックを50個くらいに収まるように
操作するブックを分けた。

ブックを割り当てる変数と、
それを保存・閉じる記述を見直してみようと思う。
554デフォルトの名無しさん (JP 0H6b-s0Sd)
垢版 |
2022/12/30(金) 20:11:23.30ID:zE3ePWnpH
>>552
onedriveか、あれもLANと同様になんか変な挙動になっている
僕はあまりの挙動不安定さにスプレッドシートに逃げたよ

閉じる動作・共有に関して、もっと突き詰めたほうがいいかもしれない

カンだけど僕がやるなら以下のような形です。解決するかどうかは不定。

・開いたExcelを、一回activebookにしてから閉じる
・適度に、OSに処理を返す。forを使っている+時間が掛かっている場合、適当にDoEvents()を挟んでみると改善する可能性があります
・onedriveの挙動が予測できないので、一旦ダウンロードフォルダなどにコピーしてから使ってみる。
 どうも共有フォルダはタイムラグがあるのか、意図しない非同期になってしまい良くないことが起こっている気がする。

非常に問題を捉えづらい、難しい問題と思います。頑張ってください
2022/12/30(金) 20:26:56.53ID:esJPCknOd
>>553
WorkbookやWorksheet含めてObjectは順序だててNothingするようにしたらそんなこと起きないとおもうよ
set oWB = xxx
set oWS = oWB.xxx
なら
set oWS = nothing
set oWB = nothing
という順ね
面倒でもNothingで解放するクセつけたほうがいいと思うぞ
556デフォルトの名無しさん (ワッチョイ 1a90-5nMs)
垢版 |
2022/12/31(土) 09:58:21.76ID:doxP0Tnc0
マクロの管理・閲覧ってみなさんはどうしてるんでしょうか?

基本的にはブックの中に保存してるとは思うんですが
ブック開かないと中身確認できないですよね?
何らかのファイルに中身を保存して、たとえばvscodeなどのエディタで開いたりするのでしょうか?
2022/12/31(土) 10:37:26.00ID:YncayN1e0
俺は普通にブックをSVNでバージョン管理してる
差分を見たい時は見たいバージョンを保存して最新版と保存したバージョンから各々エクスポートして差分を取ってる
VsCode の拡張もあるみたいよ ⇒ >>462
2022/12/31(土) 11:33:27.48ID:h8iAJsoLd
>>556
ブックのマクロを別ファイルに保存するということはコードの2元管理になるからしない
普通にブック開いてVBEでみるだけでそれで困ったことはない
別のブックのコードを参照したい場合は一時的にそのコードをコピペしてエディタで見ることはあるけど終わったら削除してる
何度も手直しするような事もないからバージョン管理もしてない
559デフォルトの名無しさん (JP 0He6-9yt5)
垢版 |
2022/12/31(土) 12:12:05.76ID:60VcS97wH
>>556
特にしてない

昔はよく使う「最終行の取得」や、「set〜」なんかをまとめたブックを作ってそれをコピペしていたけど、
コピペしないほうが早い事に気づいてからはそういうのもなくなった
高速化もよほどじゃない限りしなくなったな。
2022/12/31(土) 14:12:00.31ID:QIMjPb7U0
vbaでファイルを開くダイアログを出させて、ユーザーに任意のシートを指定させ、
VBA側でそのシートオブジェクトを取得して、解析をするというものを作ろうとしています。
よろしくお願いします。

ttps://oshiete.goo.ne.jp/qa/3042408.html
こちらに「シートを選択させてアクティブにする」というコードがあります。
ttps://www.kurumico.com/excel-vba-file/315/
こちらには「ファイルをダイアログから選択指定して開く」というコードがあります。

単純に組み合わせたら願望はかないました。

そこで質問したいのは
MyDialog.Controls.Add(ID:=957).Execute
これが一体何なのかということです。
エクセル2019の左下にあるシート一覧を左右に移動する
← →
このマークのところで右クリックをすると同じようなシート選択ダイアログが出てきます。
そして選ぶと、アクティブになります。

957を一覧から探してもこういう説明を見つけられないでいます
そういう理由からCommandsBarsもControls.addもイマイチ理解を深める事が出来ずにいます。
どこかいい説明サイトがありますでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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