【VBAリファレンス】マクロ記録でVBA100マスに数値を入れる

スポンサーリンク

### 概要

Excel VBAの世界へようこそ。本記事では、Excelの「マクロ記録」機能を活用して、VBAの基本的な知識がない初心者の方でも簡単に「100マス計算」のような数値入力作業を自動化する方法を解説します。マクロ記録は、Excelの操作をそのままVBAコードに変換してくれる非常に便利な機能です。この機能を理解し使いこなすことで、日常的な繰り返し作業を劇的に効率化する第一歩を踏み出すことができます。

本記事では、具体的に100マス計算の表に順番に数値を入力するマクロを記録し、そのコードを理解・修正する方法をステップバイステップで解説します。さらに、記録したマクロをより柔軟に、そして効率的に動作させるための実務的なアドバイスも提供します。Excel VBAの学習をこれから始める方、あるいは定型的な入力作業に時間を取られている方に、ぜひ読んでいただきたい内容です。

### 詳細解説

#### マクロ記録機能とは

Excelの「マクロ記録」機能は、ユーザーが行ったExcel上での操作(セルの選択、値の入力、書式設定、数式挿入など)を自動的にVBAコードとして記録してくれる機能です。これにより、VBAのプログラミング知識がなくても、Excelの操作を自動化するマクロを作成できます。

**マクロ記録の開始と停止:**

1. **開発タブの表示:** まず、Excelのリボンに「開発」タブが表示されていることを確認します。もし表示されていない場合は、「ファイル」>「オプション」>「リボンのユーザー設定」を選択し、「開発」にチェックを入れて「OK」をクリックします。
2. **マクロ記録の開始:** 「開発」タブの「コード」グループにある「マクロの記録」ボタンをクリックします。
3. **マクロ名と保存場所の指定:** 表示されるダイアログボックスで、マクロに分かりやすい名前を付けます(例: `InputNumbers100Mas`)。「作業中のブック」に保存するか、「個人用マクロブック」に保存するかを選択します。個人用マクロブックに保存すると、どのExcelファイルを開いていてもそのマクロを実行できるようになります。
4. **操作の実行:** 「OK」をクリックすると、マクロ記録が開始されます。ここから行うExcel上の操作がすべて記録されます。
5. **マクロ記録の停止:** 操作が完了したら、「開発」タブの「コード」グループにある「記録終了」ボタンをクリックして記録を停止します。

#### 100マス計算への数値入力マクロの記録

ここでは、100マス計算のような10×10の表に、1から100まで順番に数値を入力するマクロを記録してみましょう。

**準備:**

* Excelを開き、新しいブックを作成します。
* シートのA1セルからJ10セルまでが、数値を入力する範囲(100マス)とします。

**記録手順:**

1. **マクロ記録開始:** 「開発」タブの「マクロの記録」をクリックし、マクロ名を `InputNumbers100Mas` とします。「OK」をクリックします。
2. **最初の数値入力:** A1セルを選択し、「1」と入力してEnterキーを押します。
3. **次のセルへの移動と入力:**
* B1セルを選択し、「2」と入力してEnterキーを押します。
* C1セルを選択し、「3」と入力してEnterキーを押します。
* … このように、右方向へ移動しながら、順番に数値を入力していきます。
4. **行の移動と入力:**
* J1セルに「10」と入力したら、次はA2セルに移動し、「11」と入力してEnterキーを押します。
* B2セルに「12」と入力してEnterキーを押します。
* … これを繰り返し、J10セルに「100」と入力します。
5. **記録終了:** J10セルに「100」と入力し、Enterキーを押したら、「開発」タブの「記録終了」をクリックします。

**注意点:** マクロ記録中は、意図しない操作(例えば、間違って別のセルをクリックしたり、不要なセルを選択したり)もすべて記録されてしまいます。できるだけスムーズに、正確に操作することが重要です。

#### 記録されたVBAコードの確認と理解

