EXCEL超初心者マクロ(SAMPLE16)ファイル合体。
久しぶりにUPです。
EXCELやCSVが沢山あって、一つずつ合体させることってないですか?
デイリーのデータを毎週、毎月なんて面倒ですよね。
場合によっては100個ぐらいあったりしたら間違いのもとになります。
数個なら大した手間でもないし、CSVならコマンドプロンプトの「TYPE」コマンドでできたりするのですが、EXCELは手動で切り貼りが必要です。
実は、社内で要望があり、作ったので、それを参考にサンプルを作成しました
SAMPLE16.zip
※Cドライブ直下に解凍してください。KANRIシートで基本ホルダは変更できます。
※ダウンロードする際は、必ずウイルスチェックをしてくださいね。またサンプルは自由にご使用になって結構ですが、当方で責任は一切負えませんのでご了承ください。
流れ
・フォルダ情報を取得して一覧作成FILEKANRI
KANRIにパス情報
FILEKANRIにファイル情報
・上記で取得した情報から、ファイルをEXCELで開いて、INPUTへコピー後、OUTPUTへ追加。
分けているのは、データによってヘダーが有ったり、編集したりいろいろあるため、分けています。
・一気に取り込みまで作ることも出来るのですが、あえて処理ミスを防ぐため、取り込むファイル名を目視できるようにしています。
【注意】
CSVで12桁以上の数値が入っていたり、前ゼロがあると想定通りにならないかもしれません。
取り込むEXCELが大きかったり、複雑な構成(セルの結合)をしてる場合は張り付けるときにメモリ不足のエラーになることがあります。
データだけ取り込みたかったら以下の部分を直せば大丈夫かもしれません。
Paste:=xlPasteValues '### 文字列のみ
File情報取得
MSG_FLG = MsgBox(" FILEKANRI へ 取込みファイルの情報を取得します。 " & vbCrLf & " 実行OK? ", vbYesNo) If MSG_FLG = vbNo Then Exit Sub End If ' Application.ScreenUpdating = False mySheetName001 = "FILEKANRI" ' ***クリア処理*** '### シートフィルタ解除サブプロシジー ### sheet_clear '### シートクリア ### Sheets(mySheetName001).Select Worksheets(mySheetName001).Cells.Clear Range("A1").Select Const cnsTITLE = "○ファイル取込み処理" Const cnsFILTER = " (*.*),*.*" ' '### 基本ディレクトリ With CreateObject("WScript.Shell") .CurrentDirectory = Worksheets("KANRI").Range("B1") End With '### フォルダ名取得ダイアログでフォルダ名取得 With Application.FileDialog(msoFileDialogFolderPicker) .Show FOLDERPATH = .SelectedItems(1) End With Worksheets("KANRI").Range("B5") = FOLDERPATH '### 取得場所準備 Set set_data01 = Worksheets(mySheetName001).Range("A1") CNT01 = 0 set_data01.Offset(CNT01, 0).value = "取込みファイル名" '### 取得したパス内のファイル名を取得。 WORK01 = Dir(FOLDERPATH & "\*.*") Do While WORK01 <> "" CNT01 = CNT01 + 1 set_data01.Offset(CNT01, 0).value = WORK01 WORK01 = Dir() Loop Application.StatusBar = "ファイル情報取得" MsgBox (" ファイル情報取得(^^) ")
File取込&追加
MSG_FLG = MsgBox(" FILEKANRI のデータを 取込み追加します。 " & vbCrLf & " 実行OK? ", vbYesNo) If MSG_FLG = vbNo Then Exit Sub End If Application.ScreenUpdating = False mySheetName001 = "FILEKANRI" mySheetName002 = "INPUT" mySheetName003 = "OUTPUT" ' ***クリア処理*** '### シートフィルタ解除サブプロシジー ### sheet_clear Set set_data01 = Worksheets(mySheetName001).Range("A2") Set set_data03 = Worksheets(mySheetName003).Range("A1") Do Until set_data01.Offset(0, 0).value = "" '############################################# '### コピーANDペースト '############################################# '### シートクリア ### Sheets(mySheetName002).Select Worksheets(mySheetName002).Cells.Clear Range("A1").Select '### 元Sheet セット Set writeSheet = ThisWorkbook.Worksheets(mySheetName002) '### シート名セット ### vFILENAME = Worksheets("KANRI").Range("B5") & "\" & set_data01.Offset(0, 0).value Set strBookName = Workbooks.Open(vFILENAME) '相手オープン Cells.Select Selection.Copy writeSheet.Activate '元選択(download) Cells.Select ActiveSheet.Select Range("A1").PasteSpecial '### 全て貼り付け 'Range("A1").PasteSpecial Paste:=xlPasteValues '### 文字列のみ '### 相手クローズ クリップモードメッセージ、保存メッセージ、飛ばす Application.CutCopyMode = False Application.DisplayAlerts = False strBookName.Close savechanges:=False Application.DisplayAlerts = True writeSheet.Activate '元選択(download) Set writeSheet = Nothing Set strBookName = Nothing ActiveSheet.Cells.ClearOutline '############################################# '### 追加 '############################################# Set set_data02 = Worksheets(mySheetName002).Range("A1") Do Until set_data02.Offset(0, 0).value = "" set_data03.Offset(0, 0).value = set_data02.Offset(0, 0).value set_data03.Offset(0, 1).value = set_data02.Offset(0, 1).value set_data03.Offset(0, 2).value = set_data02.Offset(0, 2).value set_data03.Offset(0, 3).value = set_data02.Offset(0, 3).value ' set_data03.Offset(0, 4).value = set_data02.Offset(0, 4).value ' set_data03.Offset(0, 5).value = set_data02.Offset(0, 5).value ' set_data03.Offset(0, 6).value = set_data02.Offset(0, 6).value ' set_data03.Offset(0, 7).value = set_data02.Offset(0, 7).value ' set_data03.Offset(0, 8).value = set_data02.Offset(0, 8).value ' set_data03.Offset(0, 9).value = set_data02.Offset(0, 9).value '########## 次行 ############# Set set_data02 = set_data02.Offset(1, 0) Set set_data03 = set_data03.Offset(1, 0) Loop '########## 次行 ############# Set set_data01 = set_data01.Offset(1, 0) Loop Application.ScreenUpdating = True Sheets(mySheetName003).Select Range("A1").Select Application.StatusBar = "取込みEND" MsgBox (" 処理END(^^) ")
ディスカッション
コメント一覧
まだ、コメントがありません