今回から、新しいカテゴリ「エクセルVBA」を追加し、エクセルのマクロであるVBA(ビジュアルペーシック・フォー・アプリケーションズ)の紹介をしていきたいと思います。
エクセルのマクロには興味があるけれどなかなか時間が取れない、という方向けに休日(土日)を利用してエクセルのVBAについて紹介していきます。
今回はVBAの基本、「マクロの記録」による自動化についての方法と、構文の一つである「With」「End With」の解説です。
VBAを使う前にリボンに「開発」タブを表示
まず初めに、これからVBAを利用するにあたって、デフォルトでは表示されていない「開発」タブを表示しておきます。
「ファイル」「オプション」をクリックします。
「リボンのユーザー設定」で、右側の「開発」にチェックを入れ、「OK」をクリックします。
すると、エクセルのリボン上に「開発」タブが表示されるようになります。
VBA(マクロ)で利用するのは下記の「コード」の部分です。
「マクロの記録」でエクセルの動作を保存する
それでは早速マクロを記述していきましょう。
といっても今回は、「マクロの記録」で自動的にエクセルの動作を記録させてコードを生成します。
下記の「マクロの記録」をクリックします。
すると下記のダイアログボックスが表示されます。
今は特に変更する必要はありません。とりあえず今から記録するマクロが「Macro1」という名前になる、と思っておいてください。
「OK」ボタンを押すと「マクロの記録」が開始されます。
ここからのエクセルの操作はすべて記録されます。時間制限はありませんので落ち着いて作業してください。
いくつかエクセルの操作を実行してマクロを記録する
それでは、いくつかエクセルの操作をしてマクロを記録していきましょう。
まずはA1セルに「1」と入力します。
その後、「オートフィル」でA1セルをA10セルまでコピーして「連続データ」を選択します。
そして、セルA1からA10を選択し、罫線(格子)を選択します。
さらに、フォントを変更してみます。
今回は、以上の操作で一旦終了します。下記の「記録終了」をクリックして、マクロの記録を終了します。
自動生成されたマクロが実際に動作するか確認
それでは、先ほどマクロの記録によって自動生成されたマクロが、実際に動作するかを確認してみましょう。新たに「Sheet2」を追加して、下図の「マクロ」をクリックします。
「マクロ」ダイアログボックスが開きますので、先ほど記録した「Macro1」が選択されているのを確認して「実行」をクリックします。
すると、先ほど「セルの値の入力」「オートフィル」「罫線」「フォントの変更」といった一連のエクセル操作が、クリック一つで自動的に再現されます。これが「マクロ」ですね。
「Visual Basic」で自動生成されたコードを確認
それでは、今回のエクセルの操作で記録されたコードを確認してみましょう。下図の「Visual Basic」をクリックします。
「Microsoft Visual Basic for Applications」が開きます。
左側の赤囲みの「プロジェクト」内のツリー、「Module1」をダブルクリックします。「マクロ」はこの「Module」内に記述していきます。
すると、画面右側にコードが表示されます。
まずは、赤囲み部分は、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」を追加してくれますが、今後覚えておく必要がある大前提です。
また、下図の「’」で始まっている緑色の部分は、コメント文を表していて、その部分はコードとしてマクロは実行されません。例えばフォントを変更する前に
‘フォント変更
としておくことで、それ以下の部分が何のマクロかがわかるようすることができます。
今はまだ短いマクロですが、複雑なマクロになるとこのコメント文は後から見直したときにすっきりと全体像が把握しやすくなります。
マクロがうまく動かない場合に確認する場合にも、コメントがあると整理しやすくなります。
エクセル2007以降はマクロを含んだブックの保存は拡張子「.xlsm」で
エクセル2007以降は、「マクロ」を含んだブックは通常の拡張子「.xlsx」のままでは保存できません(マクロが保存できない)。
ですので、マクロを追加して「上書き保存」をクリックすると、下のようなダイアログボックスが開きますので、「いいえ」をクリックします。
「いいえ」をクリックすると、「名前を付けて保存」が開きますので、ファイルの種類を「Excel マクロ有効ブック(*:xlsm)」を選択してから「保存」をクリックします。
新シリーズ「土日でマスター エクセルVBA講座」の1回目、いかがだったでしょうか。今後も週末の土日に少しずつVBAについての知識を身に付けていただけるようにする記事を投稿していく予定です(毎週は無理だと思いますが)。
分かりにくい点や、こういう操作がしたいというご意見がありましたらコメントいただけたら幸いです。自分にできる限り対応していきたいと思います。
コメント