こんにちは、.TAOです。パソコンを普段仕事で使っている人なら、誰でも使ったことがあるであろうExcel。用意されたフォーマットに入力するだけなら、Windowsを使えるスキルがあれば問題ないですが、「毎日の定型作業をマクロで自動化して効率よく仕事が出来れば楽になるのに。」と思ったことはありませんか?そう思ったら、ぜひマクロにチャレンジしてみて下さい。
目次
0.はじめに
ExcelのマクロであるVBAは、Visual Basic言語をベースに作られているので、プログラム経験がない人には敷居が高く感じられるかもしれませんが、そんな事はありません。
Basic自体が理解しやすい言語ですし、Excelが使える環境なら即チャレンジできるっていうのは、他のプログラム言語ではまずあり得ないですからね。
と冒頭から偉そうに語っちゃってますが、私自身がVBAの達人でもありませんし、それを生業にしているわけでもありません。
その私がこのような話をしているわけは、「Excelのマクロは、最小限の準備で最大限の効果を生む最良のツール」だから。そんな便利なツールを食わず嫌いで活用しないのはもったいないと思ったからです。
今回の連載「VBAの達人風を目指す」を通して、「なんだ、VBAって簡単じゃん。」と思ってくれたら、そして日々の仕事に少しでも活用してくれたらと思っていますので、最後までお付き合いいただけるとうれしいです。
1.記録と実行でマクロを体験する
Excelがある程度使えてVBAに関心がある人なら、漠然と「マクロをマスターしたい」と思ったら入門書を買って勉強を、と考えるかもしれませんが、Excelが使える環境なら体験してみるのが一番の近道です。
早速マクロ体験をしてみましょう。
まずは、Excelを起動し新規ファイルを作成します。
次に表示タブの一番右にあるマクロツールボタンの下矢印でメニューを表示して、「マクロの記録…」をクリック。マクロ名を入力して「OK」をクリックします。これで、マクロ記録モードになっていますので、Excel上で作業した内容が自動的にマクロとして記録されていきます。
とりあえずここでは、B2のセルを選択して文字を入力しました。記録したい作業が終了したので、もう一度表示タブのマクロツールボタンでメニューを表示させ「記録終了」をクリックして記録を終了します。これで、セルを選択して入力した作業が記録されましたので、マクロを開いて見てみましょう。
表示タブのマクロツールボタンをクリックすると、先ほど記録したMacro1がリストにありますので、それを選択して「編集」ボタンを押すとVisual Basic For ApplicationsウインドウがExcelとは別に開きます。
今記録した内容が表示されていますね。
Sub Macro1() ‘ ‘ Macro1 Macro ‘ Range(“B2”).Select ’←セルを選択 ActiveCell.FormulaR1C1 = “Hello,VBA.” ’←選択されたセルに値を入力 Range(“B3”).Select ’←入力後Enterを押したので下のセルが選択された End Sub |
たったこれだけですが、この数行にも重要なポイントが含まれています。ここで覚えるのは、
●記録されたマクロはSub マクロ名()で始まり、End Subで終わる
●’の後ろは注釈(実行されない)になる
●セルを選択(指定)するのにはRangeを使う
●選択されているセル(アクティブなセル)をActiveCellという
●=で値を代入できる
●何やらドット’.’で繋がっている(構造体)
VBAをマスターする上で、この言語の特徴がこの数行にも現れています。一つづつ説明していきますので、この辺りをなんとなく理解できれば達人風に一歩近づきます。しっかり押さえておきましょう。
記録されたマクロはSub マクロ名()で始まり、End Subで終わる
基本的にマクロは、Subで始まりEnd Subで締めくくります。マクロ名は自由に指定できますが、ある程度の制約がありますので、エラーが出たら別の名前に置き換えてください。ファイル名の後ろについている括弧()は、他のマクロから呼び出したときに値を渡す引数に使います。
’の後ろは注釈(これはRem文と言います)
これはマクロを後から見て解りやすくする為にしようする注釈に利用します。行の先頭や後ろに’(Remを省略して一文字になっています)を入れることで、それ以降の部分を注釈としてマクロ実行時に除外します。
たった数行のモノなら特に説明はいりませんが、マクロが複雑になればなるほど、この注釈はとても重要になってきます。後からのメインテナンスや修正の時、「この変数に何を入れていた?このサブルーチンは何をする部分だっけ?」とかいったマクロ構造の解析という無駄な時間を大幅に短縮してくれます。
また、マクロエラーで停止した時に、とりあえずエラー行の先頭に’を書き込んでスキップさせるといった事も出来ますし、たった一文字でも使えるヤツです。
セルを選択(指定)するのにはRangeを使う
マクロの記録を行うと、セルの指定にはRangeが使われます。括弧内の””でくくった中に、Excelのセル指定と同じようにセルを指定することができます。この例では、一つのセルが選択されていますが、”B2:D10”のように複数行、複数列を指定することもできますし、カンマ,で区切って対角セル2点で複数セルを選択することもできます。
また、Range以外に、Row(行)、Cloumn(列)で指定するCells(Row,Column)があり、VBA内で連続した処理を行う場合Cellsで指定した方が簡単だったりと、状況に応じて使い分けることができます。
例: Range(“C2”).Select と Cells(2,3).Select は同じ Range(“B2:D10”).Select Range(“B2”,”D10”).Select と Range(Cells(2,2),Cells(10,4)).Select は同じ |
選択されているセル(アクティブなセル)をActiveCellという
今回の例では、マクロの記録でコードを既成しているので、シート上で行った手順通りに記録していて、「セルを選択。→選択しているセルに値を入力。→Enterで選択セルが下に移動。」といった手順が記録されています。VBAでは、その時選択されているセルをActiveCellというオブジェクトとして扱います。これ、結構使いますので覚えておくと良いですよ。
詳しい説明は下記の構造体の所で説明しますが、直接場所が指定されていないのが’ミソ’なんですよ。例えば、表の先頭を選択した後、Ctrl+↓で最終行に飛んだ先がActiveCellとなります。そこで、最終行が何行目か?といった値を参照できるのです。
=で値を入力できる
VBAでは、=というのは、左右の式が同じであるという意味ではなく、右の値を左の変数などに代入するという意味になります。この例では、アクティブセルに”Hello,VBA.”を入力するといった意味になります。
ちなみに、代入する値が数値の場合はイコールの右にそのまま記入し、文字列の場合はダブルクォーテーション「”」で囲みます。
何やら’.’ドットで繋がっている(構造体)
ここで少し難しい話になりますが、VBAはオブジェクト型プログラミング言語でして、一つ一つのオブジェクトは複数の構造体で形成されています。
このActiveCellが、選択されているセル(アクティブなセル)であることを具体的に想像してみて下さい。セル一つとっても、数値や数式、背景色や位置情報などの複数の要素が含まれていますよね。そういった情報が、ストレージのフォルダ構造の様になって収まっているものがオブジェクトなのです。(ザックリ説明しているので、イメージとして捉えて下さい)
フォルダは¥で区切られてツリー構造となっていますが、VBAのオブジェクトは、ドット’.’で区切って表します。
この例では、
ActiveCell.FormulaR1C1
となっていますが、これは「選択されているセル.相対参照の数式」といった意味になります。
.Value なら「値」、.Textなら「文字」、.Rowなら「行番号」という風にActiveCellには複数の要素が内包されています。
この構造体の考え方は、VBAマクロをマスターする上でとても重要になってきますので、ドットで繋がった部分の本体(ここではActiveCell)とその要素(ここではFormulaR1C1)という形になっている事はよく覚えておいてください。
2.開発タブを追加する
表示タブのマクロツールボタンからマクロの編集といった流れでエディタを開きましたが、マクロを本格的に編集するならメインタブに開発タブを追加しましょう。
Excelのファイル→オプションでExcelのオプションを開きます。
そこから、リボンのユーザー設定を選び、ウインドウ右のリボンのユーザー設定→メインタブのリストの開発にチェックを入れOKを押します。これでメインタブに開発タブが追加されますので、開発タブの左にVisual Basic エディタボタンがあるので、ここからエディタを開く事ができるようになります。他にもこのタブからは、シートにマクロを起動できるボタンなどのフォームコントロールを挿入する事ができるようになりますので重宝しますよ。
3.マクロを含んだファイルの保存
ここまでは、Excelから新規でシートを開きマクロを記録・編集しましたので、マクロを含んだExcelシートを保存します。
ファイル→名前を付けて保存から参照をクリックします。
保存場所を指定し、保存するファイルの種類をExcelマクロ有効ブック(*.xlsm)を選択して保存します。この時ファイルの種類をExcelブックにしてしまうとマクロを保存できませんので注意してください。
4.まとめ
シリーズの第一回目という事で、今回は「マクロってこんな感じ。」という導入編的にまとめてみました。マクロを覚えたいと思ったら、まず実際に触ってみるのが一番の早道です。
・Excelの操作を細かく区切ってマクロの記録をしソースを確認する。
・コードの一部を変更してみて動かしてみる。
たったこれだけの事を繰り返し行うことで、マクロでできる事の幅がどんどん広がって行くでしょう。簡単なマクロなら、マクロの記録で出来たソースコードをつなぎ合わせるだけで出来上がるでしょうし、どんな形であれ目的が達成できれば良いのですからそれでいいんです。
マクロを使えるようになるために覚えることは、それほど多くはありません。解らなければ、都度ネットやハウツー本なんかで調べらばよいですし、マクロの記録を利用して、必要箇所をコピペすれば事足りる場合も多いです。
冒頭でも言ったように、「Excelのマクロは、最小限の準備で最大限の効果を生む最良のツール」ですから、どんどんトライしてみて下さい。
次回は、VBエディタの基本操作と説明とデバック作業について、それとマクロ記録でよく出てくるWith~End Withについてなどを説明したいと思っています。Excelのマクロに興味がある方、このシリーズを最後までお付き合いいただけたら、きっと達人風のレベルまでスキルアップできると思います。
このシリーズが立ち消えてしまわないよう、私も頑張って記事をアップしますのでお付き合いいただけたら幸いです。では、次回をお楽しみに。
コメント
ウインタブ良いですね。幅広く色々な情報が提供されるようになってきましたね。最盛期のパソコン雑誌を見ているようです。
昔は中華Windowsタブレットの情報を求めてこちらに来ましたが今ではパソコン雑誌を買い求める感覚です。
このシリーズもぜひ続けてください。
今までのウインタブの記事内容とは、毛色が違うので受け入れられるか心配していましたが、うれしくなるコメントありがとうございます。
この言葉を励みにVBA連載続けられそうです。第2回目も投稿準備中ですので読んでいただけるとうれしいです。