マクロ記録が完了したら、そのコードを確認してみましょう。「開発」タブの「コード」グループにある「Visual Basic」ボタンをクリックすると、VBAエディターが開きます。左側のプロジェクトエクスプローラーで「標準モジュール」の下にある「Module1」などをダブルクリックすると、記録されたコードが表示されます。

先ほどの例で記録されたコードは、以下のようなものになるはずです。

Sub InputNumbers100Mas()

‘ InputNumbers100Mas Macro


Range(“A1”).Select
ActiveCell.FormulaR1C1 = 1
Range(“B1”).Select
ActiveCell.FormulaR1C1 = 2
Range(“C1”).Select
ActiveCell.FormulaR1C1 = 3
‘ … (以下略)
Range(“J1”).Select
ActiveCell.FormulaR1C1 = 10
Range(“A2”).Select
ActiveCell.FormulaR1C1 = 11
‘ … (以下略)
Range(“J10”).Select
ActiveCell.FormulaR1C1 = 100
End Sub

**コードの解説:**

* `Sub InputNumbers100Mas()`: マクロの開始を宣言します。
* `’`: アポストロフィから始まる行はコメントです。コードの説明として挿入されます。
* `Range(“A1”).Select`: セルA1を選択します。
* `ActiveCell.FormulaR1C1 = 1`: 現在選択されているセル(アクティブセル)に値「1」を入力します。`FormulaR1C1` は、Excelがマクロ記録でデフォルトで使う「R1C1形式」での数式または値の代入方法です。
* `Range(“B1”).Select`: セルB1を選択します。
* `ActiveCell.FormulaR1C1 = 2`: アクティブセル(B1)に値「2」を入力します。
* `End Sub`: マクロの終了を宣言します。

このコードは、一つ一つのセルを選択し、値を代入するという、非常に単純で直接的な処理を繰り返しています。しかし、このままではセルが固定されており、柔軟性がありません。

#### マクロコードの修正と改善

記録されたコードは、そのままでは特定のセルにしか入力できません。これを、より汎用的に、そして効率的にするために修正しましょう。

**1. セル参照の自動化 (Offset / Cells)**

毎回 `Range(“A1”).Select` や `ActiveCell.FormulaR1C1 = 1` と記述するのは冗長です。`Cells(行番号, 列番号)` や `Range(Cells(行番号, 列番号), Cells(行番号, 列番号))` を使うと、行番号や列番号を変数で指定できるようになり、ループ処理との相性が良くなります。

また、`Offset(行オフセット, 列オフセット)` を使うと、指定したセルから相対的な位置にあるセルを操作できます。

**2. ループ処理の導入**

1から100まで順番に数値を入力する処理は、繰り返し処理です。VBAの `For…Next` ループを使うことで、この繰り返し処理を簡潔に記述できます。

**改善されたコード例:**

以下のコードは、`For…Next` ループと `Cells` プロパティを使用して、100マスに1から100まで順番に入力するマクロです。

Sub InputNumbers100MasImproved()

Dim i As Long ‘ 入力する数値を格納する変数
Dim rowNum As Long ‘ 現在の行番号
Dim colNum As Long ‘ 現在の列番号

‘ 初期設定
rowNum = 1 ‘ 開始行
colNum = 1 ‘ 開始列
i = 1 ‘ 開始数値

‘ 100マスに数値を入力するループ
For rowNum = 1 To 10
For colNum = 1 To 10
‘ 現在のセルに数値を入力
Cells(rowNum, colNum).Value = i

‘ 次の数値へインクリメント
i = i + 1
Next colNum
Next rowNum

MsgBox “100マス計算の数値入力が完了しました!”

End Sub

**改善されたコードの解説:**

* `Dim i As Long`, `Dim rowNum As Long`, `Dim colNum As Long`: 変数を宣言しています。`Long` 型は整数を格納するのに適しています。
* `For rowNum = 1 To 10`: 外側のループで、行番号を1から10まで繰り返します。
* `For colNum = 1 To 10`: 内側のループで、列番号を1から10まで繰り返します。
* `Cells(rowNum, colNum).Value = i`: `Cells(行番号, 列番号)` で指定されたセルに、変数 `i` の値を代入します。
* `i = i + 1`: 数値を1ずつ増やします。
* `Next colNum`, `Next rowNum`: ループの次の繰り返しへ進みます。
* `MsgBox “…”`: 処理が完了したことをユーザーに通知します。

