質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

シート別高速処理VBA

jabe
jabe

総合スコア38

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

2回答

0評価

0クリップ

462閲覧

投稿2022/08/09 01:26

実現したいこと

集計表.xlsmからVBAを実行し、工程表_2022年4月.xlsmの所定シート(04から始まるシート名)の所定項目を集計表.xlsmへ全て転記したい。

●集計表.xlsm※完成状態
イメージ説明
●工程表_2022年4月.xlsm
イメージ説明
●フォルダ構成
イメージ説明

条件

・工程表_2022年4月.xlsmシート数は、0401~0428まで存在する。※1日1シート存在
・上記各シートは、添付画像と同じデータが入っている。

試した事・発生している問題・エラーメッセージ

現状、for文、if文で一行ずる処理コードしか出来ていない為、処理時間にかなり時間をようしてしまっているので、高速処理できるように解消したくご協力をお願いします。
→連想配列も考えたのですが、データ自体が重複している為キーを設定する事が出来ませんでした。※私の知識の中ですが。

エラーメッセージ

該当のソースコード

VBA

Sub シート集約() Dim source As String '転記元ファイル保管パス Dim cWb As Workbook '転記先ファイル変数 Dim cWs As Worksheet '転記先シート変数 Dim cWc As Range '転記先該当ファイル名 Dim cWc1 As Range '転記先該当シート名月 Dim cWc2 As Range '転記先該当シート名年 Dim rowAc As Long '転記先A列行番号 Dim sWb As Workbook '転記元ファイル変数 Dim sWs As Worksheet '転記元シート変数 Dim sWc As String '転記元ファイル名 Dim sWc1 As String '転記元シート名 Dim sWc2 As String '転記元シート名頭2桁 Dim rowA As Long '転記元A列行番号 Application.ScreenUpdating = False '画面チラツキ防止 source = "C:\Users\xxx\Desktop\共通\50_VBA\シート別高速処理" 'パスは身バレの為、xxxと表現 Set cWb = ThisWorkbook Set cWs = cWb.Worksheets("Sheet1") Set cWc = cWs.Range("A1") Set cWc1 = cWs.Range("A2") Set cWc2 = cWs.Range("C2") Set sWb = Workbooks.Open(source & "\" & cWc, UpdateLinks:=False) cWs.Rows("3:" & Rows.Count).ClearContents 'データ削除 For Each sWs In Worksheets If Left(sWs.Name, 2) = cWc1 Then maxrowA = sWs.Cells(Rows.Count, "A").End(xlUp).Row For rowA = 5 To maxrowA maxrowAc = cWs.Cells(Rows.Count, "A").End(xlUp).Row cWs.Cells(maxrowAc + 1, 1) = sWs.Cells(rowA, 1) '型 cWs.Cells(maxrowAc + 1, 2) = sWs.Cells(rowA, 2) '品番 cWs.Cells(maxrowAc + 1, 3) = sWs.Cells(rowA, 3) '品名 cWs.Cells(maxrowAc + 1, 4) = sWs.Cells(rowA, 6) '組立着手日 cWs.Cells(maxrowAc + 1, 5) = sWs.Cells(rowA, 7) '組立完了日 cWs.Cells(maxrowAc + 1, 6) = cWc2 & "年" & cWc1 '転記元シート年月 Next End If Next sWb.Close Application.ScreenUpdating = True '画面チラツキ防止 End Sub

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Usirow

2022/08/09 01:45

連想配列を使うなら、Keyは適当な連番にして、Itemにデータを入れればいいのではないでしょうか。
jabe

2022/08/09 08:38

回答ありがとうございます。 ユニークキーを持つ必要があるってことですね。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。