プロが教える店舗&オフィスのセキュリティ対策術

Excelで相対参照を勉強しようと思い、
A3を選択後
1.A3:F3を選択

2.A3:F3に黄色の網かけを設定

3.A5を選択
を相対参照で記録しました。(記録は1.~3.までです)
VBAを確認すると

Sub 罫線()

ActiveCell.Range("A1:F1").Select
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
ActiveCell.Offset(2, 0).Range("A1").Select
End Sub

という記述があったのですが、
なぜ、ActiveCell.Range("A1:F1").Selectと
ActiveCell.Offset(2, 0).Range("A1").Selectというものがあるのでしょうか。
僕は、A1:F1の選択はしていませんし、網掛け後はA5を選択しているのに
Range("A1").Selectの記述もよくわかりません。
ActiveCell.Offset(2, 0).Range("A1").Selectというのは
「選択したA1のセルから2行下、0列めを選択」と読めそうですが、
相対参照ならではの記述があるのでしょう。
ご存知の方、教え下さい。

A 回答 (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になるわけです。
    • good
    • 0

質問にある


 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つ下に選択位置を移すマクロになるわけです。

説明になったでしょうか。

この回答への補足

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
  

補足日時:2002/04/10 22:33
    • good
    • 0

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