さっきの続きです。
コードが長くなりすぎたので、いったん今までのコード、全部消します。
さて、今度はCSVファイルの取り扱いです。
どのCSVファイルを処理するのか?ですが、プログラムの中で処理をするCSVを1つ1つ指定するのも面倒なので、 特定のフォルダに入っているCSVファイルを全部処理する って感じにしてみたいと思います。

こんな感じで、c:¥csv¥の中に、入ってるとします。
特定のフォルダ内のCSVファイルを全部探して、一つ一つのファイルを処理していくにはどうしたらよいのかな?
Yahoo!で「vba フォルダ内 ファイル」で検索すると、、、こちらのDir関数を用いた単一フォルダ内のファイル一覧がわかりやすかったです。
Sub test() Dim sagasuFilemei As String Dim sagasuFoldermei As String sagasuFoldermei = "c:¥csv¥" ' 先頭のファイル名の取得 sagasuFilemei = Dir(sagasuFoldermei & "*.csv", vbNormal) ' ファイルが見つからなくなるまで繰り返す Do While sagasuFilemei <> "" 'ファイル名をイミディエイトウィンドウに表示します Debug.Print (sagasuFilemei) ' 次のファイル名を取得 sagasuFilemei = Dir() Loop End Sub
sagasuFoldermeiというフォルダがcsvを探すフォルダ名です。
とりあえず、見つけたファイルをイミディエイトウィンドウに表示してみます。
実行してみると、

ん、表示しきれてませんが、全部取り出せました(^^)
んでは、この1つ1つのCSVファイルを開いて、中を見ていきたいと思います。
VBAでCSVファイルを扱うにはどうしたらよいのか、
Yahoo!で、「VBA CSV」で検索してみると、 こちらのページが見つかりました。
こちらのページの下のほうのサンプルを参考にして作ってみます。
これもプログラムが長くなりそうなので、いったん消します。
Sub test() Dim sagasuFilemei As String Dim fileno As Long Dim line, barabaraline() As String sagasuFilemei = "c:¥csv¥20080101.csv" '空いているファイル番号を取得します fileno = FreeFile 'sagasuFilemei のファイルをオープンします Open sagasuFilemei For Input As #fileno 'ファイルの終端まで繰り返します Do While Not EOF(fileno) '1行読み込みます Line Input #fileno, line 'カンマで各項目をばらばらにします barabaraline() = Split(line, ",") 'とりあえず、イミディエイトウィンドウに表示します Debug.Print (barabaraline(0) & "-" & barabaraline(1) & "-" & barabaraline(2)) Loop 'ファイルを閉じます Close #fileno End Sub
とりあえず、20080101.CSVの中に入っているデータを1行ずつ抜いていくプログラムです。
ファイルを開き、一行読み込み、その読み込んだ内容をカンマで区切って配列に入れ、その配列の値をイミディエイトウィンドウに表示する、というものです。
実行すると、

ん、3000行近くありますから、表示するのも時間がかかります(^^;)
おっけい。後は一行ずつ抜き出していくときに、今探しているシートのID,世代番号のデータが見つかったら、その情報を今探しているシートにどんどん追加していく、って感じですね。
一気にプログラムにしちゃいます。今のプログラムも削除して、全部組み込んだ形で作り直します。
Sub test()
Dim tuikaWorksheet As Worksheet
Dim lastgyou As Integer
Dim i As Integer
Dim mituketaGyousuu As Integer
Dim tuikaSheetmei As String
Dim saigoSheetmei As String
Dim sagasuID As String
Dim sagasuSedaibangou As Integer
Dim objSheet As Object
Dim sagasuFilemei As String
Dim sagasuFoldermei As String
Dim sagasuFile As String
Dim fileno As Long
Dim line, barabaraline() As String
sagasuFoldermei = "c:¥csv¥"
'Sheet1以外のシートを全部消します。
Application.DisplayAlerts = False
For Each objSheet In ActiveWorkbook.Sheets
If objSheet.Name <> "Sheet1" Then
ActiveWorkbook.Worksheets(objSheet.Name).Delete
End If
Next
Application.DisplayAlerts = True
'最後の行を求めます
lastgyou = Sheets("Sheet1").Range("A1").End(xlDown).Row
'1行目から最後の行まで、Sheet2にコピーします。
For i = 1 To lastgyou
' Sheet1 の i 行目の値で追加するシート名をtuikaSheetmeiに代入します。
tuikaSheetmei = Sheets("Sheet1").Cells(i, 1).Value + "-" + Trim(Str(Sheets("Sheet1").Cells(i, 2).Value))
'最後のシート名を取得します。
saigoSheetmei = ActiveWorkbook.Sheets(ActiveWorkbook.Worksheets.Count).Name
'最後のシートの後ろにワークシートの追加をします。
Set tuikaWorksheet = Sheets.Add(After:=Worksheets(saigoSheetmei))
'追加したワークシートの名前を変更します。
tuikaWorksheet.Name = tuikaSheetmei
'これから探すIDと世代番号を変数に入れておきます。
sagasuID = Sheets("Sheet1").Cells(i, 1).Value
sagasuSedaibangou = Sheets("Sheet1").Cells(i, 2).Value
'見つけた行数を0にしておきます。
mituketaGyousuu = 0
'指定されたフォルダの全てのCSVファイルについてテキストを探します。
' 先頭のファイル名の取得
sagasuFilemei = Dir(sagasuFoldermei & "*.csv", vbNormal)
' ファイルが見つからなくなるまで繰り返す
Do While sagasuFilemei <> ""
'空いているファイル番号を取得します
fileno = FreeFile
'sagafuFolderMei のフォルダの中の、sagasuFilemei のファイルをオープンします
sagasuFile = sagasuFoldermei & sagasuFilemei
Open sagasuFile For Input As #fileno
'ファイルの終端まで繰り返します
Do While Not EOF(fileno)
'1行読み込みます
Line Input #fileno, line
'カンマで各項目をばらばらにします
barabaraline() = Split(line, ",")
'今ばらばらにした行が、探しているID、世代番号だったら、
If barabaraline(0) = sagasuID And Val(barabaraline(1)) = sagasuSedaibangou Then
'見つけた行数を1行増やして、
mituketaGyousuu = mituketaGyousuu + 1
'今のシートに、データを代入します。
'A列には、今探しているCSVのファイル名を入れます。
Sheets(tuikaSheetmei).Cells(mituketaGyousuu, 1) = sagasuFilemei
'B列には、今見つけた行の、送信完了日時(barabaralineの3つめ)を入れます。
Sheets(tuikaSheetmei).Cells(mituketaGyousuu, 2) = barabaraline(2)
End If
Loop
'ファイルを閉じます
Close #fileno
' 次のファイル名を取得
sagasuFilemei = Dir()
Loop
Next
End Sub
(^^;)長っ・・・しかも複雑・・・
mituketaGyousuu という変数を使って、1行見つけたら、この変数を1つ増やし、シート内に、見つけた内容を書き出していく、という感じになってます。
実行してみると。。。
。。。 プログラムが停止するまでにかなーり時間がかかります(^^;)
が、結果こんな感じ。

ん、抜き出せました(^^)
ファイルが一杯あるので、ここに圧縮しておいておきます。 vbastudy_18.zip