'指定フォルダの全テキストの任意行を取得
Sub GetAllTextData()
'フォルダ指定用のダイアログを表示します
With Application.FileDialog(msoFileDialogFolderPicker)
'カレントディレクトリを指定します
.InitialFileName = ThisWorkbook.Path
'設定しなかったら終了します
If .Show = False Then Exit Sub
'設定したフォルダを表示します
Dim Fname
Fname = .SelectedItems(1)
End With
'参照設定
Dim FSO As Object, Folder As Variant, File As Variant
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim FilePath As Variant
ReDim FilePath(1 To 100) As Variant
'指定フォルダ内の.txtファイルを探索します
i = 0
For Each File In FSO.GetFolder(Fname).Files
If InStr(File.Name, ".txt") > 0 Then
i = i + 1
FilePath(i) = File.Path 'ファイルのフルパスを取得
End If
Next
'配列の大きさは状況に応じ変更してください
Dim Hozon, GetData As Variant
ReDim GetData(1 To 100, 1 To 100) As Variant
'全テキストファイルの任意行のデータを取得する
m = 0
For k = 1 To UBound(FilePath, 1)
'テキストファイルが存在する場合に実行
If IsEmpty(FilePath(k)) = False Then
'保存する配列を空にする
ReDim Hozon(1 To 100, 1 To 100) As Variant
'テキストを開いて配列にデータを保存
Open FilePath(k) For Input As #1
i = 0
'テキストをすべて取得する
Do Until EOF(1)
Line Input #1, buf
i = i + 1
'コンマ区切りでデータを取得する
a = Split(buf, ",")
For j = 0 To UBound(a, 1)
Hozon(i, j + 1) = a(j)
Next
Loop
Close #1
'▼取得したいデータに応じ変更してください'任意行の値を取得する
i = 2 '2行目のデータを取得
m = m + 1
For j = 1 To UBound(Hozon, 2)
GetData(m, j) = Hozon(i, j)
Next
End If
Next
'データ貼り付け
With ActiveSheet
.Range(.Cells(2, 1), .Cells(2, 1).Offset(UBound(GetData, 1) - 1, UBound(GetData, 2) - 1)) = GetData
End With
End Sub
すこし長いですがすみません、私にはこれが限界です (;^_^)
ひとつずつ説明していってみます。
最初はフォルダを指定するためのダイアログ表示のコードです。
フォルダ指定用のダイアログを表示するVBAコード
'フォルダ指定用のダイアログを表示します
With Application.FileDialog(msoFileDialogFolderPicker)
'カレントディレクトリを指定します
.InitialFileName = ThisWorkbook.Path
'設定しなかったら終了します
If .Show = False Then Exit Sub
'設定したフォルダを表示します
Dim Fname
Fname = .SelectedItems(1)
End With
'参照設定
Dim FSO As Object, Folder As Variant, File As Variant
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim FilePath As Variant
ReDim FilePath(1 To 100) As Variant
'指定フォルダ内の.txtファイルを探索します
i = 0
For Each File In FSO.GetFolder(Fname).Files
If InStr(File.Name, ".txt") > 0 Then
i = i + 1
FilePath(i) = File.Path 'ファイルのフルパスを取得
End If
Next
Set FSO = CreateObject("Scripting.FileSystemObject")は参照設定でVBAでフォルダやファイルの操作をする際に使用します。
ReDim FilePath(1 To 100) As Variantはテキストファイルのフルパスを保存する配列の大きさを設定しています。
とりあえず100行としていますが、必要に応じ変更してみてください(^^)
For Each File In FSO.GetFolder(Fname).Filesのコードでフォルダ内のすべてのファイルを見ていきます。
'テキストを開いて配列にデータを保存
Open FilePath(k) For Input As #1
i = 0
'テキストをすべて取得する
Do Until EOF(1)
Line Input #1, buf
i = i + 1
'コンマ区切りでデータを取得する
a = Split(buf, ",")
For j = 0 To UBound(a, 1)
Hozon(i, j + 1) = a(j)
Next
Loop
Close #1
'▼取得したいデータに応じ変更してください'配列の大きさは状況に応じ変更してください
Dim Hozon, GetData As Variant
ReDim GetData(1 To 100, 1 To 100) As Variant
'任意行の値を取得する
i = 2 '2行目のデータを取得
m = m + 1
For j = 1 To UBound(Hozon, 2)
GetData(m, j) = Hozon(i, j)
Next
GetDataは取得したい全データを保存する配列になります。
ReDim GetData(1 To 100, 1 To 100) As Variantでとりあえず簡単に配列GetDataの大きさを100行100列としています(;^_^)
必要に応じで大きさ変えてみてください。
ReDimは説明のためこちらに記載していますが、コード自体は次に説明するコードFor k = 1 To UBound(FilePath, 1)の前に記載する必要があります。