実現したいこと
集計表.xlsmからVBAを実行し、工程表_2022年4月.xlsmの所定シート(04から始まるシート名)の所定項目を集計表.xlsmへ全て転記したい。
●集計表.xlsm※完成状態
●工程表_2022年4月.xlsm
●フォルダ構成
条件
・工程表_2022年4月.xlsmシート数は、0401~0428まで存在する。※1日1シート存在
・上記各シートは、添付画像と同じデータが入っている。
試した事・発生している問題・エラーメッセージ
現状、for文、if文で一行ずる処理コードしか出来ていない為、処理時間にかなり時間をようしてしまっているので、高速処理できるように解消したくご協力をお願いします。
→連想配列も考えたのですが、データ自体が重複している為キーを設定する事が出来ませんでした。※私の知識の中ですが。
エラーメッセージ
該当のソースコード
VBA
1Sub シート集約() 2Dim source As String '転記元ファイル保管パス 3Dim cWb As Workbook '転記先ファイル変数 4Dim cWs As Worksheet '転記先シート変数 5Dim cWc As Range '転記先該当ファイル名 6Dim cWc1 As Range '転記先該当シート名月 7Dim cWc2 As Range '転記先該当シート名年 8Dim rowAc As Long '転記先A列行番号 9Dim sWb As Workbook '転記元ファイル変数 10Dim sWs As Worksheet '転記元シート変数 11Dim sWc As String '転記元ファイル名 12Dim sWc1 As String '転記元シート名 13Dim sWc2 As String '転記元シート名頭2桁 14Dim rowA As Long '転記元A列行番号 15 16Application.ScreenUpdating = False '画面チラツキ防止 17 18source = "C:\Users\xxx\Desktop\共通\50_VBA\シート別高速処理" 'パスは身バレの為、xxxと表現 19Set cWb = ThisWorkbook 20Set cWs = cWb.Worksheets("Sheet1") 21Set cWc = cWs.Range("A1") 22Set cWc1 = cWs.Range("A2") 23Set cWc2 = cWs.Range("C2") 24Set sWb = Workbooks.Open(source & "\" & cWc, UpdateLinks:=False) 25cWs.Rows("3:" & Rows.Count).ClearContents 'データ削除 26 27For Each sWs In Worksheets 28 If Left(sWs.Name, 2) = cWc1 Then 29 maxrowA = sWs.Cells(Rows.Count, "A").End(xlUp).Row 30 For rowA = 5 To maxrowA 31 maxrowAc = cWs.Cells(Rows.Count, "A").End(xlUp).Row 32 cWs.Cells(maxrowAc + 1, 1) = sWs.Cells(rowA, 1) '型 33 cWs.Cells(maxrowAc + 1, 2) = sWs.Cells(rowA, 2) '品番 34 cWs.Cells(maxrowAc + 1, 3) = sWs.Cells(rowA, 3) '品名 35 cWs.Cells(maxrowAc + 1, 4) = sWs.Cells(rowA, 6) '組立着手日 36 cWs.Cells(maxrowAc + 1, 5) = sWs.Cells(rowA, 7) '組立完了日 37 cWs.Cells(maxrowAc + 1, 6) = cWc2 & "年" & cWc1 '転記元シート年月 38 Next 39 End If 40Next 41 42sWb.Close 43Application.ScreenUpdating = True '画面チラツキ防止 44 45End Sub 46 47
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー