あるフォルダ内のファイルを名前順で読みたいのですが、
読み取り順を操作することは可能ですか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんにちは


#1,#2さんのとおりそのままではできないと思います。
私はファイル名で並べ替えるときは、Sorted=Trueにした「リストボックス」にAdditemしていって、取得してからIndex順に読みます。
ファイル名を取得するロジックはサンプルにあったと思います。
ちなみにサイズや更新日順の場合は配列に入れてソートするようにしています。
では!
    • good
    • 1

DirやFindFirstFileでは出来ないです。


フォルダ内のファイル名をすべて取得した後に並び替えるしか
ないと思います。
# APIやOCXでその機能を実装しているのが、あるかもしれません。
    • good
    • 0

こんにちは。

maruru01です。
Dir関数では多分出来ない(というか私には分からない)と思います。
したがって私は、フォルダ内の全ファイル名を配列とかにしておいて、それを並べ替えるという方法を採っています。
並べ替えた後で、配列のIndexでループを回して何かの処理をするという手順です。
では。
    • good
    • 1

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォルダ内にさらにフォルダがあるか知りたい

Windows2000
VB6
で開発をしています。

フォルダ内にあるフォルダ名称だけを取得することって出来るのでしょうか?
フォルダ内のファイル数が多く、一つずつ確認するのでは時間がかかりそうなので、
もっと簡単に早くできる方法がないか模索中です。

よろしくお願いします。

Aベストアンサー

こんな感じでよいですか?
Sub test()
Set fold = CreateObject("Scripting.FileSystemObject")
folder_name = "c:\"
Set folder1 = fold.GetFolder(folder_name)
Set sub_folders = folder1.subfolders
For Each sub_folder In sub_folders
MsgBox (sub_folder.Name)
Next

End Sub

Qエクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(

エクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(A1:X365)の値を取得し、コピー元のエクセルファイル名のシートに貼付ける方法を教えて頂けないでしょうか?できればコピー元のエクセルファイルは開かずに実行させたいです。エクセルは2003を使っています。

Aベストアンサー

 おはようございます。DOUGLAS_ です。

>「A1:X365」という読み込み範囲を指定する
>SQL文 の書き方が分かりませんでしたので、・・・
 前回答の 参照URL に書いてありました。  (;^_^A

 前回答の下記2点を訂正していただければ結構です。

1)
myRS.Open "select * from [Sheet1$]", myCon

myRS.Open "select * from [Sheet1$A1:X356]", myCon
に差し替え。

2)
Range(Range("Y1"), Cells(1, Columns.Count)).EntireColumn.ClearContents
Range(Range("A366"), Cells(Rows.Count, 1)).EntireRow.ClearContents
の2行を削除。


 なお、ご存じかとは存じますが、「参照設定」というのは、Visual Basic Editor(VBE)で
1)[ツール(T)] - [参照設定(R)...] で、[参照設定 - VBProject] ダイアログ を開きます。
2)[参照可能なライブラリ ファイル(A):] の下の一覧の中から「Microsoft ActiveX Data Objects 2.x Library」というような文字列の書かれた項目の前の チェックボックス を オン にします。
 私の環境では「2.x」の部分が「2.0」・「2.1」・「2.5」・「2.6」・「2.7」・「2.8」と 6通り ありましたので、番号の一番大きな「2.8」に参照設定しました。
3)最後に [OK] を クリック して、[参照設定 - VBProject] ダイアログ を閉じます。

 なお、私の書いた マクロ は、マクロ が書かれた ブック には、何も変化はありません。
 新規ブック を開いて、そこに データ を読み込み、別名で保存するようにしてあります。

>最終的に私がやりたいことは60ある同一フォームのエクセルファイルの、
>A1からX365に入力された数値を
>それぞれのセル位置ごとにマスターのファイルで合計を出したい
とのことですが、「60ある同一フォームのエクセルファイル」は、同じ フォルダ に入っていることが要件です。

 VBA の知識がおありでしたら、私の書いた マクロ を適当に手直ししてくだされば、複数の フォルダ からの読み込みもできるようになります。
 では、ご健闘をお祈りします。  <(_ _)>

 おはようございます。DOUGLAS_ です。

