こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル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")

のような式で、行数を変数にする場合です。
よろしくお願いします。

投稿日時 - 2004-04-27 10:42:19

QNo.842057

困ってます

質問者が選んだベストアンサー

>範囲の場合は直接変数で範囲は指定できないという理解で
>よろしいのでしょうか?
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


とかも出来ますが。

投稿日時 - 2004-04-27 13:52:55

お礼

ありがとうございます!

> Rangeの中のCellsにもちゃんとシートオブジェクトを付けておいて下さい。

はい、ご親切にありがとうございます。

Range(Sh2.Cells(n, 1), Sh2.Cells(n, 7)).Value = Range(Sh1.Cells(i, 1), Sh1.Cells(i, 7)).Value

これでできました。

投稿日時 - 2004-04-27 14:12:01

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

変数で範囲の指定?出来ますよ。
質問の答えではないですが、たとえばこんな感じ。

Sub 変数名で範囲指定()
Sheets("Sheet1").Activate 'ワークシートをアクティブにする ※1
左 = 2 '選択する範囲の左端セルの列番号 ※3
上 = 3 '   〃   上端 〃 行番号 ※3
右 = 5 '   〃   右端 〃 列番号 ※3
下 = 6 '   〃   下端 〃 行番号 ※3
Range(Cells(上, 左), Cells(下, 右)).Select '指定された範囲を選択する
End Sub

参考URL:http://www.asahi-net.or.jp/~zn3y-ngi/YNxv206.html

投稿日時 - 2004-04-27 13:04:16

お礼

ありがとうございます!
おかげさまでできました。

Range(Sh2.Cells(n, 1), Sh2.Cells(n, 7)).Value = Range(Sh1.Cells(i, 1), Sh1.Cells(i, 7)).Value

これでできました。

投稿日時 - 2004-04-27 14:09:26

ANo.2

質問の例の場合は、それぞれの範囲の大きさが違っている場合にどうするか?が不明瞭ですので、結局はシート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

投稿日時 - 2004-04-27 12:43:22

お礼

ありがとうございます。

sheet1のA1:G50の範囲内で、1列目が空白ではないものをsheet2に順に転記する作業です。(1列目が空白の行は飛ばす)

投稿日時 - 2004-04-27 12:59:15

ANo.1

こんにちは。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

投稿日時 - 2004-04-27 10:50:27

お礼

早速ありがとうございました。
以下のマクロで期待通りの動きになりました。

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

今回はこれで解決なのですが、後学のため教えてください。範囲の場合は直接変数で範囲は指定できないという理解でよろしいのでしょうか?

投稿日時 - 2004-04-27 11:20:43