• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロでシート2~6のデータをシート1に転記したい)

マクロでシート2~6のデータをシート1に転記したい

このQ&Aのポイント
  • マクロを利用してシート2~6のデータをシート1に順番に転記したいです。シート2~6は同じ列構成ですが、行数は異なります。同じ記述が繰り返されるので、より短くする方法を知りたいです。
  • マクロを使ってシート2~6のデータをシート1に転記したいです。シート2~6は列構成が同じで、行数が異なります。現在の記述は繰り返されているので、より短い記述方法について教えてください。
  • マクロを利用してシート2~6のデータをシート1に転記したいです。シート2~6は同じ列構成で、行数が異なるため、同じ記述が繰り返されています。もっと短く記述する方法を教えてください。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

#1,3です。誤解しておりましたが、シート1のA1から貼り付けて良いのですね。 どこをいじれば良いか、質問者様ならお分かりになると思いますが、 シート1をまっさらにして良いのなら、冗長なところを除いて下記でいけると思います。 Sub データ更新() Dim sh As Worksheet Dim destRange As Range, srcRange As Range With Sheets("シート1") .Cells.Clear Set destRange = .Cells(1) End With For Each sh In ActiveWorkbook.Worksheets Select Case sh.Name Case "シート2" Set srcRange = sh.Range("A1").CurrentRegion srcRange.Copy destRange Set destRange = destRange.End(xlDown).Offset(1, 0) Case "シート3", "シート4", "シート5", "シート6" Set srcRange = sh.Range("A1").CurrentRegion Set srcRange = Intersect(srcRange, srcRange.Offset(1, 0)) srcRange.Copy destRange Set destRange = destRange.End(xlDown).Offset(1, 0) Case Else '何もしない End Select Next sh End Sub

gx9wx
質問者

お礼

何度も何度もすいませんでした。 説明が悪くてすいませんでした。 >シート1のA1から貼り付けて良いのですね。 はいそうです。 1行目は項目行なんです。 ですからシート1は一旦全部クリアしてまっさらにして シート2は全行を シート1の1行目から貼付。 これで1行目がまた項目行になります。 でシート3~6はもう項目行は不要なので 2行目~最終行を 貼り付けていきます。 今回の記述で思ったとおりに動きました。 またシート名を変更して他にも流用が可能です。 どうもありがとうございました。

その他の回答 (4)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

NO2です。 >シート2をみかんに変更するだけで動くのでしょうか?  ⇒シート名を拠り所にしているので動きません。   前提として、シート構成が左から「シート1」→「みかん」~「パイン」(この部分は任意)→「その他シート」順ならば以下のコードで可能です。 Sub シート結合() Application.ScreenUpdating = False Sheets(1).Cells.Clear Sheets(2).Range("1:1").Copy Sheets(1).Range("A1") For i = 2 To 6 With Sheets(i) 最終行 = .Cells(Rows.Count, 1).End(xlUp).Row 最終列 = .Cells(1, Columns.Count).End(xlToLeft).Column If 最終行 >= 2 Then 開始行 = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row + 1 .Activate .Range(Cells(2, 1), Cells(最終行, 最終列)).Copy _ Sheets("シート1").Cells(開始行, 1) End If End With Next Sheets(1).Activate Range("A1").Select Application.ScreenUpdating = True End Sub

gx9wx
質問者

お礼

思ったとおりできました。 どうもありがとうございました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

