[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ファイルを指定した順に処理』(もん)
エクセルマクロで
@ファイルを開くダイアログボックスで複数ファイルを選択
Aひとつずつファイルを開く→データをコピー→閉じる
と処理を行っているのですが、
選択した複数ファイルをファイル名の昇順で処理をしていきたいのですが、
そのようなことは可能でしょうか。
教えてください。
取得したファイル名をどこかのセルに書き込んで並べ替えしてから処理するか、 配列に入れて並べ替えをして・・・。 ではないかな? (元夏バテ)
Dim Fname As Variant
Dim x As Variant Fname = Application.GetOpenFilename(MultiSelect:=True) If VarType(Fname) = vbBoolean Then Exit Sub Else For Each x In Fname Workbooks.Open Filename:=x Next End If
元夏バテは、今夏バテとうつ状態のためコードを考えるのは、ちょいダウン状態です。
>どこで並び替えをするのかずっと考えているのですがわかりません。 やりたい事は、 >選択した複数ファイルをファイル名の昇順で処理をしていきたい なのですから、複数のファイル名を取得してから1番目を開くまでの間に、処理の追加をすればいいと 思いますよ。
> If VarType(Fname) = vbBoolean Then > Exit Sub > Else > For Each x In Fname > Workbooks.Open Filename:=x > Next > End If どうせExit Subするなら If VarType(Fname) = vbBoolean Then Exit Sub End If ' ここで並べ替えの処理(セルに書き出して並べ替えて上から順に開くファイル名とする。とか) ' 以下開いて〜コピー〜閉じるの処理
で良いのではないかと思います。 私はどちらかというと単独ファイルばかり扱ってきたので、GetOpenFilenameとか使った事ないんです。 余り参考にならずすいません。 (元夏バテ)
配列のソートに関しては「VBA combsort」でぐぐれば良いかも。 (通りすがり)
ファイル選択を行う程度の個数のソートなら、Excelが持っているソートで十分だと思いますけどね!! (もっとも、他にもっと大量データのソートも行う予定なら、別ですが、Excelのソートでも結構速いですよ)
'============================================================================== Sub main() Dim fnmarray As Variant Dim fcnt As Long Dim fnm As String Dim g0 As Long fnmarray = Application.GetOpenFilename(, , , , True) If TypeName(fnmarray) = "Variant()" Then fcnt = UBound(fnmarray) With Range("a1:a" & fcnt) .Value = _ Application.Transpose(fnmarray) .Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo Application.EnableEvents = False For g0 = 1 To fcnt fnm = .Cells(g0) With Workbooks.Open(fnm) MsgBox fnm & " 開きました" '処理 .Close False End With DoEvents Next Application.EnableEvents = true .ClearContents End With End If End Sub
この場合、Exit Subは要らないですよね? プロシジャーって 入り口も出口も一つの方がメンテはしやすいですよ!! (新規作成時は、これ使うと楽ですけどね)
ichinose
VBAによるクイックソートよりもダミーシートを使ってでもExcelのソートを利用する 方が処理速度は上がります。 データ量が多くなるほどその差は顕著になりまんなぁ。 (弥太郎)
みなさん返信本当にありがとうございます。
明日までに考えなくてはいけなかったので本当に助かりました。
並び替えをするのに配列内のファイル数を数えなくてはと思い試行錯誤していたのですが、
Uboundで上限を調べればよかったんですね。
これで明日は大丈夫そうです!
本当にありがとうございました!!!
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.