|
こんにちは。かみちゃん です。
>データはかみちゃんさんのご想像通りです。
時間 商品名 商品数
というタイトル行は、なく、
>と店舗毎の1ヶ月の商品の総数を統合した
ものをCSVファイルではなく、ワークシート上に出力するのでよければ、
Hirofumiさんのコードをお借りすると以下のような感じで集計できると思います。
マクロを記述するブックが保存されているフォルダに、
「月間データ統合」というフォルダがあり、その中に
20091201フォルダ、20091202フォルダというフォルダがあるものとします。
Option Explicit
Option Compare Text
Sub Sample()
Dim dataFolder As String
Dim fileName As String
Dim i As Long
Dim vntFileNames() As Variant
Dim vntField As Variant
Dim vntKeys As Variant
Dim dicIndex As Object
Dim strPrompt As String
Application.ScreenUpdating = False
'データフォルダ
dataFolder = ThisWorkbook.Path & "\月間データ統合"
'※csvファイル名取得
If Not FileList(dataFolder, vntFileNames, Sheets("Sheet1")) Then
strPrompt = "ファイルが有りません"
GoTo Wayout
End If
'※bookへcsvファイルを集計
'Dictionaryオブジェクトを取得
Set dicIndex = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(vntFileNames, 1) - 1
'csvファイルのファイル名取得
fileName = dataFolder & "\" & vntFileNames(i, 2) & "\" & vntFileNames(i, 1) & ".csv"
'データ取得
GetData fileName, dicIndex
Next
With dicIndex
'Dictionaryの全てのKeyを出力
vntKeys = dicIndex.Keys
'結果用配列を確保
ReDim vntField(1 To UBound(vntKeys) + 1, 1 To 3)
'結果を配列に出力
For i = 0 To UBound(vntKeys)
vntField(i + 1, 1) = vntKeys(i)
vntField(i + 1, 2) = vntKeys(i)
vntField(i + 1, 3) = .Item(vntKeys(i))
Next i
'Dictionaryをクリア
.RemoveAll
End With
With Sheets("Sheet1")
.Cells.Clear
.Range("A1").Resize(UBound(vntField), 3).Value = vntField
End With
strPrompt = "処理が完了しました"
Wayout:
Set dicIndex = Nothing
Application.ScreenUpdating = True
MsgBox strPrompt, vbInformation
End Sub
Private Sub GetData(strFile As String, dicIndex As Object)
'〜省略〜
End Sub
Private Function FileList(strPath As String, vntFileNames() As Variant, wksWork As Worksheet) As Boolean
'〜省略〜
End Function
Private Function SplitCsv(ByVal strLine As String, _
'〜省略〜
End Function
ワークシートを経由せずに、CSVファイルに直接出力することもできますが、
どのフォルダにどのようなファイル名で保存すればいいのかがわかりません。
|
|