• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAの相対参照について)

Excel VBAの相対参照とは?

このQ&Aのポイント
  • Excelでの相対参照について説明します
  • VBAコードで使用される相対参照の記述方法について解説します
  • 質問者は相対参照の記述について疑問を持っています

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

質問にある  ActiveCell.Range("A1:F1").Select  ActiveCell.Offset(2, 0).Range("A1").Select  の意味は、  ActiveCell.Offset(0, 0).Range("A1:F1").Select  ActiveCell.Offset(2, 0).Range("A1").Select  と同値です。 こうすると一貫性が見えると思います。 相対参照で記録したため、最初のアクティブセルを基準にしてマクロが記録されます。 『ActiveCell.Range("A1:F1").Select』は 『ActiveCell.Offset(0, 0).Range("A1:F1").Select』のことで   ActiveCell(最初に選択していたセル)と   行、列が同じ位置<Offset(0, 0)>を基点にして   1行、6列分のセル範囲<Range("A1:F1")>を選択<Select>。 『ActiveCell.Offset(2, 0).Range("A1").Select』は   ActiveCell(最初に選択していたセル)から   行方向に2つ下がり、列は同じ位置<Offset(2, 0)>を基点にして   その1つのセル<Range("A1")>を選択<Select> の意味になります。 Offsetで原点移動して、そこを原点としてRangeを使っているわけです。 従って、このマクロは、選択したセルを基点にして、横6個のセルに色を付け、最初の位置から2つ下に選択位置を移すマクロになるわけです。 説明になったでしょうか。

MRD
質問者

補足

nishi6さん、丁寧なご説明ありがとうございます。 つまり、原点A1(または、A1:F1)をOffset(a,b)すると 原点をある意味無効(Offset)して、a行、b列分移動した セルを原点にするという解釈でよろしいでしょうか。 ただ、もう一つ質問があります。僕の場合はA3を選択後 ツール→マクロ→新しいマクロを実行し、質問の1.からの作業を 記録しました。そして、1.の操作はA3:F3を選択しています。 記述としてActiveCell.Range("A3:F3").Select になるならわかるのですが、なぜ、ActiveCell.Range("A1:F1").Select となるのでしょうか ActiveCell.Offset(2, 0).Range("A1").Selectも同様です。 ActiveCell.Offset(2, 0).Range("A3").Selectなら わかります。実際にマクロ実行後はA5がアクティブになります。 ActiveCell.Offset(2, 0).Range("A1").Selectであれば A3がアクティブになるような気がするのですが。 ちんぷんかんぷんな質問だったらすみません。 もし、ご存知であればまた教えて頂けますでしょうかm(__)m   

その他の回答 (1)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

>a行、b列分移動したセルを原点にするという解釈でよろしいでしょうか。 そうですね。ある場所から、『a行、b列分移動したセルを基準にして』と考えることが『相対』でしょう。 ActiveCell、ActiveCell.Offset(a, b)のどちらにしろ、そこを基点にしてと考えればいいでしょう。 >なぜ、ActiveCell.Range("A1:F1").Select となるのでしょうか 回答はご自分で『僕の場合はA3を選択後』と書いておられるように、A3を選択しているため、 原点はA3に動き(相対参照のため)、ActiveCell=A3になっており、相対参照で記録しているので 『.Range("A1:F1").Select』になっているわけです。 >ActiveCell.Offset(2, 0).Range("A1").Selectであれば >A3がアクティブになるような気がするのですが。 .ColorIndex = 6 を行った時のセル選択の状態は、A3を基点にF3まで選択された状態です。 その時、A3はB3からF3とは違った色をしていませんか。.ColorIndex = 6 を行った後でもActiveCell=A3のままです。 従って、A5を選ぶには、2つ下に下がる、ActiveCell.Offset(2, 0).Range("A1").Selectになるわけです。

関連するQ&A

専門家に質問してみよう