• 締切済み

エクセルのVBAのコード内で指定セルを相対参照する方法をお教えください。

ActiveCell.Offset(0, 2).Range("A1:C1").Select 前記のコードは選択範囲をアクティブセルより相対参照にて指定するものですが、下表にてアクティブセルをA1として、コード内のC1に換えてA1(アクティブセル)の数値によって選択範囲とするセル数を指定するにはどうしたらよいでしょうか?(アクティブセルをA2,A3とした実行結果を2,3行のようにしたいのです)  A B C D E F 1 3 * * * 2 4 * * * *  3 2 * *

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

アクティブセルをA1として、ご提示の  ActiveCell.Offset(0, 2).Range("A1:C1").Select を実行すると、C1:E1が選択されることになり、ご質問文の*の位置にはなりませんね。 その点は、適宜修正いただくとして、 A列がアクティブセルの時に、そのセル値に応じて、選択範囲(幅=列数)を決めたいという意味と解釈しました。 Offset部は質問のコードをそのままとするなら…  ActiveCell.Offset(0, 2).Resize(1, ActiveCell.Value).Select ご質問文の例でいくと 1行目はC1:E1、2行目はC2:F2、3行目はC3:D3がそれぞれ選択されることになります。B列から選択したいのであれば、offsetの値を1にすれば宜しいかと・・・

kmcktj4
質問者

お礼

回答ありがとうございます。質問欄の表は投稿時にB列に入れたスペースが反映されなかったものです。読み解いていただきありがとうございました。 ActiveCell.Offset(0, 2).Range(Cells(1, 1), Cells(1, Cells(1, 3).Value)).Select とするとCells(1, 3).Valueの値が絶対参照のセル値で返るため、コード内での相対参照は?というお尋ねになりました。

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.2

相対参照ってのは無理かもしれませんがActiveCellの行列を得て指定する方法をとることは出来ます Dim Row As Long Dim Col As Long Row = ActiveCell.Row Col = ActiveCell.Column Range(Cells(Row, Col), Cells(Row + 2, Col)).Select

kmcktj4
質問者

お礼

回答ありがとうございます。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

質問の意味が良くわからない。 データ例の表の見方も難しい。 >アクティブセルをA2,A3とした実行結果を2,3行のようにしたいのです)  の部分 何にしろ、範囲はRange(Cells(R1,C1),Cells(R2,C2)).Select でできる。これを知らないからの質問ではないか。 R1,R2,C1,C2を数値で割り出せば仕舞い。 行のr1=ActiveCell.Rowなど 直下までならr2=r1+1 列のc2も同じ。本質問はこちらか。 易しいことを聞いているのでは。 Offsetでも出来る。 例えばA1に3 Sub test01() Range(ActiveCell.Offset(0, 1), ActiveCell.Offset(0, Range("A1"))).Select End Sub 実行すると、B1:D1を範囲指定する。

kmcktj4
質問者

お礼

回答ありがとうございます。

関連するQ&A