Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


18243 / 76738 ←次へ | 前へ→

【63938】Re:マクロを早く快適に動かしたいです
発言  kanabun  - 09/12/31(木) 22:54 -

引用なし
パスワード
   ▼つよぽん さん:

>もう少し細かくお伝えすると、統合フォルダの中に20091201フォルダ、20091202フォルダと日付フォルダがあり、
>日付フォルダの中には1001csv、1002csv、1003csvと1400の店舗データがあります。

遅ればせながら、、、
統合する店舗の数だけ Dictionary配列に 統合テーブル作成して
最後にまとめて ファイル出力するサンプルです。

このサンプルを試すためには
★ VBEメニュ−[ツール]-[参照設定]より
  Microsoft Scripting Runtime に参照設定しておいてください

Sub Try1()
 Dim dataFolder As String
 Dim subFolder() As String, subCount As Long
 Dim fo
 Dim fileName As String
 Dim i As Long
 Dim dic() As Dictionary

 dataFolder = "C:\Documents and Settings\月間データ統合\" 'データフォルダ
 
 'データフォルダ内のサブフォルダ名を取得
 fileName = Dir$(dataFolder & "*.*", vbDirectory)
 Do While Len(fileName)
  If (GetAttr(dataFolder & fileName) And vbDirectory) = vbDirectory Then
   If Not (fileName Like ".*") Then ' サブフォルダならば
     subCount = subCount + 1
     ReDim Preserve subFolder(1 To subCount)
     subFolder(subCount) = dataFolder & fileName & "\"
   End If
  End If
  fileName = Dir$() '次のフォルダ名を取得
 Loop
 
 Dim 店舗名 As String
 Dim nDic As Long
 Dim n As Long
 ReDim dic(1500)
 Set dic(0) = New Dictionary
 For Each fo In subFolder
   fileName = Dir$(fo & "*.csv")
   While Len(fileName) '(ある日付の)店舗名.csv 取得
     店舗名 = Left$(fileName, InStrRev(fileName, ".") - 1)
     If Not dic(0).Exists(店舗名) Then
       nDic = nDic + 1
       n = nDic
       dic(0).Item(店舗名) = n
       Set dic(n) = New Dictionary
     Else
       n = dic(0).Item(店舗名)
     End If
     '------------
     csv統合 fo & fileName, dic(n) '商品コード別集計
     '------------
     fileName = Dir$()
   Wend
 Next
 
 '店舗別 統合ファイル出力
 Dim 店舗, 商品 As String
 Dim vv
 Dim io As Integer
 Application.ScreenUpdating = False
 io = FreeFile()
 For Each 店舗 In dic(0).Keys()
   n = dic(0).Item(店舗)
   With ThisWorkbook.Worksheets(1)
     .Cells(1).Resize(dic(n).Count, 2).Value = _
      Application.Transpose(Array(dic(n).Keys, dic(n).Items))
     .UsedRange.Sort Key1:=.Columns(1), Header:=xlNo
     vv = .UsedRange.Value
     .UsedRange.ClearContents
   End With
   fileName = dataFolder & 店舗 & ".csv"
   Open fileName For Output As io
   For i = 1 To UBound(vv)
     Print #io, Join(Array(vv(i, 1), vv(i, 1), vv(i, 2)), ",")
   Next
   Close io
 Next
 Application.ScreenUpdating = True
 Erase dic
 MsgBox nDic & "店舗の 統合が完了しました"
   
End Sub

'★ 指定のCSVファイルを開き、商品別に数量集計
Private Sub csv統合(myCSV As String, tbl As Dictionary)
  Dim io As Integer
  Dim buf() As Byte
  io = FreeFile()
  Open myCSV For Binary As io
  ReDim buf(1 To LOF(io))
  Get #io, , buf
  Close io
  
  Dim vv, v
  Dim i As Long
  vv = Split(StrConv(buf, vbUnicode), vbCrLf)
  For i = 0 To UBound(vv) - 1
    v = Split(vv(i), ",")
    tbl(v(1)) = tbl(v(1)) + Val(v(2)) '統合
  Next '      商品   数量
  
End Sub
0 hits

【63908】マクロを早く快適に動かしたいです つよぽん 09/12/31(木) 6:33 質問
【63910】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 10:40 発言
【63914】Re:マクロを早く快適に動かしたいです kanabun 09/12/31(木) 14:09 発言
【63916】Re:マクロを早く快適に動かしたいです つよぽん 09/12/31(木) 15:13 発言
【63917】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 15:19 発言
【63918】Re:マクロを早く快適に動かしたいです Hirofumi 09/12/31(木) 15:31 回答
【63919】Re:マクロを早く快適に動かしたいです Hirofumi 09/12/31(木) 15:36 回答
【63921】Re:マクロを早く快適に動かしたいです Hirofumi 09/12/31(木) 17:12 回答
【63927】Re:マクロを早く快適に動かしたいです Hirofumi 09/12/31(木) 18:03 回答
【63928】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 18:10 発言
【63932】Re:マクロを早く快適に動かしたいです Hirofumi 09/12/31(木) 19:07 発言
【63933】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 19:40 発言
【63935】Re:マクロを早く快適に動かしたいです Hirofumi 09/12/31(木) 20:33 発言
【63936】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 21:01 発言
【63939】Re:マクロを早く快適に動かしたいです つよぽん 10/1/1(金) 18:32 質問
【63940】Re:マクロを早く快適に動かしたいです かみちゃん 10/1/1(金) 18:39 発言
【63942】Re:マクロを早く快適に動かしたいです つよぽん 10/1/1(金) 19:16 お礼
【63948】Re:マクロを早く快適に動かしたいです kanabun 10/1/2(土) 22:23 発言
【63949】Re:マクロを早く快適に動かしたいです kanabun 10/1/2(土) 23:21 発言
【63950】Re:マクロを早く快適に動かしたいです kanabun 10/1/2(土) 23:29 発言
【63920】Re:マクロを早く快適に動かしたいです kanabun 09/12/31(木) 17:08 発言
【63924】Re:マクロを早く快適に動かしたいです つよぽん 09/12/31(木) 17:48 発言
【63925】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 17:53 発言
【63929】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 18:41 発言
【63931】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 18:50 発言
【63937】Re:マクロを早く快適に動かしたいです かみちゃん 09/12/31(木) 21:04 発言
【63934】Re:マクロを早く快適に動かしたいです kanabun 09/12/31(木) 20:14 発言
【63938】Re:マクロを早く快適に動かしたいです kanabun 09/12/31(木) 22:54 発言
【63941】Re:マクロを早く快適に動かしたいです つよぽん 10/1/1(金) 18:57 発言
【63943】Re:マクロを早く快適に動かしたいです かみちゃん 10/1/1(金) 19:41 発言
【63930】Re:マクロを早く快適に動かしたいです よろずや 09/12/31(木) 18:44 発言
【63944】Re:マクロを早く快適に動かしたいです Yuki 10/1/2(土) 10:46 発言
【63945】Re:マクロを早く快適に動かしたいです かみちゃん 10/1/2(土) 11:11 発言

18243 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free