>「A1:X365」という読み込み範囲を指定する
>SQL文 の書き方が分かりませんでしたので、・・・
 前回答の 参照URL に書いてありました。  (;^_^A

 前回答の下記2点を訂正していただければ結構です。

1)
myRS.Open "select * from [Sheet1$]", myCon

myRS.Open "select * from [Sheet1$A1:X356]", myCon
に差し替え。

2)
Range(Range("Y1"), Cells(1, Columns.Count)).EntireColumn.ClearContents
Range(Range("A366"), Cells(Rows.Count, 1)).EntireRow...続きを読む

Qエクセルvbaで特定フォルダに3つのcsvファイルがあり、それを読み込んで一つのブック内に3つのワー

エクセルvbaで特定フォルダに3つのcsvファイルがあり、それを読み込んで一つのブック内に3つのワークシートとしたいです。 簡単そうで、難しいです。ネットのサンプルプログラムもあまり参考になりませんでした。vbaは初心者です

Aベストアンサー

スマホなんでコードは無理ですが。

csv読み込むたびにシート作成したらいいんじゃないの?

とりあえず、処理の順序を日本語で置き換えることは出来ますか?

Qフォルダ内にあるファイル全てを比較したい

以前よりこちらでファイル比較を相談していたものですが
ファイルNo.1~26までを比較するソフトは出来たのですが
状況によっては1~3までとか1,4,18とか飛ばし飛ばしに
ファイルがある場合があります。
その場合For文では無いファイル番号で比較が終わってしまい
次に進まないのですが、こういった時はどうしたらよいのでしょうか?
IF文なのかとも思いましたが、調べてもしっくりくるものが判らず
???だらけです。

どなた様か御教授御願い致します。

ちなみに下がファイル比較するソースになります。


Option Explicit

Function Comp(ByVal F1$, ByVal F2$) As Long
Dim EXE, STD, TxT$, CNT&, I&
TxT = "fc /b " & F1 & " " & F2
Set EXE = CreateObject("WScript.Shell").Exec(TxT)
Set STD = EXE.StdOut
Do While EXE.Status = 0
'Do Until STD.AtEndOfStream
TxT = STD.ReadLine
CNT = CNT + 1
If CNT = 2 Then Exit Do
Loop
If EXE.Status = 0 Then
EXE.Terminate
If TxT = "FC: 相違点は検出されませんでした" Then
CNT = 0
Else
CNT = 1
End If
Else
CNT = EXE.ExitCode
End If
STD.Close
Comp = CNT
End Function
Private Sub Command1_Click()

Dim keka As Long
Dim I&, F1$, F2$
For I = 1 To 25
F1 = "a:\W-NO-" & Format(I, "00") & ".DAT"
F2 = "c:\VB\W-NO-" & Format(I, "00") & ".DAT"
keka = Comp(F1, F2)
Select Case keka
Case 1:
MsgBox F1 & "と" & F2 & "は等しくない"
Exit For
Case 2:
MsgBox F1 & "と" & F2 & "の比較で入出力障害を検出した"
Exit For
End Select
Next

End Sub

以前よりこちらでファイル比較を相談していたものですが
ファイルNo.1~26までを比較するソフトは出来たのですが
状況によっては1~3までとか1,4,18とか飛ばし飛ばしに
ファイルがある場合があります。
その場合For文では無いファイル番号で比較が終わってしまい
次に進まないのですが、こういった時はどうしたらよいのでしょうか?
IF文なのかとも思いましたが、調べてもしっくりくるものが判らず
???だらけです。

どなた様か御教授御願い致します。

ちなみに下がファイル比較するソ...続きを読む

Aベストアンサー

Dim I&, F1$, F2$ '★←ここまでは以前と同じ

'★== FD側のファイルを列挙する ==
F1 = Dir("a:\*.DAT") 'A:\にある拡張子.DATのファイル全て
If F1 = "" Then '★該当ファイルが1個も無い場合
  MsgBox "該当ファイルがありません"
  Exit Sub
