VBA講座1
最初に戻る
[エクセルのマクロとVBAについて]
この講座は、普通にエクセルを使いこなし、マクロを使って仕事に便利な
システムを作ろうとしている(つまり中級レベル以上)人が対象です。
したがって、エクセルの初心者には、レベルが高すぎると思います。
初心者には、三種類あります。最低レベルはデーターを入力するだけの人
次のレベルが、セルに式を入力して計算したり、ソートやオートフィルター
を活用したり、写真や絵を貼り付ける人
さらに上のレベルが、ハイパーリンクをしたり、ホームページ用のデーター
を作れる人・・・この辺までが初心者でしょうか?
中級レベルになりますと、マクロを使って、みんなの仕事に便利なシステムを、
作るようになります。
また、セルに複雑な計算式を入力して、仕事の能率を上げようとしますが、
何でうまくいかないの?マクロでも無理だし?と悩むようになります。
上級者の作ったシステムを参考にしようとしても、パスワードがかかっていたり、
やっとパスワードを解除してセルの式を見ても、女の子の名前だったり、マクロ名
だったり、何にもなかったり、?????となります。ここまでが中級者です。
自分で作ったマクロの中身を研究し始めると、上級者の仲間入りです。
エクセルやプログラムの上級者を目指すなら、まずエディターを開くところから
初めてください。エクセルの場合はVBEというエディターが付属しています。
マクロもVBAという言語で書かれています。ですから、VBEというエディターを
開けば中身を見ることができます。
コンピューター言語は、機械語・アセンブラ・パスカル・C言語・ベーシック
などがありますが、C言語以後の高級言語は、基本の文法は同じです。
ちなみにVBAは、Visual Basic For Applicationsの略で、
VBEはVisual Basic Editorの略です。
VBAのエディターの開き方ですが、エクセル2003以前のバージョンの方は、
ツールメニューの表示で、Visual Basicにチェックを入れておけば、アイコンが
表示されています。または、ツールメニューのツール、マクロと進んで、
、
Visual Basic Editorをクリックするか、Altキーを押しながらF11キーを押すだけです。
エクセル2007の方は、Officeボタンをクリック、エクセルオプションをクリック、
”開発タブをリボンに表示する”にチェックを入れてOKボタンを押します。
エクセル2010以降の方は、ファイルタブをクリック、オプションをクリック、
”リボンのユーザー設定”をクリック”開発”をチェックして、OKボタンを押します。
また、セキュリティーのレベルを、エクセル2003以前のバージョンの方は、”中のマクロ
の実行前に警告をします”を選んでおきます。
そして”セキュリティー警告”の中で、”マクロを有効にする”を選びます。
2007以降の方は、”開発”タブをクリック、”マクロの設定”で”警告を発してすべての
マクロを無効にする”を選択し、OKボタンを押しておきます。
そして、警告が発せられたら”コンテンツを有効化”をクリックします。
、
上がVBEのエディターを開いたところです。
左上の画面がプロジェクトエクスプローラー、左下にはプロパティ画面が、右横には
コード入力画面が表示されます。
これは、プロジェクトエクスプローラー上で右クリックをして、挿入から、
標準モジュールを選択した画面です。モジュールには三種類ありますが、とりあえず
標準モジュールだけを使ってください。
それから、シートにも、VBAが記述出来ますが、この場合はSheet1をクリックして、
コードを記述してください。
コード入力画面が表示されない場合は、プルダウンメニューの”コードの表示”を
クリックしましょう。モジュールやシートをクリックしても表示されます。
またマクロやVBAのプログラムがあれば、ここで見れます。
基本的に、VBAやマクロなどを使ってプログラムやシステムを作る人のエクセルは、
古いバージョンの方が良いと思います。絶対、使いやすいですから。
それと、新しいバージョンのエクセルで作成したマクロは、たいていの場合、
古いバージョンのエクセルでは作動しません。
この場合、マクロの中を見て、古いエクセルで使われていなかった”コンテンツ”を
削除する必要があります。これが結構大変です。
ですから、システムを作る人は、エクセル97あたりが理想です。
かなり古いエクセル2003のマクロでも、エクセル97では動作しない場合が多いです。
逆に、古いバージョンのエクセルで作ったマクロは、ほぼ間違いなく、
すべてのエクセルで動作します。
新しいエクセルしか持っていない方は、できるだけマクロは使わないようにしましょう。
せっかく作ったシステムが、古いエクセルを使う人ではエラーが続出しますから。
自分でVBEを使って書いたプログラムなら、まずエラーを起こす心配がありません。
[VBAの文法と構造について]
VBAに限らないのですが、最初にプログラム作成に必要な言語の説明をします。
オブジェクト・・・対象とする”物”のことです。
(シートとかセルとか、作成したマクロとか、とにかく何でも)
メソッド・・・オブジェクトに対する動作の命令です。
(コピーするとか、貼り付けるとか、ソートするとかなど)
プロパティ・・・オブジェクトに対する静的な命令です。
(セルの色とか、フォントとか、サイズとかなど)
ステートメント・・・一行の命令、VBAの命令はVBと同じで一行で書きます。
長くて、読みにくい場合は、アンダーバーで繋ぎます。
プロシージャ・・・Subから始まりEnd Subで終わる一つの命令文。
モジュール・・・いくつかの命令文をまとめて保存した場所。
ユーザーフォーム・・・ユーザーが作成するボックス。
プロジェクトエクスプローラー・・・VBEで、そのブックの構造を表示、ここを
クリックして、プロパティウィンドウやコードウィンドウを開く。
プロパティウィンドウ・・・VBEで、ボタンやユーザーフォームの設定をする所。
コードウィンドウ・・・VBEで、命令文を記述する場所。
関数(ファンクション)・・・エクセルで、あらかじめ用意された命令文。
必要に応じてユーザーが作った場合は、ユーザー関数という。
最初の三つは、何のことか分からないと思いますので、人物で説明します。
私をオブジェクトとすると、名前の”紅葉”がオブジェクト名となります。
私が、殴る・蹴る・走る・歩く・跳ぶ・出かける・帰るなどの動作がメソッド
身長・体重・年齢・性別・服装などがプロパティにあたります。
紅葉.蹴る・・・これは、紅葉が蹴る、つまり紅葉というオブジェクトが蹴ると
いう動作をするというステートメントです。間に半角ピリオドが入ります。
紅葉.体重="55.6kg"・・・これは、私の体重の値は55.6kgという意味で、
オブジェクトの次に半角ピリオドで、プロパティの体重、そしてプロパティに
値が入ります。この場合=で繋ぎます。=は代入演算子で、数学の等号とは意味が
違います。数学の等号にあたるのは、==です。
さらに、値をそのまま表示する場合はダブルクォーテーションで囲みます。
それから、シート名やセル番地もダブルクォーテーションで囲みます。
簡単な例で説明します。
Sub seruiro()
Range("A1").Interior.ColorIndex = 5
End Sub
エクセルのVBEを開いて、Sheet1をクリックします。コードウィンドウが開いたら
上記のコードを入力します。
これでも、立派な命令文です。これをプロシージャーといいます。
”F5”キーを押せば、Sheet1のA1のセルが青色になります。VBEを最小化して確認
してください。
最初の行のSub seruiro()ですが、Subは命令文の始まりです。次のseruiro()は
プロシージャ名です。今回はseruiro・・・セル色です。()は今回は気にしないで。
次の関数や変数で理解出来ます。
Range("A1")・・・これは、セルA1のオブジェクトの中身はという意味です。
ピリオドの次のInterior.CoiorIndexですが、インテリアの色は?という意味です。
= 5ですが、色のプロパティに、5を代入する意味です。5は青です。
End Subは、命令(プロシージャ)の終了を意味します。
VBAでは、一行の命令文をステートメント、Subから始まりEnd Subで終わる命令文を
プロシージャといいます。
また、いくつかのプロシージャをまとめた物をモジュールといいます。
モジュールとプロシージャの関係は、ファイルとブックの関係と似ています。
結婚式場の書類を例にしたら分かりやすいと思います。
一組の結婚式の式次第を”モジュール”とします。
式次第の中の一つ”新郎新婦入場”が一つの”プロシージャ”
司会の言葉、音楽、拍手、などのそれぞれが”ステートメント”となります。
結婚する一組ごとに作ってもよいのですが、どうせ入場や退場は同じ音楽ですので
音楽のステートメントは、別のモジュールにまとめておきます。
そうすると、カップルの希望により、そこから音楽を選べます。
この、音楽を”オブジェクトA1”とすると、”A1”だけで呼び出せます。
このように、式次第の部品を呼び出す方法のプログラミングをオブジェクト指向の
プログラミングと呼びます。昔はサブルーチンと言ってました。
ゲームをする人なら分かると思いますが、戦闘シーンが同じパターンやんけ!です。
音楽まで一緒で、何これ”手抜きやんけ”ですね。
VBAでプログラミングする人は、あまり関係ないですが、知っておいてください。
[変数について]
どんなプログラムの場合でも、変数についての理解が必要です。
変数とは入れ物と理解して下さい。まあ、箱だと思ってもらって結構です。
変数を宣言すると、メモリーにその名前の変数を格納する場所が確保されます。
変数の型宣言をして、メモリーを節約します。以下は主な変数の型です。
Integer・・・整数型で、-32768〜+32767まで、2バイト消費
Long・・・長整数型で、-9223372036854775808から+9223372036854775807まで、4バイト消費
(大きい数の整数を使う場合に使用します。)
Single・・・単精度浮動小数点数型で、4バイト消費
Double・・・倍精度浮動小数点数型で、8バイト消費
String・・・文字列型で、可変長は10バイト+文字列の長さ、固定長は文字列の長さ
Currency・・・通貨型で、お金の計算の時に便利です。4バイト消費
Variant・・・これは、万能型で、すべての値を収納できますが、メモリーを
大量に消費します。数字で16バイト、文字で22バイト+文字列の長さです。
何も宣言しないと、自動的にVariant型になり、大量にメモリーを消費します。
まあ、普通は整数の場合はInteger型、小数の時はSingle型で充分だと思います。
あと、文字を返したい場合は、String型ですかね。
[関数について]
次に関数について説明します。エクセルではたいていの必要な関数はあらかじめ
用意されています。ですから、セルに=の後にその関数名を入力するだけで動作します。
みなさん、普通に使っていますよね。SUM関数とかいろいろありますね。
しかし、どうしても自分で作らないといけない場合があります。
中級者の作ったシステムには、それぞれのセルにものすごく長い関数式が入力されて
いる場合があります。大変な苦労をしたと思いますが、こんなのを力任せのシステム
といいます。止めましょうね!セルには関数名だけを入力しましょう。
ええと、中学の時に一次関数を習ったと思います。
(関数と聞いただけで、拒否反応を示す人がいますが、安心して下さい。
この講座では二次関数のような複雑はものは出てきません。)
”y=2x”のような簡単な式で説明します。これでも立派な関数です。
この場合yとxが変数、2が定数ということになります。
xに5を入れてやると、yの値は10になります。
では、これを元に二倍の値を返す関数を作ってみましょう。
まず、エクセルを起動して、”VBA研究”とでも名前を付けて保存してください。
そして、VBE(VBAのエディター)を起動して下さい。

