自動記録されたコードを理解し整理する。

記録されたコードを理解しながら、整理してみます。どの行は何の操作で記録されたのかを思い出しながら見て下さい。



コードの理解のために1行ずつ説明コメントを入れてみます。
行の先頭に「'」を入れるとそこから右はコメントとして扱われ、緑色の文字となり実際のマクロ動作とは関係なくなります。


'***************************************************************************************************
'   一連番号100件                                                   Module1(Module)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'03/06/23(1.00)新規作成
'***************************************************************************************************
Option Explicit

'***************************************************************************************************
'   ■■■ サンプルマクロ ■■■
'***************************************************************************************************
'* 処理名 :一連番号100件
'* 機能  :一連番号100件
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月23日
'* 作成者 :井上 治
'* 更新日 :2003年06月23日
'* 更新者 :井上 治
'* 機能説明:A列2行目から100件分の一連番号を生成します。
'* 注意事項:
'***************************************************************************************************
Sub 一連番号100件()
    '-----------------------------------------------------------------------------------------------
    ' A2セルを選択
    Range("A2").Select
    ' 選択されたセルに「1」を入力
    ActiveCell.FormulaR1C1 = "1"
    ' A3セルを選択
    Range("A3").Select
    ' 選択されたセルに「2」を入力
    ActiveCell.FormulaR1C1 = "2"
    ' A4セルを選択
    Range("A4").Select
    ' 選択されたセルに「3」を入力
    ActiveCell.FormulaR1C1 = "3"
    ' A2からA4セルを選択
    Range("A2:A4").Select
    ' 選択範囲の右下の+マークを下へ101行までドラッグ(連続データ作成)
    Selection.AutoFill Destination:=Range("A2:A101"), Type:=xlFillDefault
    ' A2からA101までを選択(上記ドラッグの結果)
    Range("A2:A101").Select
    ' A1セルを選択
    Range("A1").Select
End Sub

'------------------------------------------<< End of Source >>--------------------------------------

ソースコードの各行の上に行を挿入(上の行の末尾で改行する)してコメントを追加します。
モジュールやプロシージャのタイトルコメントも付けると、後から見た時にわかりやすいです。
コメントは自動記録でないプログラミングではとても重要で、ソースコードが細かい記述であっても「何をやっているのか」を日本語で説明する重要なドキュメントになります。

意味が理解できたら「整理」します。
ここからは、多少VBAの学習を含めた作業になりますが、 「自動記録」で作成されたコードは実際問題、余分な記述が多く含まれてしまうので検証しながら「整理」して下さい。
例えば、


    ' A2セルを選択
    Range("A2").Select
    ' 選択されたセルに「1」を入力
    ActiveCell.FormulaR1C1 = "1"

これだと「A2セルを選択」と「選択されたセルに「1」を入力」に分断されています。 実際の作業動作が2アクションに分かれているのでこのようになるのですが、セルに値を入れるのは実際には1行で記述できることです。


    ' A2セルに「1(数値)」を入力
    Range("A2").Value = 1

これで良いのです。
何も学んでいなければこれも解らないわけですが、入門編のテキストを端から学ぶのではなくても、現在必要な部分を学んでいって「順に紐付けていく」という方法でも実効性がある学習ができます。
これは他のコンピュータ言語でも同じですが、VBAが「異質」なのは「自動記録」のマクロには他のコンピュータ言語で先頭に学ぶ要素が出てこないことです。
つまり、処理を考えて作成する「ロジック」ではなく、あくまでも「手続き記録」なんだということを理解しておく必要があります。 本来は「定数・変数」であったり、処理手続きであれば「判断・分岐・繰り返し」というどのコンピュータ言語でも当たり前のことを基礎的に学ぶのですが、 「自動記録」で作成されたコードにはこれらの要素は全くないのに「実際に動作するプログラム」にもなってしまうということがあります。

さて、このサンプルで「Range」に使った「Valueプロパティ」と「FormulaR1C1プロパティ」が それぞれ何を意味しているのか解りましたか? 今ではネットで検索すればいくらでも解説してくれるわけですから、解らない用語は必ず調べて下さい。

Valueプロパティ」はそのままで「値」ですが、「FormulaR1C1プロパティ」は「数式(R1C1参照形式)」です。 マクロの記録ではその時にセットする値の種類で「Valueプロパティ」と「FormulaR1C1プロパティ」が使い分けられないのは充分に想像できるわけですから、 数式をセットすることのマクロの記録もあるわけで「FormulaR1C1プロパティ」に統一して動作するようにして、先頭に「=」がなければ値と見なすように 「FormulaR1C1プロパティ」の機能を調整したものと想像できます。
試していただければ判りますがセルに対する「Valueプロパティ」はマクロの記録では一切登場しません。

説明の話がそれましたが、あと、不要なセル選択の記述も削除してしまいます。
Selectメソッド」はセルの選択動作ですが、セル選択が記述上になければセルの選択位置はこのマクロの記述で移動することはありません。

まとめてしまうとこのようにできるでしょう。


'***************************************************************************************************
'   一連番号100件                                                   Module1(Module)
'
'   作成者:井上治  URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
'変更日付 Rev  変更履歴内容------------------------------------------------------------------------>
'03/06/23(1.00)新規作成
'***************************************************************************************************
Option Explicit

'***************************************************************************************************
'   ■■■ サンプルマクロ ■■■
'***************************************************************************************************
'* 処理名 :一連番号100件
'* 機能  :一連番号100件
'---------------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数  :(なし)
'---------------------------------------------------------------------------------------------------
'* 作成日 :2003年06月23日
'* 作成者 :井上 治
'* 更新日 :2003年06月23日
'* 更新者 :井上 治
'* 機能説明:A列2行目から100件分の一連番号を生成します。
'* 注意事項:
'***************************************************************************************************
Sub 一連番号100件()
    '-----------------------------------------------------------------------------------------------
    ' A2~A4セルに連番を入力
    Range("A2").Value = 1
    Range("A3").Value = 2
    Range("A4").Value = 3
    ' A2~A4セルを101行まで連続データ作成
    Range("A2:A4").AutoFill Destination:=Range("A2:A101"), Type:=xlFillDefault
End Sub

'------------------------------------------<< End of Source >>--------------------------------------

このように実質4行で済んでしまい、やっていることは2種類のことだけになります。