End If
'★== FD側のファイル名を記録する ==
I = -1 '最初は-1から
ReDim F(0) 'ファイル名を蓄える配列
Do
  I = I + 1 '配列要素数(正しくは最大インデックス)を更新
  ReDim Preserve F(I) = F1 '記録する
  F1 = Dir '次のファイルを取得 ※パラメータ無しに注意
Loop Until F1 = "" '見つからなくなるまで繰り返す
'★== 記録したファイル名を逐次処理する ==
For Each F1 In F
  F2 = "c:\VB\" & F1 'HD側のパス名
  If Dir(F2) <> "" Then 'ファイルが存在する場合
    F1 = "a:\" & F1 'FD側パス名
    keka = Comp(F1, F2) 'ファイルを比較
    Select Case keka '結果による振り分け
'★ === 中略 === ここは前のSelect Case と同じ
    End Select
  End If
Next
End Sub
今までの For I = 1 To 25 ~ Next は消去してください。

Dim I&, F1$, F2$ '★←ここまでは以前と同じ

'★== FD側のファイルを列挙する ==
F1 = Dir("a:\*.DAT") 'A:\にある拡張子.DATのファイル全て
If F1 = "" Then '★該当ファイルが1個も無い場合
  MsgBox "該当ファイルがありません"
  Exit Sub
End If
'★== FD側のファイル名を記録する ==
I = -1 '最初は-1から
ReDim F(0) 'ファイル名を蓄える配列
Do
  I = I + 1 '配列要素数(正しくは最大インデックス)を更新
  ReDim Preserve F(I) = F1 '記録する
  F1 = Dir '次のファイルを取得...続きを読む

Qフォルダ内にあるブックをひとつのブックの

エクセルの質問です。
フォルダ内にあるブックをひとつのブックのワークシートに入れる
マクロがほしいのですができる方よろしくお願いします。

Aベストアンサー

「マクロがほしい」って、自分で勉強してVBAやFSOでコードを作ること。人に頼らないこと。ここは要求してコードを作成してもらうコーナーではない。
自分でやってヒントをもらうぐらいにして。
ーーー
下記はGoogleでも照会すればコード例が多数ある。
(1)フォルダ内のエクセルブック名を1つずつ掴むコード
(2)1つのブックの「ワークシートに入れる」シートは最初の1つか、そのブックにあるシートすべてか。
これらは質問に書いておくべきこと。
すべての場合は
For Each Sh In Worksheetsのようなのですべてのシート名がとらえられる。
(3)コピー元のセル範囲は、そのシートの最終行や最右列をとらえるコードで割り出せる。
参考 あるブックでSheet4に他のシートを集約する例。
Sub test01()
For Each sh In Worksheets
MsgBox sh.Name
If sh.Name <> "Sheet4" Then 'Sheet4は集約シート
d = sh.Range("a65536").End(xlUp).Row '最終行取得
Range(sh.Cells(2, "A"), sh.Cells(d, "A")).Copy Worksheets("Sheet4").Range("A65536").End(xlUp).Offset(1, 0)
End If
Next
End Sub
(4)そのセル範囲(上記例にA列だけの例を挙げた)をコピーして、「>ひとつのブック」に新しいシートを挿入しそのA1セルを起点にして貼り付け。
参考例
同じブックで、シートのコピーによらずにコピーしたシートを増やす例。
ーー
質問ではブックが別のシートにコピーするが、同コードを変えればよいか勉強して。
上記コードは参考にしかならないようなものだが。
初心者には早すぎる課題と思うが。

「マクロがほしい」って、自分で勉強してVBAやFSOでコードを作ること。人に頼らないこと。ここは要求してコードを作成してもらうコーナーではない。
自分でやってヒントをもらうぐらいにして。
ーーー
下記はGoogleでも照会すればコード例が多数ある。
(1)フォルダ内のエクセルブック名を1つずつ掴むコード
(2)1つのブックの「ワークシートに入れる」シートは最初の1つか、そのブックにあるシートすべてか。
これらは質問に書いておくべきこと。
すべての場合は
For Each Sh I...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報