次の方法で共有

Excel2010マクロ 「相対参照で記録」機能について教えてください。

Anonymous
2015-05-23T07:53:14+00:00

Excel2010 マクロ「相対参照で記録」機能について教えてください。

ブックを開くと特定のセル(A9)に移動するマクロを作成しています。

ネットで操作方法を検索しながら、マクロを無事に登録することが出来ました。

操作の中で[開発タブ]の[コード]グループ「相対参照で記録」というボタンを押下する場面がありました。

このボタンはどのような場面で使用するのでしょうか?

マクロの登録は初めてではないのですが、「相対参照で記録」というボタンを押下したのは初めてでした。

「相対参照で記録」というボタンを押下しないと「絶対参照で記録する」というのは分かるのですが、

「相対参照で記録」「絶対参照」で記録の使い分けが分かりません。

ブックを開くと特定のセル(A9)に移動するマクロは「絶対参照」で記録してはダメなのでしょうか?

ご回答、どうぞ宜しくお願いします。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2015-05-23T08:55:13+00:00

こんにちは。

> ブックを開くと特定のセル(A9)に移動するマクロは「絶対参照」で記録してはダメなのでしょうか?

常に同じセルへ移動するのであれば絶対参照で記述します。

【A1セルにカーソルを置いた状態で記録開始、「C4セルをクリック」】

のマクロの結果は下記になります。

  相対参照オフ: Range("C4").Select

  相対参照オン: ActiveCell.Offset(3, 2).Range("A1").Select

「相対参照で記録」のポップアップヘルプに書いてある通り、

上のマクロでは、マクロ実行時のカーソル位置がどこであってもC4セルに飛びますが、

下のマクロでは、マクロ実行時にカーソルがB3セルにあれば、B3セルを基点とした

C4セル位置(B3から下へ3&右へ2)、即ちD6セルに飛びます。

> ActiveCell.Offset(3, 2).Range("A1").Select

上記の書き方だけでなく、

Range("C4").Range("A1") や Range("E5:G10").Range("A1")

も相対参照の記述です。

最初に記述するセル(それがセル範囲であれば、その範囲の左上隅のセル)を

基点(A1セルと見立てて)として、2番目の記述で、その基点からの

相対セル位置を記述します。

実を言えば、

> Range("C4").Select

これも、

Range("A1").Range("C4").Select

「A1セルを基点としたC4セル」という相対参照のひとつとも言えます。

マクロで相対参照を利用するシーンとしては、

  シート上に、同じレイアウトの範囲が複数あり、

  その個々の範囲内は、全て同じレイアウトで、

  個々の範囲に対して行なう処理も同じ。

というものですね。

例としては、七曜暦(通常の横7×縦6の暦)や、住所シールなどが

あるでしょう。

ひとつの範囲の処理だけマクロ化しておけば、残りの範囲の処理は

基点セルを切り替えるだけで繰り返し利用できます。

A1・D1・G1・J1……を基点とした範囲で

 Range("A1").Value = ……

 Range("A3").Value = ……

 Range("C5").Value = ……

こういう同じ処理が個々の範囲で必要ならば、相対参照を利用して、

下記のようにひとまとめにしたマクロとすることができます。

Dim rng As Range

For Each rng In Range("A1,D1,G1,J1")

  With rng

    .Range("A1").Value = ……

    .Range("A3").Value = ……

    .Range("C5").Value = ……

  End With

Next

または、

Dim j As Integer

For j = 1 To 10 Step 3

  With Cells( 1, j )

    .Range("A1").Value = ……

    .Range("A3").Value = ……

    .Range("C5").Value = ……

  End With

Next

この回答は役に立ちましたか?

0 件のコメント コメントはありません

1 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2015-05-23T09:16:24+00:00

    Tsunoda様

    早速のご返信、誠にありがとうございました。

    上記説明、大変分かり易いです。

    具体例もご記入くださり、相対参照と絶対参照のイメージが明確になりました。

    今回の場合ですと、「特定のセル(A9)」と記載しましたが、

    実際は特定ではなく、ブックを開いたときにアクティブセルが、「ピボットテーブルの最終行のA1のセルを参照するマクロ」の作成でした。

    たまたま作業していたシートの「ピボットテーブルの次の行のA1」が「A9」でした。

    同様の操作を他ブックでも実行する必要があったため、絶対参照では対応出来なかったと

    Tsunoda様の回答を読んで納得いたしました。

    早々にご対応して頂いたお蔭で、すっきりした気持ちでまたマクロの操作が出来ます!!

    また不明点が出てくると思いますが、その際は引き続きどうぞ宜しくお願い致します!!

    本当に助かりました!ありがとうございます!!!

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません