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列めを選択」と読めそうですが、
相対参照ならではの記述があるのでしょう。
ご存知の方、教え下さい。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

質問にある


 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

>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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAutoCad2010で、A1枠1/100の図をA3用紙に印刷する方法を教えてください。

初心者です。はじめまして、この教えてgooにも初心者です。
AutoCad2010で、A1枠1/100の図をA3用紙に印刷する方法を教えてください。
多分、印刷設定で用紙をA3にしてフィットのところを カスタム で 1mm : 200mm
とすればいいのでしょうか?
A3用紙に印刷してから、コピー機でA1へ拡大し、スケールアップが出来たら幸いなのですが
どうぞ、宜しくお願い致します。
また、縮尺の違うものを並べたいのですが、モデル空間で1mのものと倍の尺度で2mに拡大したものを配置して寸法線の寸法値をどちらも同じ表示の 1000 に自動的に書かせたい場合はどうしたらよいのでしょうか。
スクールに通って基本を勉強しただけなので、応用が全くわからず困っています。
どうぞよろしくお願い致します。

Aベストアンサー

プリンターで印刷用紙サイズをA3にする

QRange("B19:T19").Select

よろしくお願いします

Private Sub Worksheet_Change(ByVal Target As Range)
内のマクロで
Range("B19:T19").Selectの
19をTarget.Rowで表現すると

Range("B19:T19").Selectをどう直したらいいでしょうか?
こんな簡単なことが分かりません

どなたか教えてください

Aベストアンサー

こんばんは!

Range(Cells(Target.Row, "B"), Cells(Target.Row, "T")).Select

とか

Cells(Target.Row, "B").Resize(, 19).Select

といった感じではどうでしょうか?

※ 複数行が変化した場合(データ消去・コピー&ペースト)の場合は
最初の行だけしか選択されません。m(_ _)m

Q画像ファイルをA0かA1用紙に印刷してもらいたい

JPGタイプの画像ファイルもしくは、JPG画像を貼り付けたエクセルファイルをA0用紙かA1用紙に印刷(カラーで)したいんですが、そんなプリンタを個人で持ってるわけないので、どこかで印刷してもらえないかと思っています。どこかそういうところってないでしょうか?また、いくらくらいかかるものでしょうか?

Aベストアンサー

「大判出力」とか「出力センター」で検索するとたくさん出てきますよ。
直接持ち込まなくてもメールでDATAを送ればプリントアウトしてくれるところもあります。
ただし、商業用の機械で出力する場合、画像や原稿の形式やDATAサイズに色々制約がある場合が多いのでご注意ください。

単価は部数によって変わってくると思いますが少数なら1部あたり5000円以上を考えておいたほうがいいと思います。

Qエクセルのマクロ Range("A1").End(xlDown).rowで列を削除

A列の一番下のデータの次の行から
F列の一番下のデータの行まで削除したいのですが
Rows(" & Range("A1").End(xlDown).row+1 & ":" & Range("F1").End(xlDown).Row & ").Delete Shift:=xlUp
でうまくいきません
どうすればいいのですか?

Aベストアンサー

Rows(Range("A1").End(xlDown).Row + 1 & ":" & Range("F1").End(xlDown).Row).Delete Shift:=xlUp
でどうでしょうか。
Rows()内の最初と最後の("&~&")が不用かと…。

ちなみにxlDownだと途中に空欄があった場合、最下行は取得できません。
xlUpを使ったほうがより確実だと思いますよ。

Aend = Cells(Rows.Count, 1).End(xlUp).Row + 1
Fend = Cells(Rows.Count, 6).End(xlUp).Row
If Aend <= Fend Then Rows(Aend & ":" & Fend).Delete Shift:=xlUp

Qタイ、バンコクでA1サイズ用紙のラミネート加工

タイのバンコクで、A1サイズの用紙をラミネート加工してくれるところを探しています。
できればSukhumvitから近ければ助かります。

Kinko's のようなところが無いかと考えています。

ご存知の方がいらっしゃいましたら是非教えてください。

よろしくお願いします。

Aベストアンサー

ラミネート加工できるかどうかは分かりませんが、
Kinko'sのようなお店ならマーブンクローンの中にありますよ。

QEXCELの計算でセルA1に数字、A2に数字ではなく×をいれてA3にはA1とA2の積をいれたいのですが

×をEXCELに1と解釈させたいのです。
つまり、A1に「5」、A2に「×」をいれるとA3は「5」が入るようにしたいんです。
マトリックスをつくっているのですが、
×を「1」にしたくないんです。
ご回答お待ちしております。

Aベストアンサー

A2は×以外の場合もあるのでしょうか?
その場合は、どういう処理をするのでしょう?

A3セルに、
=IF(A2="×",A1,"")
でどうでしょうか?
 A2セルが×であれば、A1を表示し、それ以外の場合はA3セルは""、つまり何も表示しません。

先に書いたように、×以外に、○なら2倍、△なら3倍とか、A2セルの内容により変わるのなら、もっと工夫が必要です。

QA1用紙のクリップボード

こんにちは。
クリップボードについて質問させてください。

当方、A1サイズの図面を使用し仕事で検査工程を担当しております。
しかし、工場内が狭い為検査場というものを作ってもらえず、各作業場での検査となってしまいA1の図面を製品の上においたり、最悪手で持ったままの検査となってしまいます。

そのため、A1サイズのクリップボードを探しているのですが、私の検索能力ではA2までしか見つけきれませんでした。
http://item.rakuten.co.jp/p-tano/413-7801/#10075835

A1サイズのクリップボードをご存知のかたおられましたら、お教えください。
また、折りたたみ式の譜面台のようなものでもOKです。

よろしくお願いします。

Aベストアンサー

案1.
5mmベニヤで自分が使いやすい様に作る。
案2.
二つ折図面ケースを使う。
案3.
検査にはA2に縮小した図面を使う。
案4.
検査用A1を二つ折り製本し(自分で)硬い表紙をつける。
案5.
A1スチレンボードに貼っていく。
案6.
A2用ボードを2枚ジョイントして使う
案7.
図面をA2に収まる範囲にプリント範囲を変えて複数枚に分ける。

Aベストアンサー

左側に1列挿入して、その列に「1,2,3,4,5,1,2,3・・・」と縦に数字を入れます。
縦計を取りたいセルで、
=SUMIF(A1:B20,1,B1:D20) 
のように入力すると、B1,B6,B11,B16のセル計が取れます。
同様に検索条件の「1」を「2」に変えると、
B2,B7,B12,B17のセル計が取れます。

この関数の意味は
=SUMIF(範囲、検索条件、合計範囲)です。

QDENON A1SRは現在のAVアンプで言うとどの価格帯の性能?

DENON AVC-A1SR を持っているのですが、現行のDENON製品で言うとどのタイプの機種と性能が同じでしょうか?
・機能的な面(音声フォーマットとかドルビープロロジックとかいらない)はどちらでもいいのですが、
(音声)アンプの性能がどの程度進化しているか
知りたいのですが。

くそ重たい AVC-A1SRもそろそろ買い換えたいので。

Aベストアンサー

AVC-A1XV
だと思います。アンプはここ数年程度ではサラウンド以外の部分はほぼ変わっていません。 
また、部品の劣化もまたまだというところでしょう

機能的な面を求めないのでしたらそのままお使い続けるのがよろしいかと思います。 
もし下取りされるのなら私がほしいくらいです。。。。

QA1セルにAと入力すると、A2セルに3000A3セルに2000A4セルに1000と表示させたい。

A1セルに「A」と入力する1回だけで、
A2セルに「3000」
A3セルに「2000」
A4セルに「1000」
A5セルに「合計数字」を表示させたいのですが、
式をご教授願いたいです。

よろしくお願いします。

Aベストアンサー

D1:G3
A500030001000
B500300130
C1200800300
A1にA,B,Cのどれかを入れる。
A2に =VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE)と入れて、
A4まで(G-D-1列数だけの行数)式を複写する。
結果
A1がBの場合A1:A4は
B
500
300
130

A1の空白の場合に対処して
=IF(A1="","",VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE))
が良いでしょう。
(既回答とほぼ同じ式ですが、1箇所違うところがあります。)


人気Q&Aランキング

おすすめ情報