• ベストアンサー

エクセル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") のような式で、行数を変数にする場合です。 よろしくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.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 とかも出来ますが。

AQUALINE
質問者

お礼

ありがとうございます! > Rangeの中のCellsにもちゃんとシートオブジェクトを付けておいて下さい。 はい、ご親切にありがとうございます。 Range(Sh2.Cells(n, 1), Sh2.Cells(n, 7)).Value = Range(Sh1.Cells(i, 1), Sh1.Cells(i, 7)).Value これでできました。

その他の回答 (3)

回答No.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
AQUALINE
質問者

お礼

ありがとうございます! おかげさまでできました。 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)
回答No.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

AQUALINE
質問者

お礼

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

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.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

AQUALINE
質問者

お礼

早速ありがとうございました。 以下のマクロで期待通りの動きになりました。 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 今回はこれで解決なのですが、後学のため教えてください。範囲の場合は直接変数で範囲は指定できないという理解でよろしいのでしょうか?

関連するQ&A

  • excel vbaでリストの範囲設定

    よろしくおねがいします。 Sub 科目自動入力() Sheets("出納帳テンプレート").Select Application.ScreenUpdating = False 'ww列最終行取得 Dim vv As Long ' Sheets("科目シート").Select vv = Sheets("科目シート").Range("v" & Rows.Count).End(xlUp).Row Sheets("出納帳テンプレート").Select 'B列最終行取得 Dim aa As Long '式をフィルダウン aa = Range("B" & Rows.Count).End(xlUp).Row Range("H6").AutoFill Destination:=Range("H6:" & "H" & aa + 100), Type:=xlFillDefault '開始行設定 Dim a As Integer a = 6 kList = Worksheets("科目シート").Range("U2:V127") 'D列「月」欄が空白になるまで繰り返す '一覧に空白が出るか、一致する項目があるまで繰り返す Do Until Cells(a, 4).Value = "" For i = 1 To UBound(kList) If kList(i, 1) = "" Then Exit For '空白だったら抜ける If Cells(a, 7) <> "" Then Exit For 'すでに科目が入力されていれば抜ける If Cells(a, 4).Value Like "*" & kList(i, 1) & "*" Then Cells(a, 7).Value = kList(i, 2) Exit For End If Next i a = a + 1 Loop End sub このようなマクロを組んでいてうまく動作しております。 科目シートにリストがあり 現在はリストをkList = Worksheets("科目シート").Range("U2:V127") と範囲決め打ちしています。 これを範囲可変にしてみようと考えてみたのですが、 kList = Worksheets("科目シート").Range(Cells(2, "U"), Cells(vv, "V")) としても実行時エラー 1004と出てうまくいきません。 ちなみに開始セルは「U2」で変わりません。 終点セルを変数vvで表現したいです。 どうかよろしくお願いします。

  • エクセル マクロ 抽出

    教えてください。 ○と記入されたセルを参照して、一つ上のセル・A列にある同じ行のセル・ 9行目にある同じ列のセルを抽出しようとしています。 下記の通り入力すると 行数=値.Rowでエラーが出たしまいました。 試行錯誤頑張りましたが解決できそうにありませんのでお力を貸して頂けないでしょうか。 Sub 抽出() Dim i, 行数, 列数 As Long Dim 値 As Range i = 0 行数 = 値.Row 列数 = 値.Column For Each 値 In Sheets("sheet1").Range("C12:R171") If 値.Value = "○" Then i = i + 1 With Sheets("sheet2") .Cells(i, 3).Value = Sheets("sheet1").Cells(行数, 1).Value .Cells(i, 4).Value = Sheets("sheet1").Cells(9, 列数).Value .Cells(i, 5).Value = 値.Offset(-1, 0).Value End With End If Next End Sub

  • Function 構文のなかに変数をいれたい(VBA)

    お願いします。 エクセルVBAにて 下記のようなFunction構文内に変数を設定する方法を 教えてください。 この中で k以外にも a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27") この変数を扱いたいのですが。 もしかして他にもfunction構文が必要でしょうか。 Function data(k As Double) Dim sum As Double Dim ct As Integer Dim keisu As Integer Dim a As Double Dim b As Double a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27")  以下 略

  • EXCEL VBAの配列でわかりません。

    こんなコードがあるのですが、最後の他のシート(作業中シート)に書き込もうとするとエラーになってしまいます。”Sheets("作業中").”を抜くと同じシートに結果は返ってくるのですが…。コードの内容は、ある範囲のある列から空白ではないセルを探し出してその行のデータを配列で汲み取り、他のシートに一括で洗い出すというものです。 Sub 作業中() Dim myRow As Long Dim Data As Variant Dim WC() As Variant Dim WCE() As Variant myRow = Range("H1").CurrentRegion.Rows.Count Data = Range("H1:M" & myRow).Value For i = 1 To myRow If Data(i, 5) <> "" Then a = a + 1 Else b = b + 1 End If Next ReDim WC(a) ReDim WCE(b) c = 0 d = 0 For i = 1 To myRow If Data(i, 5) <> "" Then WC(c) = Range("H" & i & ":K" & i).Value c = c + 1 Else WCE(d) = Range(Cells(i, 8), Cells(i, 11)).Value d = d + 1 End If Next For i = 0 To a Range(Cells(i + 1, 15), Cells(i + 1, 18)).Value = WC(i) Next For i = 0 To b Range(Cells(i + 1, 19), Cells(i + 1, 22)).Value = WCE(i) Next e = Range(Cells(1, 15), Cells(a, 18)).Value Sheets("作業中").Range(Cells(1, 1), Cells(a, 4)).Value = e End Sub ちなみに同じシートから↓のコードを実行するとうまくいきます。 なぜ~??わからな~い??おしえてくださーい!! Sub test() Dim a As Variant a = Range("H1:K4") Sheets("作業中").Range("N1:Q4") = a End Sub

  • 再:(できる方)エクセルVBA印刷済を印刷しない

    リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。 リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないように したいです。 例)10:00 1~3を入力/1~3を印刷済    11:00 4~6を入力/4~6を印刷する ※10:00の1~3hは再度印刷しないようにする ■したいこと 一度印刷した内容もリスト上にあれば、再度印刷されるので、印刷済フラグをたてて、 次回印刷は印刷済フラグをチェックし、再度印刷されないようにしたい ※現マクロは下記にしるしています。(モジュール1) ※画像に関連する2つのシートを添付しています 上部:データ入力 下部:問合せ回答一覧 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 流し込み印刷() Sheets("データ入力").Select Dim mylastRow As Long '最終行を格納する変数 Dim myLastCol As Integer '最終列を格納する変数 Dim myLastCell As String '最終セルを設定する変数 With ActiveSheet.UsedRange '対象はアクティブシートの使用中のセル '最終行の行番号 mylastRow = .Rows(.Rows.Count).Row '最終列の列番号 myLastCol = .Columns(.Columns.Count).Column End With Dim i As Integer For i = 7 To mylastRow '1 Sheets("問合せ回答一覧").Range("F3:J3") = Sheets("データ入力").Cells(i, 1).Value '2 Sheets("問合せ回答一覧").Range("F4:J4") = Sheets("データ入力").Cells(i, 2).Value '3 Sheets("問合せ回答一覧").Range("F5:J5") = Sheets("データ入力").Cells(i, 3).Value '4 Sheets("問合せ回答一覧").Range("H8:V8") = Sheets("データ入力").Cells(i, 4).Value '5 Sheets("問合せ回答一覧").Range("H9:V9") = Sheets("データ入力").Cells(i, 5).Value '6 Sheets("問合せ回答一覧").Range("H10:V10") = Sheets("データ入力").Cells(i, 6).Value '7 Sheets("問合せ回答一覧").Range("H11:V11") = Sheets("データ入力").Cells(i, 7).Value '8 Sheets("問合せ回答一覧").Range("H12:V12") = Sheets("データ入力").Cells(i, 8).Value '9 Sheets("問合せ回答一覧").Range("H13:V13") = Sheets("データ入力").Cells(i, 9).Value '10 Sheets("問合せ回答一覧").Range("H14:V14") = Sheets("データ入力").Cells(i, 10).Value '11 Sheets("問合せ回答一覧").Range("H15:V15") = Sheets("データ入力").Cells(i, 11).Value '12 Sheets("問合せ回答一覧").Range("H16:V16") = Sheets("データ入力").Cells(i, 12).Value '13 Sheets("問合せ回答一覧").Range("H17:V17") = Sheets("データ入力").Cells(i, 13).Value Sheets("問合せ回答一覧").PrintOut Next i = i + 1 End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • エクセルマクロ:範囲の選択

    マクロで範囲を指定したいのですが、 dataと名づけたシートA1に例えば8という値、A2に20という値があります。 この数字は他のセルから参照する計算式になっていて再計算をするたびに変わります。 この時、C8:E20の範囲を指定したいのですが、やみくもに Dim c As Integer c = 3 'C列 Range(Cells(Sheets("data").Range("A1").Value, c), Cells(Sheets("data").Range("A2").Value, c + 2)).Select Selection.Copy などと書いてみたのですが、うまくいきません。 どのように記述すればよいか、教えてください、宜しくお願いいたします。

  • (できる方)エクセルVBA印刷済を印刷しない

    リストに追加された内容をチェックシートに差し込み印刷する運用を考えています。 リストは定期的に追加され、前回リストに追加した内容は今回の印刷は印刷しないように したいです。 例)10:00 1~3を入力/1~3を印刷済    11:00 4~6を入力/4~6を印刷する ※10:00の1~3hは再度印刷しないようにする ■したいこと 一度印刷した内容もリスト上にあれば、再度印刷されるので、印刷済フラグをたてて、 次回印刷は印刷済フラグをチェックし、再度印刷されないようにしたい ※現マクロは下記にしるしています。(モジュール1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub 流し込み印刷() Sheets("データ入力").Select Dim mylastRow As Long '最終行を格納する変数 Dim myLastCol As Integer '最終列を格納する変数 Dim myLastCell As String '最終セルを設定する変数 With ActiveSheet.UsedRange '対象はアクティブシートの使用中のセル '最終行の行番号 mylastRow = .Rows(.Rows.Count).Row '最終列の列番号 myLastCol = .Columns(.Columns.Count).Column End With Dim i As Integer For i = 7 To mylastRow '1 Sheets("問合せ回答一覧").Range("F3:J3") = Sheets("データ入力").Cells(i, 1).Value '2 Sheets("問合せ回答一覧").Range("F4:J4") = Sheets("データ入力").Cells(i, 2).Value '3 Sheets("問合せ回答一覧").Range("F5:J5") = Sheets("データ入力").Cells(i, 3).Value '4 Sheets("問合せ回答一覧").Range("H8:V8") = Sheets("データ入力").Cells(i, 4).Value '5 Sheets("問合せ回答一覧").Range("H9:V9") = Sheets("データ入力").Cells(i, 5).Value '6 Sheets("問合せ回答一覧").Range("H10:V10") = Sheets("データ入力").Cells(i, 6).Value '7 Sheets("問合せ回答一覧").Range("H11:V11") = Sheets("データ入力").Cells(i, 7).Value '8 Sheets("問合せ回答一覧").Range("H12:V12") = Sheets("データ入力").Cells(i, 8).Value '9 Sheets("問合せ回答一覧").Range("H13:V13") = Sheets("データ入力").Cells(i, 9).Value '10 Sheets("問合せ回答一覧").Range("H14:V14") = Sheets("データ入力").Cells(i, 10).Value '11 Sheets("問合せ回答一覧").Range("H15:V15") = Sheets("データ入力").Cells(i, 11).Value '12 Sheets("問合せ回答一覧").Range("H16:V16") = Sheets("データ入力").Cells(i, 12).Value '13 Sheets("問合せ回答一覧").Range("H17:V17") = Sheets("データ入力").Cells(i, 13).Value Sheets("問合せ回答一覧").PrintOut Next i = i + 1 End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • エクセルのマクロで変動する範囲にコピペ

    いつもお世話になっております。 やりたいことは、 Sheet1において計算結果A1の値を変数nでとって、 (nが1以下になることはありません) A2のデータを W2からWnまで貼り付けたいのです。 そこで以下のマクロを書いてみました。 Range("A2").Select Selection.Copy Dim i As Integer Dim n As Integer n = Val(Worksheets("Sheet1").Range("A1").Value) For i = 2 To n Cells(i, 23).Select Next ActiveSheet.Paste しかし、これでは、(nが10とすると)  W10セルにしか貼り付けられません。 正しい記述方法をご教示ください。 よろしくお願いします。

  • VBAで実行時エラー'13': がでます

    初歩の初歩ですいません。 VBAで Dim A As Integer Dim B As Integer Dim C As Integer Dim gokei As Integer For i = 8 To 70 A = Cells(i, 4).Value B = Cells(i, 5).Value C = Cells(i, 6).Value goukei = A + B + C Cells(i, 7) = goukei Next i としていますが A = Cells(i, 4).Value のところで今使っているシートだと止まってしまいます。 新規でワークシートを使って仮に数字を代入すると普通に動きます。 今使っているシートもセル内には =100 と入力して 100 と表示され セルの書式設定も数値になってるんですがどうしてでしょうか?

  • EXCEL VBA VLOOKUP 範囲を変数で

    Excel VBA で VLookup()の第2引数の範囲を行と列の数値の変数で指定したいのすが どのように記述すればよいでしょうか。 以下の式がエラーにならないように具体的に直していただけないでしょうか。 よろしくお願いします。 ----------------------------------- Dim d1 As String Dim d2 As String Dim r1 As Integer Dim r2 As Integer Dim c1 As Integer Dim c2 As Integer Dim c3 As Integer d1 = "愛知" r1 = 2 r2 = 782 c1 = 3 c2 = 5 c3 = 4 d2 = VLookup(d1, Worksheets("Sheet1").Range(Cells(r1, c1), Cells(r2, c2)), c3, False)

専門家に質問してみよう