1 名前:デフォルトの名無しさん mailto:sage [2025/06/08(日) 11:06:42.20 ID:j4jIPbHU.net] ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part82 https://mevius.5ch.net/test/read.cgi/tech/1737657075/1
357 名前:デフォルトの名無しさん mailto:sage [2025/07/04(金) 19:13:39.58 ID:3EnEQ/Df.net] >>353 ?
358 名前:デフォルトの名無しさん mailto:sage [2025/07/04(金) 21:05:20.15 ID:rizrt2ys.net] >>349 言いたいことがよくわからないです。 おっしゃってるようにAIでコードを書いても人で書いてもテストはします。 ただAIで書いたコードのテストは人のコードより時間がかかるというお話ですか? 丁寧にAIに教えてもらえても? AIは関係ないと思うけど違うのかな。
359 名前:デフォルトの名無しさん mailto:sage [2025/07/04(金) 21:22:07.36 ID:JLFKZ1OE.net] >>355 どこの何をテストする必要があるのかを判断できる能力がある、 もしくはどこの何をテストする必要があるかを導くプロンプトを書ける、 もしくは必要な箇所なテストまで終えるプロンプトをかけるなら問題ない
360 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 06:16:26.93 ID:+cv+JpUz.net] >>356 例えばCSVファイルを開くときのテストケースを教えてってAI聞いてみたけど答えてくれたよ。 VBAでCSVファイルを開く処理に対して、以下のようなテストケースを行うと、動作の信頼性やエラー対策が強化できます。 主なテストケース一覧 ・CSVファイルが存在し開ける 正常にファイルを開けることを確認 ・ファイルが存在しない場合 指定されたCSVが見つからない場合の対処 ・既に開かれているブックかどうかを確認 ・読み取り専用のCSVを開けるかどうか のテスト ・空のCSVファイル 内容が空でもエラーにならないか確認 ・文字コードに関わるデータが正しく読めるかのテスト ・CSVの列数・行数が極端に多い たくさんのデータがあるときの パフォーマンスの確認 ・ダブルクォートやカンマを含むセル "東京,品川"のようなセルが正しく
361 名前:扱われるか セル確認 ・ファイルロックされている場合のエラー回避の確認 [] [ここ壊れてます]
362 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 06:51:38.76 ID:pq8ewG8r.net] >>357 それだとハルシネーションが含まれていた場合のことを考慮できてない
363 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 08:48:09.96 ID:rEK7AeQH.net] >>357 余計な型変換に関する確認が必要 0312345678 → 312345678 1-2 → 1月2日
364 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 08:57:41.98 ID:rEK7AeQH.net] 古いExcelでは先頭がIDだとSYLK扱いされる問題もあるな
365 名前:デフォルトの名無しさん [2025/07/05(土) 09:10:19.51 ID:+boHNEOG.net] >>357 csvファイルへのショートカットだった場合のチェックがない 開くと読み込みを一緒にしているのが気になった その前にもともと自力でできる作業なら初めからAIは使わないだろうし AIが示さない項目を無視していいかの判断ができるのかな 主な項目だからそれ以外もあるよとか後になって言うのはどうかと思うし
366 名前:デフォルトの名無しさん [2025/07/05(土) 09:13:22.18 ID:gPk7JHhb.net] ショートカット?これは馬鹿のふりしてるの?
367 名前:デフォルトの名無しさん [2025/07/05(土) 09:31:15.35 ID:vyFcCxL+.net] ショートカットでもcsv開くことがあるがcsvでないことはしっている
368 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 09:35:20.09 ID:eCCJvae8.net] 既にAIの知能が人間を遥かに超えており、ボトルネックがバカな人間であることがよくわかるスレ
369 名前:デフォルトの名無しさん [2025/07/05(土) 09:46:16.30 ID:vyFcCxL+.net] うちの環境が普通でないなら無視してくれて構わんよ
370 名前:デフォルトの名無しさん [2025/07/05(土) 09:55:15.54 ID:Pf7qA/Ja.net] 我流、独学でExcelをやっている人が表を作ると、そのつもりやその存在を全く知らなくても、マトリクス表形式で表を作成してしまい、しかも完成したものに対してピボットテーブルを使用すると言うのはあるあるですよね?
371 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 10:34:06.26 ID:+cv+JpUz.net] >>358 それを自分で確認したらダメなんです? >>359 >>360 >361 指摘ありがとうございます。 主な一覧だったのでテスト例はさらに出てきたかもしれないです。 開くと読み込むは問い合わせ方が悪かったかもです。 AIで出てこなかった項目が無視できるかどうかの判断は難しいですね。 明らかにテストしなきゃいけない項目がAIで抜けててAI丸投げで作った製品を納品されると怖いものがありますね。 ただAI丸投げの流れは止められないでしょうね。
372 名前:デフォルトの名無しさん [2025/07/05(土) 11:46:24.77 ID:dpOItoML.net] >>357 CSVカラムの途中で改行が入る場合
373 名前:デフォルトの名無しさん [2025/07/05(土) 15:15:49.95 ID:y/LWjdC1.net] 「俺が流れを止めるからお前は先に行け!」みたいなこと言ってみたいね
374 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 15:50:51.02 ID:8jsOt+Pc.net] 「その作業が本当に必要かどうか、もう一度考え直す」
375 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 19:53:47.88 ID:AqSnrZiN.net] >>370 それはVBA職人的にはタブーでしょ 人力でやってた仕事というのは、自動でやるなら本質的にはそもそもやる必要のないものが多い VBAはワークフローの改善に踏み込むことなくただ人力作業を単純に自動化するのが王道で、 仕事の意味を問うてしまうとVBAの仕事が減ることに繋がる
376 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 22:49:12.14 ID:+cv+JpUz.net] >>368 指摘ありがとうございます。 もう回答を全部出してみたよ。 これ以外でテストケースがあるなら負けです。。。 VBAでCSVファイルを開いて読み込む際には、さまざまなケースに対応する必要があります。考えうるテストケースをカテゴリ別に網羅的に洗い出します。 基本ケース 1 正常なCSVファイルを開いて正しく読み込めるか 2 ファイルが存在しない場合のエラー処理 3 空のCSVファイルを読み込んだときの動作 4 CSVファイルのパスに全角文字・日本語が含まれる場合 データ構造・形式のバリエーション 5 カンマを含むデータがダブルクォートで囲まれている "東京都,千代田区"など 6 改行が含まれるデータ 7 ダブルクォートを含むデータ 8 区切り文字がセミコロンやタブなどの場合 9 複数の空白を含む行 10 各行のカラム数が不揃い 11 数値が先頭に0を含むデータ 12 日付形式のデータ 13 UTF-8 BOM付きファイル 14 Shift-JIS形式のファイル
377 名前:デフォルトの名無しさん mailto:sage [2025/07/05(土) 23:41:01.05 ID:8jsOt+Pc.net] >>372 ・パスが長すぎる場合 ・処理系による改行コードの違い ・ファイル全体でダブルクォートが奇数個(閉じられていない) ・巨大すぎる(項目のサイズ、項目の数、行数) ・ファイルの破損(バイナリデータ混入など) ・ファイルシステムの破損、不良セクタなど
378 名前:デフォルトの名無しさん mailto:sage [2025/07/06(日) 02:30:01.30 ID:N2XXWgcj.net] >>372 Workbooks.OpenでCSVを読むならテスト項目ほとんど要らなくね? テキストファイルとして読んで、列と行の分割処理をするなら、 CSVのフォーマット定義を先にやらないとテスト項目作れなくね? 読み込みファイルの指定方法も先に決める必要がなくね?
379 名前:デフォルトの名無しさん mailto:sage [2025/07/06(日) 06:55:32.42 ID:hfT56Vvk.net] >>373-374 Claude様に聞いてやったぞ 373と374は的外れすぎる 373について ・「ファイルシステム破損、不良セクタ」→ システム障害テストの範疇、CSV処理テストじゃない ・「ファイル破損(バイナリ混入)」→ 同上、テスト範囲を混同してる ・「巨大すぎる」→ パフォーマンステスト、機能テストと分けろ 改行コードとダブルクォート奇数個は有効だが、他は論点ズレ 374について 完全に間違ってる ・「Workbooks.Openならテスト項目要らない」→ 嘘、文字化け・区切り文字誤認識・データ型自動変換でバグ頻発する ・「CSVフォーマット定義を先に」→ RFC4180あるし、372みたいに実際の問題パターン網羅する方が実用的 ・「読み込み方法を先に決める」→ 順序が逆、テストケース洗い出してから実装方法決めるのが正解 372が一番まとも。実際の開発で遭遇する問題を的確に押さえてる
380 名前:デフォルトの名無しさん mailto:sage [2025/07/06(日) 08:00:56.53 ID:N2XXWgcj.net] >>375 外部仕様を先に決めるべきという意味だったんだけど、それも間違ってんの? CSV=RFC4180というのは一般的じゃない気が・・・ Workbooks.Openを使うなら、「CSVフォーマットはExcelのAPIのそれ」で決定だからAPI動作の二重チェックは不要かな〜と。
381 名前:デフォルトの名無しさん mailto:sage [2025/07/06(日) 12:05:21.27 ID:Jlu3MuzZ.net] セマフォは? 別プロセスが同じファイルを開いてるから今は処理すべきでない、とか
382 名前:372 mailto:sage [2025/07/06(日) 21:01:04.07 ID:jU0PBm+8.net] すみません。 昨日テストケースをすべて載せるつもりだったのですが書き込み制限で書けず途中で諦めました。 テストケースは37項目まであります。
383 名前:デフォルトの名無しさん mailto:sage [2025/07/07(月) 09:23:50.46 ID:GhKlbyJu.net] だが、Copilotにプログラムを作らせると、こんなにも原始的でバグだらけなのであった しかもこれだとクソ遅い 【設問】以下はVBAでCSVファイルを開いて読み込むプログラムである。バグを指摘せよ。 FilePath = "C:\Users\YourName\Documents\sample.csv" FileNum = FreeFile Open FilePath For Input As #FileNum RowNum = 1 Do Until EOF(FileNum) Line Input #FileNum, LineData DataArray = Split(LineData, ",") Dim i As Integer For i = 0 To UBound(DataArray) Cells(RowNum, i + 1).Value = DataArray(i) Next i RowNum = RowNum + 1 Loop Close #FileNum
384 名前:デフォルトの名無しさん mailto:sage [2025/07/07(月) 10:00:11.48 ID:xGHCrZSN.net] >>379 CopilotはVBAerほどじゃないにせよアホの子だからね 以下、Claude Opus 4 with extended thinkingの回答 主なバグ: 1. カンマを含む値(“Tokyo, Japan”等)が分割される 2. エラー処理なし。ファイルなかったら死ぬ 3. 変数宣言してない(Option Explicit使ってたらエラー) 4. UTF-8読めない。日本語文字化け 5. セル1個ずつ書き込みでクソ遅い 6. 前のデータ消さないから残る 最悪の例: CSVに "売上高は1,000,000円" があったら → 売上高は1 000 000円" の3列に分解されるw 結論:Workbooks.OpenTextかQueryTables使え
385 名前:デフォルトの名無しさん mailto:sage [2025/07/07(月) 10:31:44.26 ID:GhKlbyJu.net] >>380 変数宣言は行数の都合でカットしたのでCopilot君は悪くない
386 名前:デフォルトの名無しさん mailto:sage [2025/07/07(月) 14:15:38.83 ID:quoGln+a.net] >>379 ChatGPTだとこんな感じですね。 そのまま貼り付けたので全角も見てくれてる。 バグ・問題点 1 変数の未宣言 2 インデントに全角スペースが混在 3 変数 i の Dim がループ内にある 補足(改善点) ・CSVに カンマを含むセル がある場合、Splitだけでは不十分(→正確なCSV解析が必要)。 ・ファイル存在チェック (Dir(FilePath) など) を入れるとより堅牢になります。 ・Shift-JIS以外の文字コード(例:UTF-8 BOM付き)は Open では正しく読み込めないことがあります。
387 名前:デフォルトの名無しさん [2025/07/07(月) 22:35:59.87 ID:CvRTuASj.net] バグも直してもらえばいいんじゃね
388 名前:デフォルトの名無しさん mailto:sage [2025/07/08(火) 00:47:00.39 ID:urjDQqc8.net] 今日のCopilotはWorkbooks.Openの気分らしい だけどFormat引数が間違ってて動かないw ファイルパス = "C:\Users\YourName\Documents\" ' ←適宜変更してください ファイル名 = "sample.csv" ' ←読み込むCSVファイル名に変更 完全パス = ファイルパス & ファイル名 Workbooks.Open Filename:=完全パス, Format:=6 ↓(実行時エラー1004で動かないぞ!直せ)↓ ファイルパス = "C:\Users\YourName\Documents\" ' ←適宜変更してください ファイル名 = "sample.csv" ' ←読み込むCSVファイル名に変更 完全パス = ファイルパス & ファイル名 Workbooks.Open Filename:=完全パス 直った
389 名前:デフォルトの名無しさん mailto:sage [2025/07/08(火) 01:58:30.92 ID:9X9f1TC3.net] Format:=6なんて絶対使わないのに、どこからコピペしてきたんだよ
390 名前:デフォルトの名無しさん [2025/07/08(火) 10:53:17.46 ID:Lf/Jcjxk.net] 馬鹿の上塗り
391 名前:デフォルトの名無しさん [2025/07/08(火) 16:04:18.48 ID:J6qvAQ9A.net] このスレ沼しか居ねぇな…google ai studioの方がまだ良い解答してくれんぞ…
392 名前:デフォルトの名無しさん mailto:sage [2025/07/08(火) 17:01:18.70 ID:G3ulfBZW.net] >>387 とても鋭い視点です。さすがですね!
393 名前:デフォルトの名無しさん mailto:sage [2025/07/08(火) 17:33:24.49 ID:BCBq8ImS.net] studio と名付けられてる意味わかってんのかな? 中の人はGeminiそのものらしいじゃんか
394 名前:デフォルトの名無しさん mailto:sage [2025/07/08(火) 17:42:58.67 ID:yBGpSZNW.net] >>389 その論理だとChromeとChrome OSも比較できないことになるが? 同じモデル使ってても実装・UI・機能が違えば体験は全然違うぞ StudioはAPI統合やパラメータ調整できる開発者向けツール、コンシューマー版Geminiとは設計思想が違う 「中の人が同じ」で比較無意味論は技術理解が浅すぎる 387の解答品質指摘は妥当な比較対象だし、実際のユーザー体験差を無視してる時点で的外れ とAI様が仰せになっている
395 名前:デフォルトの名無しさん mailto:sage [2025/07/08(火) 18:21:34.45 ID:urjDQqc8.net] >>385 どうやらCopilotさんは間違って記憶している模様 > Workbooks.OpenのFormat 6 はカンマ区切りですか? はい、Excel VBAで使用される Workbooks.Open メソッドの Format:=6 は「カンマ区切り (CSV) 形式」を示します。 これは、テキストファイルを開くときに、フィールド区切り文字としてカンマが使われている場合に指定されます。 > CSVは2じゃないの? まず結論から言うと: Format:=2 → タブ区切り(Tab-delimited) Format:=6 → カンマ区切り(Comma-delimited) つまり、CSV形式のファイル(カンマ区切り)を読み込むには Format:=6 を使うのが正解です。 w
396 名前:デフォルトの名無しさん mailto:sage [2025/07/08(火) 18:33:40.30 ID:G3ulfBZW.net] うちでは2って教えてくれた
397 名前:デフォルトの名無しさん mailto:sage [2025/07/09(水) 08:08:49.40 ID:NYgpwKZ5.net] つまり、開発環境てことだろ? その中のAI部分を担当してるのはGeminiという認識なんだが? そのGeminiを使ってAI開発に特化した環境を整えてみましたが、何か? っつーのがStudioなのでは? じゃあ、コンシューマー向けGeminiとStudioの中の人と成り果ててるGeminiと有料版Studioの中の人は ぜんぶ別人が担当してンのか? それぞれ精度にランク付けしてて、コンシューマー向けにはBマイナス程度でいいや StudioならAな その有料版ならA++とかAAAとかでお答えして差し上げろ とか差別化してるん? Ver違いってならまだ判る 無料なら2.0でいいよ Studioは2.5にしとくか 有料版は3.0β版な Copilotを多用してる奴に向かってgoogle ai studio(←ぜんぶ小文字なのが何とも)のが優れてる! っつーお門違いのコンコンチキな放言は許容できるのか? おなじGemini同士で比較して見せるとかならまだしも まあ、おれにはどうでもいいんだけど、ブレインストーミングがてらにしたためてみました
398 名前:デフォルトの名無しさん mailto:sage [2025/07/09(水) 08:48:44.88 ID:/UzV6WSq.net] スレ違いの長文とか救えない
399 名前:デフォルトの名無しさん [2025/07/09(水) 09:32:08.40 ID:EKMDM/sM.net] 391 x 間違って記憶している o 過學習でアホになった
400 名前:デフォルトの名無しさん mailto:sage [2025/07/09(水) 10:08:19.13 ID:MuvaPJLR.net] LLMで過学習…?
401 名前:デフォルトの名無しさん [2025/07/09(水) 10:36:50.67 ID:1h9feY7y.net] 391 x 間違って記憶している o 円形脱毛症でハゲになった
402 名前:デフォルトの名無しさん mailto:sage [2025/07/14(月) 13:04:26.89 ID:GLg5N4aG.net] https://forest.watch.impress.co.jp/docs/news/2030817.html 「JScript」に代わり「JScript9Leg
403 名前:acy」が既定のスクリプトエンジンに ~Windows 11 24H2以降で [] [ここ壊れてます]
404 名前:デフォルトの名無しさん mailto:sage [2025/07/15(火) 10:46:15.47 ID:1v3q9PKm.net] Windows11の24H2にしたらJScriptが動かない https://blog.macorin.net/dos-not-work-jscript-on-windows11-24h2/
405 名前:デフォルトの名無しさん mailto:sage [2025/07/15(火) 11:19:52.18 ID:IENqpxZQ.net] 毎日夜中の定刻に、気象庁Webサイトの2つのページからcsv落として月次集計する、 マクロとPowerQuery使った2×2の4つのブックを VBS(例:以下)とタスクスケジューラーを使ってやらせてるんだけど、 いい加減、VBS部分を乗り換えるとしたら、 何がとっつきやすいのかな? PowerShell? PowerAutomate? Python? ---例:DLブックを実行させるVBS--- Const WB_PATH = "E:\集計\01_DLファイル\DLブック_地点A.xlsm" Const PROC_NAME = "DL_Ref" Dim excelApp Set excelApp = CreateObject("Excel.Application") With excelApp .Visible = False Dim wb Set wb = .Workbooks.Open(WB_PATH) .Run wb.Name & "!" & PROC_NAME .DisplayAlerts = False wb.Close End With excelApp.Quit
406 名前:デフォルトの名無しさん mailto:sage [2025/07/15(火) 11:31:18.20 ID:izh84eSC.net] >>400 **PowerShell**がおすすめです。 理由: - VBSに最も近い書き方 - Excelの操作がそのまま使える - Windowsに標準搭載 - 学習コストが低い 移行例: ```powershell $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $wb = $excel.Workbooks.Open("E:\集計\01_DLファイル\DLブック_地点A.xlsm") $excel.Run("DL_Ref") $wb.Close() $excel.Quit() ``` PythonやPower Automateは学習コストか制約があるので、PowerShellが無難です。
407 名前:デフォルトの名無しさん mailto:sage [2025/07/15(火) 11:33:01.33 ID:l/eryieH.net] vbsに近いならjsだろう
408 名前:デフォルトの名無しさん mailto:sage [2025/07/15(火) 11:52:00.35 ID:1v3q9PKm.net] PowerShellは遅くてびっくりするのと COM(IDispatch)経由の操作なので基本的に書き方はvba/vbsを踏襲する 普通に使うと割とつまらない
409 名前:デフォルトの名無しさん mailto:sage [2025/07/15(火) 11:53:44.70 ID:SjeLYLBh.net] >>400 スレ違い
410 名前:デフォルトの名無しさん mailto:sage [2025/07/15(火) 13:45:04.50 ID:IENqpxZQ.net] >>401 ,403 ありがとう。やってみる。
411 名前:デフォルトの名無しさん [2025/07/15(火) 18:57:22.18 ID:F7nJfSiA.net] やっぱり馬鹿かよ
412 名前:デフォルトの名無しさん [2025/07/16(水) 22:35:52.90 ID:6RqIkTEU.net] 目的のフォルダを取得する効率的なコードを教えてください 1番効率的なのはフォルダのフルパスそのものを取得する事ですが、それも難しいので各階層の部分一致でお願い致します
413 名前:デフォルトの名無しさん [2025/07/16(水) 22:45:55.20 ID:NiCGeJue.net] パスが流動的ってこと? 指定する以外にやったことないわ
414 名前:デフォルトの名無しさん mailto:sage [2025/07/16(水) 23:01:32.70 ID:IRXrFh0B.net] 部分一致が複数あるとして、その順番が入れ替わる可能性があるかどうかでコードが変わるね
415 名前:デフォルトの名無しさん [2025/07/17(木) 00:19:01.17 ID:zBpNwhAR.net] コード\分類\フォルダ\期間別フォルダ\探したいファイル みたいな感じですね
416 名前:デフォルトの名無しさん mailto:sage [2025/07/17(木) 00:24:00.03 ID:Nf2HlQRn.net] >>405 Powershellからcom呼ぶときはしっかりお片付けしてね 適当にやるとC#と一緒でゴミが残る(かも)だから
417 名前:デフォルトの名無しさん [2025/07/17(木) 01:52:47.41 ID:gLLqR9ZX.net] >>407 馬鹿は「効率的」は何が効率的なのかとかすら説明できない
418 名前:デフォルトの名無しさん [2025/07/17(木) 05:21:40.06 ID:tC2PFukj.net] 馬鹿じゃなきゃこんなところで聞かない
419 名前:デフォルトの名無しさん mailto:sage [2025/07/17(木) 07:17:52.06 ID:wYenyBlK.net] こう言うことなんじゃないの? ディレクトリ(フォルダ)名が曖昧な記憶だから 漠然とした検索してファイル見付けたい とかなんじゃ https://www.limecode.jp/entry/utility/partialmatch-filesearch 3パターン提示してくれてるから、どれでもお好きなもので・若しくは全部使ってもいいし 一年365日ばかしか書けない誰かさんは無視しとけばいいよ 彼は馬鹿と書き込むのがじぶんのDutyだと思い込んでる節があるし 認知の病なんだろうきっと
420 名前:デフォルトの名無しさん mailto:sage [2025/07/17(木) 07:36:40.82 ID:rYvcj5zc.net] 彼はこんなとこでしかマウントとれないかわいそうなやつなんだ そっとしといてあげよう
421 名前:デフォルトの名無しさん mailto:sage [2025/07/17(木) 07:41:07.22 ID:aYpECmLq.net] >>407 目的のフォルダはどうやって示されてるの? 効率的っていうのは、何に対するパフォーマンスを指してる?
422 名前:デフォルトの名無しさん mailto:sage [2025/07/17(木) 08:47:01.58 ID:sGHKyXGW.net] >>410 Dirでワイルドカードが使えるので、こんな感じに仕上げてみた ※ヒットするパスの例 → C:\Documents\A001\B000X1\Excel\20250717\FileABC001.xlsx HomePath = "C:\Documents" SearchPath = "A???\B*\Excel\2025????\File*.xlsx" ResultPath = HomePath SearchPathList = Split(SearchPath, "\") For I = 0 To UBound(SearchPathList) If Dir(ResultPath) <> "" Then ResultPath = "ファイルの下は何もないよ!" Exit For End If FolderName = Dir(ResultPath & "\" & SearchPathList(I), vbDirectory) If FolderName = "" Then ResultPath = "そんなパスはないよ!" Exit For End If ResultPath = ResultPath & "\" & FolderName Next MsgBox "これかな?" & vbCrLf & ResultPath
423 名前:デフォルトの名無しさん mailto:sage [2025/07/17(木) 09:28:10.58 ID:TqONBLPd.net] あたしゃ、ディレクトリ関係は「見える」の重視で、このあたり参考にしてワークシート関数でやっちゃうけど https://qwerty.work/blog/2021/01/excel-function-path.php
424 名前:デフォルトの名無しさん [2025/07/17(木) 20:37:37.93 ID:zBpNwhAR.net] >>417 正規表現の様な事ができたのでしょうか?
425 名前:デフォルトの名無しさん [2025/07/17(木) 20:38:38.98 ID:zBpNwhAR.net] >>416 例えばファイルシステムオブジェクトの再帰処理で全フォルダをループしてしまうのは非効率だなぁという事です
426 名前:デフォルトの名無しさん [2025/07/17(木) 21:05:30.67 ID:zBpNwhAR.net] >>417 本当に複数の階層で部分一致できますでしょうか?
427 名前:デフォルトの名無しさん [2025/07/17(木) 23:17:21.95 ID:mypLb9KX.net] 釣りでなければ真正馬鹿で確定
428 名前:デフォルトの名無しさん mailto:sage [2025/07/17(木) 23:26:46.72 ID:DMF1qliv.net] Chatさん。未検証 再帰使わずキュー処理 Sub FastSearchMinimal() Dim fso As Object, q As Collection, f As Object, i As Object Dim r As Long: r = 2 Dim k As String: k = "sample" Set fso = CreateObject("Scripting.FileSystemObject") Set q = New Collection: q.Add fso.GetFolder("C:\TestFolder") With Sheets(1): .Cells.Clear: .Range("A1:C1").Value = Array("種類", "名前", "パス"): End With Do While q.Count > 0 Set f = q(1): q.Remove 1 For Each i In f.SubFolders: q.Add i: If InStr(1, i.Name, k, vbTextCompare) > 0 Then WriteRow r, "フォルダ", i.Name, i.Path Next For Each i In f.Files: If InStr(1, i.Name, k, vbTextCompare) > 0 Then WriteRow r, "ファイル", i.Name, i.Path Next Loop MsgBox "完了" End Sub Sub WriteRow(ByRef r As Long
429 名前:, t As String, n As String, p As String) With Sheets(1): .Cells(r, 1).Resize(1, 3).Value = Array(t, n, p): End With: r = r + 1 End Sub [] [ここ壊れてます]
430 名前:デフォルトの名無しさん mailto:sage [2025/07/18(金) 03:56:36.13 ID:kCxulfmG.net] 若い子はChatGPTのことチャッピーと呼んでる
431 名前:デフォルトの名無しさん [2025/07/18(金) 08:09:47.41 ID:JhLn+KYd.net] Sub 探す() Dim fso As Object,root As Object Set fso = CreateObject("Scripting.FileSystemObject") ' ルートフォルダを取得して再帰処理スタート Set root = fso.GetFolder("パス") 再帰処理 root End Sub '――――――――――――――――――――――――――――――― Private Sub 再帰処理( ByVal f As Object) Dim file as Object,fpath as string If Instr(f.name,"目的") > 0 Then ' ファイルをチェック For Each file In f.Fileso If InStr(file.Name,"検索値") > 0 Then fpath = file.path Next End if Dim sf as Object ' サブフォルダを再帰処理 For Each sf In f.SubFolders If Instr(sf.name,"コード") > 0 or Instr(sf.name,"書類") > 0 or Instr(sf.name,"分類") > 0 or Instr(sf.name,"yyyymmdd") > 0 Then 再帰処理 sf Next End Sub
432 名前:デフォルトの名無しさん mailto:sage [2025/07/18(金) 08:22:30.72 ID:avd6O0J8.net] >>417 はちょっと手抜きしてたので、ちゃんと作り直した。 Sub 使い方() Set Result = New Collection DirMulti "C:\Documents", "A???\B*\Excel\2025????\File*.xlsx", Result, vbNormal (以下略) End Sub Sub DirMulti(HomePath, SearchPath, ResultCollection, Optional Attributes As VbFileAttribute = vbNormal) Pos = InStr(SearchPath & "\", "\") Search = Left(SearchPath, Pos - 1) NextSearch = Mid(SearchPath, Pos + 1) Set SearchResult = New Collection Res = Dir(HomePath & "\" & Search, vbDirectory Or Attributes) Do While Res <> "" If Res <> "." And Res <> ".." Then SearchResult.Add Res Res = Dir() Loop If NextSearch = "" Then For Each Res In SearchResult ResultCollection.Add HomePath & "\" & Res Next Else For Each Res In SearchResult If (GetAttr(HomePath & "\" & Res) And vbDirectory) <> 0 Then DirMulti HomePath & "\" & Res, NextSearch, ResultCollection, Attributes End If Next End If End Sub
433 名前:デフォルトの名無しさん mailto:sage [2025/07/18(金) 09:23:27.37 ID:J+L+9run.net] 要件定義せず走り出すとこうなるという見本
434 名前:デフォルトの名無しさん mailto:sage [2025/07/18(金) 10:47:27.74 ID:kfpMJi4P.net] ま、それぞれがこれに取り組むことで、それなり成長する(こともある)んだから、いいじゃん 外野から思索も模索もせずにつべこべ小言書くことしかできないご老体には言わせときゃいいだけ 相談者、夜中にしか出張って来ないから、日中に迷走するのはやむを得ない やりたいことは何となく見えてきたけど、それをどう実装したいのか?誰に使わせたいのか?何のために作るのか? とかがイマイチ漠然としてて、方向ぐらいは提示して欲しいのはある エクスプローラー開いて検索じゃあダメな理由とか、ファイルじゃ無くてフォルダ(名)に拘ってるように読めて 例えば、各々が勝手にフォルダ作ってファイル放り込んでるのを是正したいんだ、とかなのか もう一歩踏み込んだ相談が出て来るまで待機、も有り得る
435 名前:デフォルトの名無しさん [2025/07/18(金) 16:30:22.97 ID:aPZeO8n7.net] VBAの作り方が上手すぎて情シスに異動させられそうになったセンスの塊こと俺だけどよく構文を知ってるとかテキスト通りにとか気にしてる奴は3流よ 使用者の使いやすさにまず全振り 次に拡張性を気にすりゃメンテナンスもしやすくなる エラー回避しない奴は論外 でも結局はどう動かすかなんよ
436 名前:デフォルトの名無しさん [2025/07/18(金) 16:43:02.04 ID:AbgnUBWx.net] Aという処理をVBAでさせようってお手本みたいなコードを書いてもそのA自体にセンスが無い奴が多いんだよな それが役職も評価も年収も上がらないVBAを勉強しただけのおぢさん
437 名前:デフォルトの名無しさん mailto:sage [2025/07/18(金) 17:25:18.33 ID:kfpMJi4P.net] >>427 読み直したら、ID末尾runだけに?
438 名前:デフォルトの名無しさん mailto:sage [2025/07/18(金) 18:03:06.70 ID:tx5irUc8.net] >>431 みんながみんなエスパーしながら好きに書いてる何を読み直すの?
439 名前:デフォルトの名無しさん mailto:sage [2025/07/18(金) 20:55:57.57 ID:kfpMJi4P.net] わかんなきゃいいよw カリカリすんなよ フォルダ名を取得する記事見付けた 検索文字で絞る事もできる *とか?とかも要らん https://tmkr7788.livedoor.blog/archives/26830287.html で、一番上のフォルダ指定するのが手入力っぽいから、それも自動取得するなら Sub Sample() Dim FPath As String With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = "C:\ほにゃらら" .Title = "フォルダを選択してください" If .Show = -1 Then FPath = .SelectedItems(1) End If End With Cells(3,3) = FPath End Sub これを別ボタンに貼り付ければ、ディレクトリ探すのもマウスオペだけで済む お好みだけど ※ ほにゃらら部分は、デフォルトで指定しときたいフォルダ名に
440 名前:デフォルトの名無しさん mailto:sage [2025/07/18(金) 21:22:07.30 ID:VbDqcBb9.net] >>431 これ何言ってるのか理解できない なにがrunだけに、なのか
441 名前:デフォルトの名無しさん [2025/07/19(土) 04:46:02.20 ID:s8PmOx3D.net] >>45 え、Accessは2027年で使えなくなるの!?
442 名前:デフォルトの名無しさん [2025/07/19(土) 06:29:44.25 ID:QjhfSjEw.net] >>433 馬鹿
443 名前:デフォルトの名無しさん mailto:sage [2025/07/19(土) 07:33:32.95 ID:xtuIEHIA.net] >>435 Access2027が最後のAccessになるって、 Windows10が最後のWindowsになるって言ったMicrosoftが言ってた
444 名前:デフォルトの名無しさん [2025/07/19(土) 08:03:25.99 ID:hkkuRgMQ.net] 昨日初めてwin12て使ってる記事見たわ
445 名前:デフォルトの名無しさん mailto:sage [2025/07/19(土) 09:32:36.51 ID:S5W6kZB3.net] 指定したフォルダ以下の、サブフォルダとファイルを取得する記事も見付けた >>433 のは、フォルダのみだけど、その中身もそのファイル情報も見れるのはいい 何よりシンプル 開きたい場合は上のを参考にすればいいと思う https://akira55.com/showfoldertree/ ExcelにTreeViewって無かったっけ?とか思い直してググってて辿り着いた TreeViewを実装しようと試みて、みんな大好きTANAKAさんのサイト参考にしようとしたら Form上に配置するのに、その他のコントロールから選ばなきゃならなく成ってて ImageListに至っては追加はできてもプロパティ変更しようとするとエラー 64bitのせい? TANAKAの例はExcel2003で説明してるからなのか もはやオワコンなのか なぞ まぁ、後日のメンテとかも面倒そうだから、Sheet上に書き出すのがいちばん楽なんだろうな
446 名前:デフォルトの名無しさん [2025/07/19(土) 10:05:18.56 ID:TEpbrrsS.net] >>437 きっとwin11はwindowsではない新種のOSなんだろう
447 名前:デフォルトの名無しさん mailto:sage [2025/07/19(土) 15:57:41.07 ID:ZTd2BQVd.net] >>439 実行結果のファイルうpしてみて
448 名前:デフォルトの名無しさん mailto:sage [2025/07/19(土) 16:20:49.62 ID:A8cbKdEJ.net] パス長いとかいい加減にしろとな
449 名前:デフォルトの名無しさん mailto:sage [2025/07/19(土) 16:52:52.55 ID:S5W6kZB3.net] >>441 ? リンク先に実行結果の画像出てるけど? 他に何を出せと? おれが実行した後のファイルなんて 中身まるごと見られたら困るものだらけだから、嫌なんだけど?
450 名前:デフォルトの名無しさん mailto:sage [2025/07/20(日) 12:26:16.14 ID:UYPMBFMH.net] 見られて困るものだらけのPCって犯罪的な?
451 名前:デフォルトの名無しさん [2025/07/23(水) 07:42:55.14 ID:jnXMDL+k.net] >>429 その様にコードを書いてマクロを作成するのに何日くらいかかりますか?
452 名前:デフォルトの名無しさん mailto:sage [2025/07/23(水) 08:46:08.98 ID:Rz/tc4F0.net] 回避ルートが無い場合はエラーで止まる分は放置だな 下手なメッセージ出して止まるより分かりやすい
453 名前:デフォルトの名無しさん mailto:sage [2025/07/23(水) 10:53:39.46 ID:S2JD2z+w.net] >>444 C:\ドキュメント\重要機密\A~E(1)\新しいフォルダ\巨乳物 >>445 俺はこの道30年、最近やっとコメントをしっかり書く習慣が身についてきた感じがしてる 昔も一応は書いてたけど、今見ると言葉が足りてなさすぎて解読に苦労する >>446 自分だけが使うんならいいけど、他人はエラーメッセージとかさっさと消しちゃったり自力で解決しようとして何が起きたかわからなくされちゃうからなあ
454 名前:デフォルトの名無しさん [2025/07/23(水) 19:11:51.35 ID:jnXMDL+k.net] >>447 コメントですか AIに書かせると楽かもしれませんね
455 名前:デフォルトの名無しさん mailto:sage [2025/07/23(水) 20:20:01.08 ID:jSDoEOvR.net] コメントは最低限しか書かないなあ リファクタリングしまくって、コメント書かなくてもわかるコードにする方がいいと思う 1〜2日で作成したら、最低1週間はリファクタリング期間
456 名前:デフォルトの名無しさん mailto:sage [2025/07/23(水) 21:02:26.59 ID:3kQj9G/6.net] 規模感がちょっとわからないけどテスト込みで手直し1週間?
457 名前:デフォルトの名無しさん mailto:sage [2025/07/23(水) 21:55:41.80 ID:jSDoEOvR.net] 規模はまちまちだけど、この例ではテスト込みで作成1〜2日 完成後1週間は毎日コードを読み直す時間をとる すると何かしら改善点が見つかる 毎日読んでも何にも改善点なく1週間過ぎたらステーブル