[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『どうしてもセルがコピーできません』(あ)
シート1のB1〜H21までデータが入っています。
それをシート2のD3:J3の行から1行飛ばしでD43:J43までコピーがしたいのですが・・・
Sub ()
Dim i As Long
Dim j As Long
For i = 1 To 21
For j = 3 To 43 Step 2
Sheets("Sheet1").Range(Cells(i, 2), Cells(i, 8)).Value = Sheets("Sheet2").Range(Cells(j, 4), Cells(j, 10)).Value
Next j
Next i
End Sub
エラーが出てできませんでした。
Range(Cells(i, 2), Cells(i, 8))←このような指定がダメだと思うのですが…
何がダメか教えてください!
(改善案もいただけたらとても幸いです)
< 使用 Excel:Excel2016、使用 OS:Windows10 >
Sheets("Sheet1").Range(Cells(i, 2), Cells(i, 8)).Value
↑こちらのCellsたちにもシートの指定が必要です。
指定がないとActivesheetのセルと解釈されます(*)ので、
Sheets("Sheet2") が仮にアクティブの場合、
Sheets("Sheet1").Range(Sheets("Sheet2").Cells(i, 2), Sheets("Sheet2").Cells(i, 8)).Value
と書いたものと解釈され、Excel君が混乱して立往生するわけです。
(*) ・標準モジュールに書いた場合です。
・シートモジュールに書いた場合は、(選択シートにかかわらず)そのシートが使われます。
With を使ったり、ワークシート変数を使ったりして、長々しくならないように工夫してください。 下記を参考にしてください。
Sub test()
Dim ws As Worksheet
Dim i As Long
Dim j As Long
Set ws = Worksheets("Sheet1")
j = 3
With Worksheets("Sheet2")
For i = 1 To 21
.Range(.Cells(j, 4), .Cells(j, 10)).Value = ws.Range(ws.Cells(i, 2), ws.Cells(i, 8)).Value
j = j + 2
Next
End With
End Sub
(γ) 2021/11/24(水) 21:55
分かりやすく教えていただき勉強になります。
本当にありがとうございました!
(あ) 2021/11/24(水) 21:58
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.