初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門-プログラミング基礎(命令文の構成)

私のブログ文章長いらしいので短めにしてみます。今日は昨日の1つの命令文についての説明のお話ちょっと英語の文法チックになると思いますが、頑張ってください。

エクセルはプロシージャ単位で理解する。


昨日のコードをもう一度出します。

Sheet1オブジェクトコードの中。(要はVBEのSheet1をダブルクリックしてから書いたコードのこと)

Public Sub Test1()

    Range("A1").Value = "Hello! VBA!"

End Sub


でした。1行ずつ説明します。

Public Sub Test1()

エクセルがこれから命令が始まるというのを理解するための文です。最後にEnd Subとありますが、これがその処理全体の終わりを意味します。このSubをプロシージャと呼びます。エクセルに何か処理をさせる「処理」の1単位です。プロシージャにはSubとFunctionの2種類があります。2つの使い分けはズバリ、初心者にわかりやすく言えば、

何かの値を返す(戻り値を持つ)ならFunction、返さないならSub

と覚えてください。「値を返す」や「戻り値」についてはまた別で説明しますので、今はふーん。ほじほじ。くらいでいいです。大事なのは何かエクセルに処理をさせるにはプロシージャという単位で記述しないとダメ。ということをここでは覚えてください。

Range("A1").Value = "Hello! VBA!"

ここで、セルA1に「Hello! VBA!」という文を出力しています。セルに入力している。でもいいですが、ここではやはり出力です。Rangeというのはその名の通りセルの範囲をつかさどるオブジェクト(ロボ)です。カッコの中にセルの名前A1を入れています。こうすることでその範囲状態を操作できるようになります。ロボに範囲を与えてやると動かす準備ができてる感じです。

ValueというのがRangeオブジェクトが持っている「状態」つまりプロパティの1つになります。Valueというのはこれも英語どおり「値」です。つまり、「セルA1の値」ということになります。
それに「Hello! VBA!」を「=」イコールで結んでいます。これを代入式と呼んでいます。このように何かプロパティに値を設定したり、何か値を持っていたい(保持して他で使いたい)時などにこの代入式を使います。

要は左に設定したい方、右に設定する値を書いて=で結ぶだけです。
「左辺=右辺」を日本語の「左辺に右辺を設定する(格納する)」と訳してください。

いろいろ書いてますが、スゲーシンプルです。

でも、ここがキモなので、しっかりと覚えてくださいね。最初の文法です。

何かのエクセルのオブジェクト(ロボ)の状態(プロパティ)に値を設定するときには=で結ぶ代入式を使う。

ということです。今回の文章を日本語で訳すと、

「範囲ロボのセルA1の値(状態)にHello! VBA!を設定する」

となります。

End Sub

プロシージャの終わりです。

1行のマクロにすべてが込められている。

これも立派な「プログラム」です。これが理解できないとおそらくこの先何も理解できないので、しっかりと理解してください。特にオブジェクトとプロパティの関係ですね。それと代入することで値を設定できるということ。

オブジェクトとプロパティは「.」ドットでつなぎます。「.」は各オブジェクトの親子関係から書くときにも使います。日本語の「~の」に当たるものです。例えば、先ほどの文章を大元のエクセルApplicationオブジェクトから日本語で書くと・・・

「エクセルのブックのSheet1の範囲セルA1の値にHello! VBA!を設定する」

となって、

Application.ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "Hello! VBA!"

となります。ちゃんと書くとこうなんですが、ある程度省略して書くことができるということです。


次回は、いろいろな書き方についてです。


今日はここまで!