- ベストアンサー
エクセルVBAで範囲を変数で設定する方法?
Dim i As Integer For i = 1 to 50 とした場合、 セルであれば Sheets("Sheet2").Cells(i, 2).Value = Sheets("Sheet1").Cells(i, 2) のように変数を使えますが、範囲に使う場合にはどう書けばいいのでしょうか? 例えば、 Sheets("Sheet2").Range("A1:G1").Value = Sheets("Sheet1").Range("A1:G1") のような式で、行数を変数にする場合です。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>範囲の場合は直接変数で範囲は指定できないという理解で >よろしいのでしょうか? No.3の方の通りです。 なお、Rangeの中のCellsにもちゃんとシートオブジェクトを付けておいて下さい。 あと、行方向だけなら、無理やり、 For i = 1 To 50 Sheets("Sheet2").Range("A" & i & ":G" & i).Value = Sheets("Sheet1").Range("A" & i & ":G" & i) Next i とかも出来ますが。
その他の回答 (3)
- shishishishi
- ベストアンサー率39% (362/921)
変数で範囲の指定?出来ますよ。 質問の答えではないですが、たとえばこんな感じ。 Sub 変数名で範囲指定() Sheets("Sheet1").Activate 'ワークシートをアクティブにする ※1 左 = 2 '選択する範囲の左端セルの列番号 ※3 上 = 3 ' 〃 上端 〃 行番号 ※3 右 = 5 ' 〃 右端 〃 列番号 ※3 下 = 6 ' 〃 下端 〃 行番号 ※3 Range(Cells(上, 左), Cells(下, 右)).Select '指定された範囲を選択する End Sub
お礼
ありがとうございます! おかげさまでできました。 Range(Sh2.Cells(n, 1), Sh2.Cells(n, 7)).Value = Range(Sh1.Cells(i, 1), Sh1.Cells(i, 7)).Value これでできました。
- neKo_deux
- ベストアンサー率44% (5541/12319)
質問の例の場合は、それぞれの範囲の大きさが違っている場合にどうするか?が不明瞭ですので、結局はシート1の範囲かシート2の範囲いずれかでループ処理をする必要があります。 -- 一般的に、ある範囲に対して処理を行う場合、For Each...Nextを使います。 ' rngのvalueに1加算 Dim cel As Variant ' だっけ? Dim rng As Range Set rng = Sheets("Sheet1").Range("A1:C3") For Each cel In rng cel.Value = cel.Value + 1 Next cel
お礼
ありがとうございます。 sheet1のA1:G50の範囲内で、1列目が空白ではないものをsheet2に順に転記する作業です。(1列目が空白の行は飛ばす)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 Offsetプロパティを使用してはいかがですか。 For i = 1 To 50 Sheets("Sheet2").Range("A1:G1").Offset(i - 1).Value = Sheets("Sheet1").Range("A1:G1").Offset(i - 1) Next i
お礼
早速ありがとうございました。 以下のマクロで期待通りの動きになりました。 Sub test4() Set Sh1 = Sheets("Sheet1") Set Sh2 = Sheets("Sheet2") For i = 1 To 50 If Sh1.Cells(i, 1) <> "" Then Sh2.Range("A1:G1").Offset(n).Value = Sh1.Range("A1:G1").Offset(i - 1).Value n = n + 1 End If Next End Sub 今回はこれで解決なのですが、後学のため教えてください。範囲の場合は直接変数で範囲は指定できないという理解でよろしいのでしょうか?
お礼
ありがとうございます! > Rangeの中のCellsにもちゃんとシートオブジェクトを付けておいて下さい。 はい、ご親切にありがとうございます。 Range(Sh2.Cells(n, 1), Sh2.Cells(n, 7)).Value = Range(Sh1.Cells(i, 1), Sh1.Cells(i, 7)).Value これでできました。