- ベストアンサー
複数シートの選択範囲を一枚のシートに貼り付ける方法
- Excel2007使用のマクロ初心者です。複数シートのセルB29からBQ60までのセル範囲を「計算シート」の一枚に右列方向に順次貼りつける方法を教えてください。
- 現在のコードでは不要な部分も貼り付けてしまっているため、セル範囲をB29からI60までとBM29からBM60までの2箇所を、「計算シート」に右列方向に貼り付けたいです。修正する方法や別の方法があれば教えてください。
- 修正方法としては、まず「計算シート」の一番右の列に作業用の列を追加しておきます。次に、ループを使って各シートの指定範囲をコピーし、作業用の列に順次貼り付けます。最後に、作業用の列から不要な部分を削除し、必要な部分だけを残すように修正します。別の方法としては、セル範囲を指定する方法ではなく、列や行の範囲を指定してコピーするという方法もあります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
★印の部分の処理を2回繰り返せばいいだけです。 Sub 計算表の一括複写() Application.ScreenUpdating = False Dim list, SheetName ActiveSheet.Unprotect Const EXCEPT_NAME = " 年月管理 最新明細 記録帳" Worksheets("計算").Activate Rows("2:33").Select Selection.Delete Shift:=xlUp Dim k As Long Dim ws As Worksheet Set ws = Worksheets("計算") Application.DisplayAlerts = False On Error Resume Next For k = 1 To Worksheets.Count - 8 If Worksheets(k).Name <> "計算" Then '★ Range(Worksheets(k).Cells(29, "B"), Worksheets(k).Cells(60, "I")).Copy ws.Cells(2, Columns.Count).End(xlToLeft).Offset(, 1).Select Selection.PasteSpecial Paste:=xlPasteValues ’★ Range(Worksheets(k).Cells(29, "BM"), Worksheets(k).Cells(60, "BM")).Copy ws.Cells(2, Columns.Count).End(xlToLeft).Offset(, 1).Select Selection.PasteSpecial Paste:=xlPasteValues End If Next k Application.CutCopyMode = False 空白列の削除 End Sub ★の書き方だと長すぎるので、 Worksheets(k).Range("B29:I60").Copy ws.Cells(2, Columns.Count).End(xlToLeft).Offset(, 1).PasteSpecial Paste:=xlPasteValues Worksheets(k).Range("BM29:BM60").Copy ws.Cells(2, Columns.Count).End(xlToLeft).Offset(, 1).PasteSpecial Paste:=xlPasteValues の方がわかりやすく、すっきりします。
お礼
ありがとうございました。早速やってみたら完璧に、しかも軽くなった分、肩もこらずにすいすいできました。本当に感謝もうしあげます。