この改善されたコードは、マクロ記録で生成されたコードよりもはるかに短く、理解しやすく、そして何よりも柔軟性があります。例えば、表のサイズが変わっても、ループの範囲 (`1 To 10`) を変更するだけで対応できます。

#### マクロの実行方法

作成したマクロを実行するには、以下のいずれかの方法があります。

1. **VBAエディターから実行:** VBAエディターでマクロコードを表示し、実行したいマクロ名の行にカーソルを置いた状態で、ツールバーの「実行」ボタン(▶︎のようなアイコン)をクリックするか、F5キーを押します。
2. **Excelの「マクロ」ダイアログから実行:** Excelの「開発」タブにある「マクロ」ボタンをクリックします。表示されるダイアログボックスで実行したいマクロを選択し、「実行」ボタンをクリックします。
3. **ボタンに登録して実行:** シート上にボタン(「開発」タブ > 「挿入」 > 「フォームコントロール」の「ボタン」)を配置し、そのボタンにマクロを登録します。ボタンをクリックするだけでマクロが実行できるようになり、非常に便利です。

### 実務アドバイス

#### 1. マクロ記録の活用と限界の理解

マクロ記録は、VBAの学習を始める上で非常に強力なツールです。しかし、記録されるコードは必ずしも効率的であったり、汎用的であったりするわけではありません。記録されたコードをそのまま使うのではなく、必ずVBAエディターで確認し、理解することをお勧めします。そして、上記のようにループ処理や変数を用いることで、より洗練されたコードに改善していくことが重要です。

#### 2. `Select` と `Activate` を避ける

マクロ記録で生成されるコードには、`Range(“A1”).Select` のように、セルを選択する処理が多く含まれます。しかし、VBAでは、セルを選択せずに直接値を操作する方が、処理速度が速く、コードも簡潔になります。例えば、`Range(“A1”).Value = 1` のように直接値を代入できます。

#### 3. エラーハンドリングの重要性

今回のような単純な数値入力であれば問題ないかもしれませんが、実務で使うマクロは、予期せぬエラーが発生する可能性があります。例えば、ファイルが存在しない、セルに保護がかかっている、想定外の値が入力されている、といった状況です。これらのエラーに対処するために、`On Error Resume Next` や `On Error GoTo` といったエラーハンドリングの仕組みを学ぶことも、マクロをより堅牢にするために不可欠です。

#### 4. マクロの保存形式

マクロを含むExcelファイルは、通常の `.xlsx` 形式ではなく、マクロ有効ブック形式である `.xlsm` で保存する必要があります。保存時に「ファイルの種類」で「Excel マクロ有効ブック (*.xlsm)」を選択してください。

#### 5. コードのコメント化

作成したマクロには、必ずコメントを記述しましょう。後で自分が見返したときに、コードの意図や処理内容をすぐに理解できるようになります。また、他の人がマクロを理解する上でも非常に役立ちます。

### まとめ

本記事では、Excel VBAの「マクロ記録」機能を使って、100マス計算のような定型的な数値入力作業を自動化する方法を、記録からコードの理解、そして改善までをステップバイステップで解説しました。

マクロ記録は、VBAの世界への入り口として非常に有効です。しかし、その真価は、記録されたコードを理解し、ループ処理や変数といったVBAの基本要素と組み合わせることで、より柔軟で効率的なコードへと進化させることにあります。

今回学んだマクロ記録の活用法とコード改善のテクニックは、Excel VBAで業務を効率化するための基礎となります。ぜひ、ご自身の業務で繰り返し行っている作業を見つけ、マクロ記録から自動化への第一歩を踏み出してみてください。Excel VBAを使いこなすことで、あなたの仕事はよりスマートで生産的なものになるはずです。

タイトルとURLをコピーしました