- ベストアンサー
マクロの相対セル参照記録って?
エクセルで毎回同じ仕事をするもので少し前からマクロに取り組んでいます。 簡単な物しか作れませんが、確かに便利です。 操作手順を記録して行くだけの簡単なやり方しか出来ませんが(コードはよく分からない)その中で相対セル参照記録というものがありますが、これはどんな場合に使うのかよくわかりません。 私はコード、言語、モジュール等は理解できていないので編集しょうにも出来ず、毎回、削除、作り直ししています。 相対参照記録が必要になる場合とはどんな時なんでしょうか?参考書を見ても、『こんな場合に必要なんですよ』と詳しく記述されていないので意味が理解できません。やり始めたばかりなので何でもかんでも手順記録したのですが、エラーが出て再現しません。詳しい方、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
次の動作を相対と絶対で記録してみます。 1)A1を選択した状態でマクロ記録を開始 2)A5を選択 3)=SUM(A1:A4) の式を入力 4)記録終了 '--------------------------------------------------------- Sub 絶対マクロ() Range("A5").Select ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)" Range("A6").Select End Sub '--------------------------------------------------------- Sub 相対マクロ() ActiveCell.Offset(4, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select End Sub '--------------------------------------------------------- 絶対マクロを実行すると必ず同じ動作になり、汎用性がありません。 相対マクロは選択したセルから4つ下のセルに数式を入力します。 連続して実行すれば、規則性のある表などに簡単に関数を入れられます。 ループ文などを書き加えたりして、連続実行させたり出来ます。 '--------------------------------------------------------- Sub 改_相対マクロ() For i = 1 To 100 'この文と ActiveCell.Offset(4, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select Next i 'この文を加える End Sub
その他の回答 (3)
- hirohiro_2005
- ベストアンサー率0% (0/1)
マクロはキー記録で作成しているんですよね。相対参照というのはマクロ実行時においてあるカーソル場所から実行されます。例えばセル内の文字を赤にするというマクロを作成した場合、[A2]でマクロ実行すると[A2]が[A3」にカーソルがあると[A3]が赤になります。 これに対して「絶対参照」の場合は、キー記録時のセル番地が実行の対象になりますので、マクロ実行時にどこにカーソルをおいてても[A2]が赤になるということです。 めちゃくちゃくだけた回答にしてみました
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 相対参照というのは、通常、記録マクロにして出てこないもので、一般的にはVBAには出てきません。 ただ、相対参照の考え方というのは、 かならず、どの場所でも、A1 を起点として考えます。 相対参照の例: ActiveCell.Offset(-1, -1).Range("A1:D7").Select 現在の位置より、上ひとつ、左ひとつ行ったセルの番地を、起点として、A1:D7 に該当する範囲を選択する、というものです。 こういう書き方はできても、実際には使いません。ややこしくなるだけだからです。 VBAでは、「明示的」という言葉をよく用いますが、 「明示的」というのは、つまり、 絶対参照の例: Range("C4").Select 'いらない Range("B3").Select 'いらない Range("B3:E9").Select のようにして、範囲を、そのとおりに書くのがふつうです。もちろん、また、慣れてきたら、他にも書き方がありますが、記録マクロから、脱却するには、まず、こういう方法を使っていきます。 そして、絶対参照の場合は、Range("B3:E9").Select だけでよいわけだから、前の二行は余分だから削除してよいわけですね。
- gutugutu
- ベストアンサー率14% (184/1234)