- ベストアンサー
マクロでBOOKデータをBOOK1に転記する方法
- エクセルマクロを使用して、BOOK2~BOOK6のデータをBOOK1のシート1に転記する方法を教えてください。作業者にはファイルの選択をさせる必要があり、行数もBOOKごとに異なります。
- まず、BOOK1を開き、マクロを実行します。すると、ファイルを選択するウィンドウが表示されます。作業者はBOOK2~BOOK6の中からファイルを選択し、開くボタンをクリックします。その後、指定したファイルのデータがBOOK1のシート1に転記されます。
- この処理を5回繰り返し、BOOK2~BOOK6のデータをBOOK1に転記します。転記する範囲は、1回目は1行目から最終行まで、2回目以降は2行目から最終行までとなります。最後にメッセージボックスで「5個のBOOKの転記が終了しました」と表示され、編集プロシージャーが起動します。
- みんなの回答 (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
お礼
完璧に動作しました。 大変助かりました。 どうもありがとうございます。
補足
お久しぶりです。 >指定したファイルのどのシート? >とりあえず開いたときアクティブになってるシートでみますけど、違ったら修正してください 選択さセルファイルは基幹システムから吐き出したファイルで、 シートは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分でも秒速でした。 因果関係は分かりませんが、 今回教えていただいた物がうまく出来れば あちらも解決してしまうかも知れません。 ありがとうございます。