Excel VBA 質問スレ Part83 (861レス)
Excel VBA 質問スレ Part83 http://mevius.5ch.net/test/read.cgi/tech/1749348402/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
405: デフォルトの名無しさん [sage] 2025/07/15(火) 13:45:04.50 ID:IENqpxZQ >>401,403 ありがとう。やってみる。 http://mevius.5ch.net/test/read.cgi/tech/1749348402/405
406: デフォルトの名無しさん [] 2025/07/15(火) 18:57:22.18 ID:F7nJfSiA やっぱり馬鹿かよ http://mevius.5ch.net/test/read.cgi/tech/1749348402/406
407: デフォルトの名無しさん [] 2025/07/16(水) 22:35:52.90 ID:6RqIkTEU 目的のフォルダを取得する効率的なコードを教えてください 1番効率的なのはフォルダのフルパスそのものを取得する事ですが、それも難しいので各階層の部分一致でお願い致します http://mevius.5ch.net/test/read.cgi/tech/1749348402/407
408: デフォルトの名無しさん [] 2025/07/16(水) 22:45:55.20 ID:NiCGeJue パスが流動的ってこと? 指定する以外にやったことないわ http://mevius.5ch.net/test/read.cgi/tech/1749348402/408
409: デフォルトの名無しさん [sage] 2025/07/16(水) 23:01:32.70 ID:IRXrFh0B 部分一致が複数あるとして、その順番が入れ替わる可能性があるかどうかでコードが変わるね http://mevius.5ch.net/test/read.cgi/tech/1749348402/409
410: デフォルトの名無しさん [] 2025/07/17(木) 00:19:01.17 ID:zBpNwhAR コード\分類\フォルダ\期間別フォルダ\探したいファイル みたいな感じですね http://mevius.5ch.net/test/read.cgi/tech/1749348402/410
411: デフォルトの名無しさん [sage] 2025/07/17(木) 00:24:00.03 ID:Nf2HlQRn >>405 Powershellからcom呼ぶときはしっかりお片付けしてね 適当にやるとC#と一緒でゴミが残る(かも)だから http://mevius.5ch.net/test/read.cgi/tech/1749348402/411
412: デフォルトの名無しさん [] 2025/07/17(木) 01:52:47.41 ID:gLLqR9ZX >>407 馬鹿は「効率的」は何が効率的なのかとかすら説明できない http://mevius.5ch.net/test/read.cgi/tech/1749348402/412
413: デフォルトの名無しさん [] 2025/07/17(木) 05:21:40.06 ID:tC2PFukj 馬鹿じゃなきゃこんなところで聞かない http://mevius.5ch.net/test/read.cgi/tech/1749348402/413
414: デフォルトの名無しさん [sage] 2025/07/17(木) 07:17:52.06 ID:wYenyBlK こう言うことなんじゃないの? ディレクトリ(フォルダ)名が曖昧な記憶だから 漠然とした検索してファイル見付けたい とかなんじゃ https://www.limecode.jp/entry/utility/partialmatch-filesearch 3パターン提示してくれてるから、どれでもお好きなもので・若しくは全部使ってもいいし 一年365日ばかしか書けない誰かさんは無視しとけばいいよ 彼は馬鹿と書き込むのがじぶんのDutyだと思い込んでる節があるし 認知の病なんだろうきっと http://mevius.5ch.net/test/read.cgi/tech/1749348402/414
415: デフォルトの名無しさん [sage] 2025/07/17(木) 07:36:40.82 ID:rYvcj5zc 彼はこんなとこでしかマウントとれないかわいそうなやつなんだ そっとしといてあげよう http://mevius.5ch.net/test/read.cgi/tech/1749348402/415
416: デフォルトの名無しさん [sage] 2025/07/17(木) 07:41:07.22 ID:aYpECmLq >>407 目的のフォルダはどうやって示されてるの? 効率的っていうのは、何に対するパフォーマンスを指してる? http://mevius.5ch.net/test/read.cgi/tech/1749348402/416
417: デフォルトの名無しさん [sage] 2025/07/17(木) 08:47:01.58 ID:sGHKyXGW >>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 http://mevius.5ch.net/test/read.cgi/tech/1749348402/417
418: デフォルトの名無しさん [sage] 2025/07/17(木) 09:28:10.58 ID:TqONBLPd あたしゃ、ディレクトリ関係は「見える」の重視で、このあたり参考にしてワークシート関数でやっちゃうけど https://qwerty.work/blog/2021/01/excel-function-path.php http://mevius.5ch.net/test/read.cgi/tech/1749348402/418
419: デフォルトの名無しさん [] 2025/07/17(木) 20:37:37.93 ID:zBpNwhAR >>417 正規表現の様な事ができたのでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1749348402/419
420: デフォルトの名無しさん [] 2025/07/17(木) 20:38:38.98 ID:zBpNwhAR >>416 例えばファイルシステムオブジェクトの再帰処理で全フォルダをループしてしまうのは非効率だなぁという事です http://mevius.5ch.net/test/read.cgi/tech/1749348402/420
421: デフォルトの名無しさん [] 2025/07/17(木) 21:05:30.67 ID:zBpNwhAR >>417 本当に複数の階層で部分一致できますでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1749348402/421
422: デフォルトの名無しさん [] 2025/07/17(木) 23:17:21.95 ID:mypLb9KX 釣りでなければ真正馬鹿で確定 http://mevius.5ch.net/test/read.cgi/tech/1749348402/422
423: デフォルトの名無しさん [sage] 2025/07/17(木) 23:26:46.72 ID:DMF1qliv 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, 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 http://mevius.5ch.net/test/read.cgi/tech/1749348402/423
424: デフォルトの名無しさん [sage] 2025/07/18(金) 03:56:36.13 ID:kCxulfmG 若い子はChatGPTのことチャッピーと呼んでる http://mevius.5ch.net/test/read.cgi/tech/1749348402/424
425: デフォルトの名無しさん [] 2025/07/18(金) 08:09:47.41 ID:JhLn+KYd 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 http://mevius.5ch.net/test/read.cgi/tech/1749348402/425
426: デフォルトの名無しさん [sage] 2025/07/18(金) 08:22:30.72 ID:avd6O0J8 >>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 http://mevius.5ch.net/test/read.cgi/tech/1749348402/426
427: デフォルトの名無しさん [sage] 2025/07/18(金) 09:23:27.37 ID:J+L+9run 要件定義せず走り出すとこうなるという見本 http://mevius.5ch.net/test/read.cgi/tech/1749348402/427
428: デフォルトの名無しさん [sage] 2025/07/18(金) 10:47:27.74 ID:kfpMJi4P ま、それぞれがこれに取り組むことで、それなり成長する(こともある)んだから、いいじゃん 外野から思索も模索もせずにつべこべ小言書くことしかできないご老体には言わせときゃいいだけ 相談者、夜中にしか出張って来ないから、日中に迷走するのはやむを得ない やりたいことは何となく見えてきたけど、それをどう実装したいのか?誰に使わせたいのか?何のために作るのか? とかがイマイチ漠然としてて、方向ぐらいは提示して欲しいのはある エクスプローラー開いて検索じゃあダメな理由とか、ファイルじゃ無くてフォルダ(名)に拘ってるように読めて 例えば、各々が勝手にフォルダ作ってファイル放り込んでるのを是正したいんだ、とかなのか もう一歩踏み込んだ相談が出て来るまで待機、も有り得る http://mevius.5ch.net/test/read.cgi/tech/1749348402/428
429: デフォルトの名無しさん [] 2025/07/18(金) 16:30:22.97 ID:aPZeO8n7 VBAの作り方が上手すぎて情シスに異動させられそうになったセンスの塊こと俺だけどよく構文を知ってるとかテキスト通りにとか気にしてる奴は3流よ 使用者の使いやすさにまず全振り 次に拡張性を気にすりゃメンテナンスもしやすくなる エラー回避しない奴は論外 でも結局はどう動かすかなんよ http://mevius.5ch.net/test/read.cgi/tech/1749348402/429
430: デフォルトの名無しさん [] 2025/07/18(金) 16:43:02.04 ID:AbgnUBWx Aという処理をVBAでさせようってお手本みたいなコードを書いてもそのA自体にセンスが無い奴が多いんだよな それが役職も評価も年収も上がらないVBAを勉強しただけのおぢさん http://mevius.5ch.net/test/read.cgi/tech/1749348402/430
431: デフォルトの名無しさん [sage] 2025/07/18(金) 17:25:18.33 ID:kfpMJi4P >>427 読み直したら、ID末尾runだけに? http://mevius.5ch.net/test/read.cgi/tech/1749348402/431
432: デフォルトの名無しさん [sage] 2025/07/18(金) 18:03:06.70 ID:tx5irUc8 >>431 みんながみんなエスパーしながら好きに書いてる何を読み直すの? http://mevius.5ch.net/test/read.cgi/tech/1749348402/432
433: デフォルトの名無しさん [sage] 2025/07/18(金) 20:55:57.57 ID:kfpMJi4P わかんなきゃいいよ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 これを別ボタンに貼り付ければ、ディレクトリ探すのもマウスオペだけで済む お好みだけど ※ ほにゃらら部分は、デフォルトで指定しときたいフォルダ名に http://mevius.5ch.net/test/read.cgi/tech/1749348402/433
434: デフォルトの名無しさん [sage] 2025/07/18(金) 21:22:07.30 ID:VbDqcBb9 >>431 これ何言ってるのか理解できない なにがrunだけに、なのか http://mevius.5ch.net/test/read.cgi/tech/1749348402/434
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 427 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s