|
▼マスク さん:
>日付データは必ずA列に存在します。日付だけは固定です。
>8/31はひとつのCSVファイルに複数行必ず存在します。
>営業時間内分のログが入っているので、数十行必ず存在します。
了解です。
>コメントを見て、似たような事例を引っ張ってきました。
>やはり空白の列の求め方が分からないのと、貼りつける別シートは新規で作成したいのですが……。
>ファイルを開いて見出し行を挿入する処理が分かりませんでした。
とりあえず、CSVファイルの1行目が項目見出しになっている例で
考えてみました(そうのほうがAutoFilterすぐかけれて、単純なので)
Sub Filter_CSV()
Dim myDate As Long '抽出したい日付 (シリアル値)
Dim myCSVs, f
Dim newBook As Workbook
Dim rCopy As Range '抽出転記先先頭セル
Dim myCol As Long
'●抽出したい日付をこのマクロブックのSheet1!A1セルに書いておく
myDate = ThisWorkbook.Worksheets(1).Range("A1").Value2
'OpenするCSVファイルを(複数)指定
myCSVs = Application.GetOpenFilename("CSVファイル,*.csv", _
MultiSelect:=True)
If Not IsArray(myCSVs) Then Exit Sub
'抽出転記先のBookを作成
Set newBook = Workbooks.Add(xlWBATWorksheet) 'シート1枚
Set rCopy = newBook.Sheets(1).Range("A1")
'指定のCSVファイルを順に開いてフィルタ抽出
For Each f In myCSVs
With Workbooks.Open(f).Worksheets(1)
'表領域に対してA列の日付をAutoFilterで抽出する
With .Range("A1").CurrentRegion
.AutoFilter 1, ">=" & myDate, xlAnd, "<=" & myDate
If .Columns(1).SpecialCells(xlVisible).Count > 1 Then
myCol = .Columns.Count '表の列数
.Copy rCopy '別シートにCopy
Set rCopy = rCopy.Offset(, myCol) '次の貼り付け先
End If
.AutoFilter
End With
.Parent.Close False
End With
Next
newBook.Close True
End Sub
これで 実際のCSVファイルの先頭に カンマ区切りで列見出しを書き込んで、
(ファイルは2つほどでよい)名前をつけて保存して、
↑のプロシージャを実行してみてください。
|
|