土日でマスター エクセルVBA講座① マクロの記録でエクセル操作の自動化と「With」「End With」構文

スポンサーリンク

今回から、新しいカテゴリ「エクセルVBA」を追加し、エクセルのマクロであるVBA(ビジュアルペーシック・フォー・アプリケーションズ)の紹介をしていきたいと思います。

エクセルのマクロには興味があるけれどなかなか時間が取れない、という方向けに休日(土日)を利用してエクセルのVBAについて紹介していきます。

今回はVBAの基本、「マクロの記録」による自動化についての方法と、構文の一つである「With」「End With」の解説です。

スポンサーリンク

VBAを使う前にリボンに「開発」タブを表示

まず初めに、これからVBAを利用するにあたって、デフォルトでは表示されていない「開発」タブを表示しておきます。

「ファイル」「オプション」をクリックします。

「ファイル」「オプション」

「リボンのユーザー設定」で、右側の「開発」にチェックを入れ、「OK」をクリックします。

「開発」タブの表示

すると、エクセルのリボン上に「開発」タブが表示されるようになります。

VBA(マクロ)で利用するのは下記の「コード」の部分です。

「開発」タブ「コード」

「マクロの記録」でエクセルの動作を保存する

それでは早速マクロを記述していきましょう。

といっても今回は、「マクロの記録」で自動的にエクセルの動作を記録させてコードを生成します。

下記の「マクロの記録」をクリックします。

「マクロの記録」

すると下記のダイアログボックスが表示されます。

今は特に変更する必要はありません。とりあえず今から記録するマクロが「Macro1」という名前になる、と思っておいてください。

「OK」ボタンを押すと「マクロの記録」が開始されます。

「マクロの記録」の開始

ここからのエクセルの操作はすべて記録されます。時間制限はありませんので落ち着いて作業してください。

いくつかエクセルの操作を実行してマクロを記録する

それでは、いくつかエクセルの操作をしてマクロを記録していきましょう。

まずはA1セルに「1」と入力します。

操作その1 「数値の入力」

その後、「オートフィル」でA1セルをA10セルまでコピーして「連続データ」を選択します。

操作その2 1~10までオートフィルで入力

そして、セルA1からA10を選択し、罫線(格子)を選択します。

操作その3 セルに罫線を引く

さらに、フォントを変更してみます。

操作その4 フォントの変更

今回は、以上の操作で一旦終了します。下記の「記録終了」をクリックして、マクロの記録を終了します。

「マクロ記録の終了」

自動生成されたマクロが実際に動作するか確認

それでは、先ほどマクロの記録によって自動生成されたマクロが、実際に動作するかを確認してみましょう。新たに「Sheet2」を追加して、下図の「マクロ」をクリックします。

「マクロ」をクリック

「マクロ」ダイアログボックスが開きますので、先ほど記録した「Macro1」が選択されているのを確認して「実行」をクリックします。

マクロの実行

すると、先ほど「セルの値の入力」「オートフィル」「罫線」「フォントの変更」といった一連のエクセル操作が、クリック一つで自動的に再現されます。これが「マクロ」ですね。

「マクロの実行」

「Visual Basic」で自動生成されたコードを確認

それでは、今回のエクセルの操作で記録されたコードを確認してみましょう。下図の「Visual Basic」をクリックします。

「Visual Basic」をクリック

「Microsoft Visual Basic for Applications」が開きます。

左側の赤囲みの「プロジェクト」内のツリー、「Module1」をダブルクリックします。「マクロ」はこの「Module」内に記述していきます。

「Microsoft Visual Basic for Applications」

すると、画面右側にコードが表示されます。

まずは、赤囲み部分は、A1セルへの「1」の入力とA10セルまでの「オートフィル」の記述です。

まだ覚える必要はないですが、いくつかご紹介します。

「ActiveCell」とは、現在選択されているセルを表します。「FormulaR1C1」の「R」は「Row」すなわち行、「C」は「Column」で列を表しています。ですから「R1C1」は「A1」セルを意味しています。通常、マクロの記述をする際にセルを指定する場合は、「Range」を利用しますので、こちらの方が分かりやすいでしょう。

2行目の「Range(“A1”).Select」は、セル「A1」を選択するという意味です。

その後、オートフィルで「A10」セルまでコピーをしています。「AutoFill」の後の「Type」はオートフィルの種類を指定しています。

