• ベストアンサー

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

マクロで範囲を指定したいのですが、 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 などと書いてみたのですが、うまくいきません。 どのように記述すればよいか、教えてください、宜しくお願いいたします。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

[.Value]を外したら動きましたよ。 Range(Cells(Sheets("data").Range("A1"), c), Cells(Sheets("data").Range("A2"), c + 2)).Select か、 Range("C" & Sheets("data").Range("A1").Value & ":E" & Sheets("data").Range("A2").Value).Select 若しくは、 Dim c As Integer Dim A1 As Long Dim A2 As Long c = 3 'C列 A1 = Sheets("data").Range("A1").Value A2 = Sheets("data").Range("A2").Value Range(Cells(A1, c), Cells(A2, c + 2)).Select

gucchi-you
質問者

お礼

ありがとうございます、2番目のやり方でうまくいきました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 特に、大きな問題はないと思いますが、他のシートから行うとエラーが出るかもしれませんね。 たとえば、以下のような初級用のコードでみて分かるように、With ステートメントで、ひとつずつオブジェクトをコンテナ(=親オブジェクトを含める)にして確認してみると良いです。 原因は、親オブジェクトが違ってしまっているからです。 Sub testSample() Dim c As Integer c = 3 'C列 With Sheets("data")  .Range(.Cells(.Range("A1").Value, c), .Cells(.Range("A2").Value, c + 2)).Copy End With 'ペースト側 With Worksheets("Sheet2")  .Select  .Range("B1").Select  .Paste End With End Sub ------------------------------------------------- それが了解したら、以下のように分かちがきして、変数を設けて書くとより分かりやすいです。Rangeオブジェクトの中で計算する場合、オブジェクトのプロパティを入れるよりも、変数にしたほうが分かりやすいです。ただし、A1,A2は、0が入るとエラーが発生しますので、たとえば、以下の場合は、If lngRow1 * lngRow2 = 0 Then Exit Sub などとすると良いです。 Sub testSample2() Dim lngRow1 As Long Dim lngRow2 As Long Dim intCol As Integer intCol = 3 'C列 With Sheets("data")  lngRow1 = .Range("A1").Value  lngRow2 = .Range("A2").Value  .Range(.Cells(lngRow1, intCol), .Cells(lngRow2, intCol + 2)).Copy _   Worksheets("Sheet2").Range("B1") 'コピー&ペースト End With End Sub

gucchi-you
質問者

お礼

Wendy02さん、いつもありがとうございます。 ご指摘の通り他のシートから引っ張ってきていることから生じたエラーのようです。 変数を定義するやり方で解決いたしました。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.3

A1とA2はどんな式なんでしょう? SUMでやってみたら上記のソースそのままで動きましたけど。

gucchi-you
質問者

お礼

ありがとうございます、シートが複数あってそこから引っ張っているのでそのあたりの問題のようでした。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

With WorkSheets("data") Range(.Cells(.Range("A1").Value, "C"), .Cells(.Range("A2").Value, "E")).Copy End With とか With WorkSheets("data") .Range("C" & .Range("A1").Value & ":E" & .Range("A2").Value).Copy End With でもよいと思います。シートが複数ある時はシートを明示しないとうまく動かなくなることがあります

gucchi-you
質問者

お礼

ありがとうございます、うまくいきました。

関連するQ&A