• ベストアンサー

コピーするセルの範囲を指定する方法

複数のシートを1枚にまとめたいのですが、各シートの中身が画像のように、空欄を含みます。 以下のような特徴があります。 ・ A1には必ず商品名が入力されています ・ 行数はシートによって異なります ・ 列数はM列までの固定です ・ 最終行を調べるにはJ列で判断ができます ・ この画像の例では、A1からM20までの範囲をコピーしたいです エクセルの知識がないので、ネットで調べながらいろいろ試してみましたが、コピーをする範囲の選択ができません。 シート1枚にまとめる方法はだいたい理解できましたので、上記のようなセルの範囲を指定する方法を教えて下さい。 どうぞ宜しくお願いします。

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.4

最終行を判別するのはJ列で、貼り付け開始位置はA列なので、 Cells(ActiveSheet.Rows.Count,1).End(xlUp).Offset(1).Select だと、A列で最終行を判別してしまいます。 Range("A" & Range("J" & Rows.Count).End(xlUp).Row).Offset(1).Select と記述すべきです。 If intLoop = 2 Then Range("A1").Select Else Cells(ActiveSheet.Rows.Count,1).End(xlUp).Offset(1).Select End If を以下の様に訂正 If intLoop = 2 Then Range("A1").Select Else Range("A" & Range("J" & Rows.Count).End(xlUp).Row).Offset(1).Select End If

maokongreen
質問者

お礼

完全にパニクっていましたが、冷静になって修正しました。 いろいろ間違っていましたが、お蔭様で教えていただいた部分を参考にして、ちゃんと動くようになりました。 ありがとうございました。 マクロは昨日、必要に迫られて初めてネットで検索をして勉強したのですがなかなか面白そうですね。 ちゃんと腰を据えて勉強をしようと思います。 どうもありがとうございました。

maokongreen
質問者

補足

何度も教えていただいてありがとうございます&すみません。 時間がなくて焦ってしまい、頭がパニクっているのですが 下記のコードで動かしたら、今度はまとめ用のシートは空白になってしまいました。 ----------------------------------------------------- Sub MergeSheets() Dim intLoop As Integer Application.ScreenUpdating = False Worksheets.Add before:=Worksheets(1), Count:=1 For intLoop = 2 To Worksheets.Count Worksheets(intLoop).Select Range("A" & Range("J" & Rows.Count).End(xlUp).Row).Offset(1).Select Selection.Copy Worksheets(1).Select If intLoop = 2 Then Range("A1").Select Else Range("A" & Range("J" & Rows.Count).End(xlUp).Row).Offset(1).Select End If Next intLoop Application.CutCopyMode = False Worksheets.Select Range("A1").Select Worksheets(1).Select Application.ScreenUpdating = True MsgBox "「" & Worksheets(1).Name & "」に全ワークシートのデータをまとめました。" End Sub ----------------------------------------------------- お忙しいこととは思いますが、またお時間がございましたら引き続きご指導をお願いします。 m(__)m

その他の回答 (3)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.3

マクロだったら、こんな感じでいいかと思います。 Range("A1:M" & Range("J" & Rows.Count).End(xlUp).Row).Copy

maokongreen
質問者

補足

ありがとうございます。 下記のコードに教えていただいた範囲選択を挿入して動かしてみたところ、まとめ用のシートに1行目だけが統合されました。 --------------------------------------------------------- Sub MergeSheets() Dim intLoop As Integer '画面更新の停止 Application.ScreenUpdating = False '先頭にワークシートを1枚追加 Worksheets.Add before:=Worksheets(1), Count:=1 For intLoop = 2 To Worksheets.Count '元データを選択してコピー Worksheets(intLoop).Select Range("A1").CurrentRegion.Select Range("A1:M" & Range("J" & Rows.Count).End(xlUp).Row).Copy '先頭のワークシートに貼り付け Worksheets(1).Select If intLoop = 2 Then Range("A1").Select Else Cells(ActiveSheet.Rows.Count,1).End(xlUp).Offset(1).Select End If ActiveSheet.Paste Next intLoop 'コピーモードを解除して全シートのA1セルを選択 Application.CutCopyMode = False Worksheets.Select Range("A1").Select Worksheets(1).Select '画面更新停止の解除 Application.ScreenUpdating = True '完了メッセージ MsgBox "「" & Worksheets(1).Name & "」に全ワークシートのデータをまとめました。" End Sub --------------------------------------------------------- 1枚にまとめる部分ですが、やはり理解できていません(汗) おかしい点を教えていただけないでしょうか。 どうぞ宜しくお願い致します。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

数式のタブ→名前の定義で、名前に例えば「範囲」、数式に「=OFFSET(!$A$1,,,COUNTA(!$J$:$J$),13)」の様に入れ、OK 各シート、数式バーの左横の「名前ボックス」に、直接「範囲」と入力、Enterで必要範囲を範囲選択できます。

  • denbee
  • ベストアンサー率28% (192/671)
回答No.1

単純に写真のA1からM20を選択したいのでしたら、 A1セルを選択した後にctrl+Shift+Endキーを押すと選択してくれます。

maokongreen
質問者

補足

すみません、大事なことを書き忘れていました。 マクロでの範囲指定の方法でした。 お時間がございましたら、引き続きご指導宜しくお願いします。