#1です。コードをご覧になれば分かると存じますので、シート名をお好きな様に変更してお使い下さい。 Sub データ更新3() Dim sh As Worksheet Dim destRange As Range, srcRange As Range With Sheets("シート1") If .Range("A2").Value = "" Then Set destRange = .Range("A2") Else Set destRange = .Range(.Range("A2"), .Range("A2").End(xlToRight)) Set destRange = .Range(destRange, destRange.End(xlDown)) destRange.ClearContents Set destRange = destRange.Cells(1) End If End With For Each sh In ActiveWorkbook.Worksheets Select Case sh.Name Case "シート2" Set srcRange = sh.Range("A1").CurrentRegion srcRange.Copy destRange Set destRange = destRange.End(xlDown).Offset(1, 0) Case "シート3", "シート4", "シート5", "シート6" Set srcRange = sh.Range("A1").CurrentRegion Set srcRange = Intersect(srcRange, srcRange.Offset(1, 0)) srcRange.Copy destRange Set destRange = destRange.End(xlDown).Offset(1, 0) Case Else '何もしない End Select Next sh End Sub

gx9wx
質問者

お礼

ありがとうございます。 思ったとおり動きました。 ただ、 シート2は1行目から最終行を シート1の1行目から転記、 シート3~6は2行目から最終行を シート1の最終行(前回の転記後の最終行)から転記なのですが 一番最初の シート2をシート1に転記する所で シート1の2行目から転記されています。 この時点でシート1の1行目が空白です。 よって転記完了時(シート2~6までが転記された状態) シート1の1行目が空白行になっています。 記述のどこを修正していいかよく分かりません。 申し訳ありません。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 マクロ記録のコードは操作をシリアルに記録しているだけですから短くするのは難しい。 サンプルですが、以下のコードを標準モジュールに貼り付けてお試しください。 Sub シート結合() Application.ScreenUpdating = False Sheets("シート1").Cells.Clear Sheets("シート2").Range("1:1").Copy Sheets("シート1").Range("A1") For i = 2 To 6 With Sheets("シート" & Application.Dbcs(i)) 最終行 = .Cells(Rows.Count, 1).End(xlUp).Row 最終列 = .Cells(1, Columns.Count).End(xlToLeft).Column If 最終行 >= 2 Then 開始行 = Sheets("シート1").Cells(Rows.Count, 1).End(xlUp).Row + 1 .Activate .Range(Cells(2, 1), Cells(最終行, 最終列)).Copy _ Sheets("シート1").Cells(開始行, 1) End If End With Next Sheets("シート1").Activate Range("A1").Select Application.ScreenUpdating = True End Sub

gx9wx
質問者

お礼

ありがとうございました。 申し訳ありません。 シート2~6ですが シート名は変更されていました。 シート2:みかん シート3:いちご シート3:りんご シート4:バナナ シート5:パイン という感じです。 記述の中には シート1とシート2しか出ていませんが シート2をみかんに変更するだけで動くのでしょうか?

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

短さを狙ってやってみました。アクティブワークブックには、シート1~6しか存在しない事を前提にしています。 (というか、処理対象外のシートが存在しない事を前提にしています) もっと分かり易い回答が、他の方からあると存じます。 Sub データ更新2() Dim sh As Worksheet Dim destRange As Range, srcRange As Range With Sheets("シート1") If .Range("A2") = "" Then Set destRange = .Range("A2") Else Set destRange = .Range(.Range("A2"), .Range("A2").End(xlToRight)) Set destRange = .Range(destRange, destRange.End(xlDown)) destRange.ClearContents Set destRange = destRange.Cells(1) End If End With For Each sh In ActiveWorkbook.Worksheets If sh.Name <> "シート1" Then Set srcRange = sh.Range("A1").CurrentRegion If sh.Name <> "シート2" Then Set srcRange = Intersect(srcRange, srcRange.Offset(1, 0)) srcRange.Copy destRange Set destRange = destRange.End(xlDown).Offset(1, 0) End If Next sh End Sub

gx9wx
質問者

お礼

>短さを狙ってやってみました。 >アクティブワークブックには、シート1~6しか存在しない事を前提にしています。 >(というか、処理対象外のシートが存在しない事を前提にしています) 申し訳有りません。 シートは1から10まであります。 その中のシート2~6をシート1に転記したいです。 どうもありがとうございました。

関連するQ&A