dポイントプレゼントキャンペーン実施中!

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")

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

A 回答 (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


とかも出来ますが。
    • good
    • 0
この回答へのお礼

ありがとうございます!

> 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

変数で範囲の指定?出来ますよ。


質問の答えではないですが、たとえばこんな感じ。

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
    • good
    • 0
この回答へのお礼

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

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

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

ありがとうございます。

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

お礼日時:2004/04/27 12:59

こんにちは。

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
    • good
    • 0
この回答へのお礼

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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!