[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『どうしてもセルがコピーできません』(あ)
シート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.