Type種類
xlFillCopyコピー
xlFillSeries連続データ
xlFillFormats書式のみコピー
xlFillValues書式なしコピー

一度、「Type」を変更してマクロの動作を確認してみると、どういう動作をするのか確認してみるのもいいかもしれません。

「オートフィル」のマクロの記述

「With」と「End With」構文 一つの対象にまとめて処理を記述

続いて、次のブロックは罫線を設定しているコードになります。

この部分は非常に設定が複雑なので、自分は「マクロの記録」でコードを取得し、マクロに貼り付けて(ときに加工して)利用しています。

ここでは「With」と「End With」の説明だけにしておきます。今回のVBA構文の解説は「With」と「End With」です。

「With」と「End With」の間に記述されているコードは、同じ対象に対して変更を行う場合に利用します。

「With.Selection.Borders(xlEdgeLeft)」で、選択されたセルの左側の罫線を選択し、罫線の「種類」「太さ」「色」を設定しています。

たとえば、「With」構文を使用しないと、下記のようなコードになります。

Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous

Selection.Borders(xlEdgeLeft).ColorIndex = 0

Selection.Borders(xlEdgeLeft).TintAndShade = 0

Selection.Borders(xlEdgeLeft).Weight = xlThin

と、同じ左罫線に対して何度も同じ赤アンダーラインの部分を記述する必要が出てくるわけです。

これでは効率的ではないので、「With」構文を利用して、設定する対象であるSelection.Borders(xlEdgeLeft)の部分の「線を引く」「色」「明るさ」「太さ」を一度に設定して、「End With」で対象を終了してより簡単にコードを記述することができます。

「色」「明るさ」「太さ」を設定しないなら、その行のコードは削除しても構いません。

その後、罫線の上部・下部・右部・表の内部の縦横を同様に設定しています。

罫線の設定は難しいので「マクロの記録」でコードを取得する方が楽

続いてフォントの変更です。こちらも「With」「End With」構文を利用していますね。「フォント名」や「サイズ」などを設定しています。

「フォント名」と「サイズ」以外の行は削除しても、マクロの動作は同じになります。

「マクロの記録」は便利なのですが、変更しない設定も記述するのでコードが長くなってしまいますね。それぞれの意味が分かれば削除してコードを短くすることができますが、今はそのままでいいでしょう。

「マクロの記録」は不要な設定も記述する

マクロの大原則 マクロは「Sub」と「End Sub」の間に記述する

最後になりましたが、マクロは「Sub マクロ名()」と「End Sub」の間に記述する必要があります。「マクロの記録」では、自動的に「Sub マクロ名()」と「End Sub」を追加してくれますが、今後覚えておく必要がある大前提です。

また、下図の「’」で始まっている緑色の部分は、コメント文を表していて、その部分はコードとしてマクロは実行されません。例えばフォントを変更する前に

‘フォント変更

としておくことで、それ以下の部分が何のマクロかがわかるようすることができます。

今はまだ短いマクロですが、複雑なマクロになるとこのコメント文は後から見直したときにすっきりと全体像が把握しやすくなります。

マクロがうまく動かない場合に確認する場合にも、コメントがあると整理しやすくなります。

マクロは「Sub」と「End Sub」の間に記述する

エクセル2007以降はマクロを含んだブックの保存は拡張子「.xlsm」で

エクセル2007以降は、「マクロ」を含んだブックは通常の拡張子「.xlsx」のままでは保存できません(マクロが保存できない)。

ですので、マクロを追加して「上書き保存」をクリックすると、下のようなダイアログボックスが開きますので、「いいえ」をクリックします。

「次の機能はマクロなしのブックに保存できません」

「いいえ」をクリックすると、「名前を付けて保存」が開きますので、ファイルの種類を「Excel マクロ有効ブック(*:xlsm)」を選択してから「保存」をクリックします。

マクロを含むブックは「Excel マクロ有効ブック(*:xlsm)」で保存

新シリーズ「土日でマスター エクセルVBA講座」の1回目、いかがだったでしょうか。今後も週末の土日に少しずつVBAについての知識を身に付けていただけるようにする記事を投稿していく予定です(毎週は無理だと思いますが)。

分かりにくい点や、こういう操作がしたいというご意見がありましたらコメントいただけたら幸いです。自分にできる限り対応していきたいと思います。

コメント

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