• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロで5個のBOOKのデータをBOOK1に転記)

マクロでBOOKデータをBOOK1に転記する方法

このQ&Aのポイント
  • エクセルマクロを使用して、BOOK2~BOOK6のデータをBOOK1のシート1に転記する方法を教えてください。作業者にはファイルの選択をさせる必要があり、行数もBOOKごとに異なります。
  • まず、BOOK1を開き、マクロを実行します。すると、ファイルを選択するウィンドウが表示されます。作業者はBOOK2~BOOK6の中からファイルを選択し、開くボタンをクリックします。その後、指定したファイルのデータがBOOK1のシート1に転記されます。
  • この処理を5回繰り返し、BOOK2~BOOK6のデータをBOOK1に転記します。転記する範囲は、1回目は1行目から最終行まで、2回目以降は2行目から最終行までとなります。最後にメッセージボックスで「5個のBOOKの転記が終了しました」と表示され、編集プロシージャーが起動します。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

おや、ガンダム少年じゃないですか。 またお会いしましたね。 > 指定したファイルが開いてデータが > BOOK1のシート1に転記される 指定したファイルのどのシート? とりあえず開いたときアクティブになってるシートでみますけど、違ったら修正してください。 > この1回目は1行目からデータがある最終行まで。 行はわかったけど、どの列で判定すればいいのかな? とりあえずA列でみますけど、違ったら修正してください。 こんな感じかな? Sub GetBook()   Dim ans As Boolean   Static myCnt As Integer   If myCnt >= 5 Then     MsgBox "5個のBOOKの転記が終了してます。"     Exit Sub   End If   ans = Application.Dialogs(xlDialogOpen).Show   If ans Then     myCnt = myCnt + 1     Call GetData(ActiveWorkbook, myCnt)   End If End Sub Sub GetData(ByRef wb As Object, ByVal myCnt As Integer)   Dim x As Long   MsgBox wb.Name & "からデータを取得します。", vbInformation, myCnt & "回目ですね。"   With wb.ActiveSheet     x = .Cells(Rows.Count, "A").End(xlUp).Row     If myCnt = 1 Then       .Rows("1:" & x).Copy ThisWorkbook.Sheets("Sheet1").Range("A1")     Else       .Rows("2:" & x).Copy ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Offset(1)     End If   End With   wb.Close (False)   MsgBox myCnt & "回目の転記が完了"   If myCnt < 5 Then     Call GetBook   Else     MsgBox "5個のBOOKの転記が終了しました。"     Call 編集   End If End Sub

gx9wx
質問者

お礼

完璧に動作しました。 大変助かりました。 どうもありがとうございます。

gx9wx
質問者

補足

お久しぶりです。 >指定したファイルのどのシート? >とりあえず開いたときアクティブになってるシートでみますけど、違ったら修正してください 選択さセルファイルは基幹システムから吐き出したファイルで、 シートは1個しか存在しません。 またシート名は吐き出すたびにシステムがシート名を変えてしまいます。 シート名は指定できません。 アクティブになっているシートで問題ありません。 >行はわかったけど、どの列で判定すればいいのかな? >とりあえずA列でみますけど、違ったら修正してください。 A列からQ列まであり、すべての行は埋まっています。 A列で問題ありません。 BOOK1の シート2→BOOK2 シート3→BOOK3 シート4→BOOK4 シート5→BOOK5 シート6→BOOK6 のデータを貼り付けて その後 シート1にシート2~6の順で貼り付けます。 ファイルサイズは15Mです。 よって、今回質問しました。 (最初からシート1に転記すれば楽で軽いので) 別件の高速化も回答してくださいましたね。 ありがとうございます。 あれは本件で、できあがったシート1の編集なのです。 実はまだ高速化しないのです。 画面を見ていると明らかにあのLOOP文の所で一番時間が かかっている (R列が選択された状態で止まっている) のですが、記述ではシート1しか対象にしていませんし シート1内で編集しているので無関係だと思うのですが。 あのLOOP文が原因ではなく、どうもこの 15Mというサイズが原因のような気が。???? とりあえず、教えていただいた内容でうまくいっています。 取り込み後、約20,000行あるので今確認中です。 この教えていただいた物だと当然シート1に20,000行あるだけなので サイズは5Mくらいです。 ためしに自分のLOOP分でも秒速でした。 因果関係は分かりませんが、 今回教えていただいた物がうまく出来れば あちらも解決してしまうかも知れません。 ありがとうございます。

関連するQ&A