- ベストアンサー
コピーするセルの範囲を指定する方法
- みんなの回答 (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
その他の回答 (3)
- kybo
- ベストアンサー率53% (349/647)
マクロだったら、こんな感じでいいかと思います。 Range("A1:M" & Range("J" & Rows.Count).End(xlUp).Row).Copy
補足
ありがとうございます。 下記のコードに教えていただいた範囲選択を挿入して動かしてみたところ、まとめ用のシートに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)
数式のタブ→名前の定義で、名前に例えば「範囲」、数式に「=OFFSET(!$A$1,,,COUNTA(!$J$:$J$),13)」の様に入れ、OK 各シート、数式バーの左横の「名前ボックス」に、直接「範囲」と入力、Enterで必要範囲を範囲選択できます。
- denbee
- ベストアンサー率28% (192/671)
単純に写真のA1からM20を選択したいのでしたら、 A1セルを選択した後にctrl+Shift+Endキーを押すと選択してくれます。
補足
すみません、大事なことを書き忘れていました。 マクロでの範囲指定の方法でした。 お時間がございましたら、引き続きご指導宜しくお願いします。
お礼
完全にパニクっていましたが、冷静になって修正しました。 いろいろ間違っていましたが、お蔭様で教えていただいた部分を参考にして、ちゃんと動くようになりました。 ありがとうございました。 マクロは昨日、必要に迫られて初めてネットで検索をして勉強したのですがなかなか面白そうですね。 ちゃんと腰を据えて勉強をしようと思います。 どうもありがとうございました。
補足
何度も教えていただいてありがとうございます&すみません。 時間がなくて焦ってしまい、頭がパニクっているのですが 下記のコードで動かしたら、今度はまとめ用のシートは空白になってしまいました。 ----------------------------------------------------- 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