一番上に”VBAProject(Book1)”、そしてその下に”Sheet1”など、いろいろあると思います。
とりあえずこれは無視して、プロジェクトエクスプローラー上で、右クリックします。
そして”挿入”の中で”標準モジュール”を選びます。
すると”Modul1"が表示されコードウインドウが開きます。
そこに以下のようにコードを記入します。
コードは、すべて小文字で入力して下さい。
文法が正しければ、必要な箇所が自動的に大文字に変わります。
Function nibai(x As Integer) As Integer
nibai = x * 2
End Function
これで”nibai”(二倍)という名前の関数が出来上がりました。
VBEを閉じて、エクセルのシートに戻って下さい。
シートの”B1セル”に”=nibai(A1)”と入力して下さい。
そして”A1セル”に100と数字を入力すると、B1セルに200と表示されるはずです。
”Function nibai”これは、”nibai”という名前の関数を作ることを宣言しています。
次の(x As Integer) は、”x”という変数(引数)が”Integer型”つまり整数であると宣言しています。
そして最後の”As Integer”は”nibai”という関数の戻り値の型を示しています。
”nibai = x * 2”
これは、”nibai”という関数の戻り値が、”x * 2”であることを示しています。
”y=2x”の”y”に当たるのが”nibai”で”*”は掛け算です。ちなみに割り算は”/”です。
関数名や変数名は”アルファベット”で好きなように付けてかまいません。
ただし、最初に数字がきたらだめですし、VBAでの約束文字とか言葉はエラーに
なります。まあ、エラーは教えてくれますから、気にせずに付けましょう。
好きな女の子の名前や、sado(サド)とかmazo(マゾ)とか付けると覚えやすいかな?
プロパティに使う変数を女の子の名前に、メソッドに使う名前をmazo(マゾ)とか、
ado(サド)にすると、楽しいプログラムが出来ます。
最近のエクセルは日本語でも良いのですが、古いバージョンを使っている人のために
アルファベットを使いましょう。
最後の行の”End Function”は、関数の終わりを示しています。
では、次に消費税を加えた定価を作る関数を作ってみましょう。
この場合、引数はSingle型、関数の戻り値はCurrency型(通貨型)にします。
Function teika(x As Single) As Currency
teika = x + x * 0.08
End Function
前と同じようにシートの”B1セル”に”=teika(A1)”と入力して下さい。
そして、A1セルに100と入力すれば、B1セルに108と表示されるはずです。
また、B1セルの書式設定が数値で表示が小数点以下二桁なら、A1セルに115と入力
すれば、B1セルに124.20と表示されるはずです。
さらに、B1セルのの書式設定で通貨を選択し、小数点以下の桁数を0とすれば、
消費税を加えた定価が表示されます。たとえば115円の商品の消費税込みの定価は
\124と表示されます。この場合小数点以下は四捨五入されます。
法律では、消費税の一円以下は、切捨てでも切り上げでも四捨五入でもいいことに
なっています。何でも確定申告の時、千円未満は切捨てなんだそうです。
たいていのお店では、切捨てにしているみたいです。会社によって端数処理が違って
皆さん困っているみたいです。まあ、消費税が10%になれば解決ですけどね。
前に戻る次に進む
最初に戻る