コンピュータに実行させる仕事を,その順番に詳しく書いたものがプログラムである. 一般のプログラミングでは,まず人間が読める形のプログラム(これをソースコードという)を, エディター(編集機能を特化させたワープロのようなもの)で作成し,これをコンピュータが理解できる機械語に翻訳(コンパイル)し,実行ファイルを作る必要がある.しかし,エクセルのマクロのようなVisual Basicを用いると,コンパイルを自動で行ってくれるので簡単にプログラムを実行できるのが利点である.
まず,マクロを使って簡単なプログラムを作ってみる.すなわち,マクロを保存し,保存されたマクロを編集することによってプログラムを作っていく.
最初に,次のようにセルに数値を入力するマクロを作る.新しいブック(Book1とする)を開き,メニュー→マクロ→マクロの記録を選び,マクロの名前として「math」を入力する.
次にセルA1,B1にそれぞれ2,5を入力する.
マクロの記録を終了し,Visual Basic Editorを開きマクロを確認する.次のようなマクロが保存されているはずである.
「ActiveCell.FormulaR1C1 = "2"」とは選択されているセルに”2”を入力する実行文,「Range("B1").Select」とはセルB1を選択する実行文である.すなわち,このままでは,いちいちセルを選択してからではないとセルの中に数値を入力する事ができない.それは面倒くさいので,直接セルA1,B1に数値を入力する方法がある.保存されたマクロの4行を消去し,下図の2行(SubとEnd
Subに挟まれた2行)のように書き直す.
各行を入力し終わったら必ず改行(リターンキーを押す)しておくこと.「Worksheets("Sheet1").Cells(1,1).Value = 2」とは,名前がSheet1のワークシートの1行1列目(すなわちセルA1)に2を入力せよ,という実行文である.図のように,セルB2は1行2列目すなわちCells(1,2)と表記できる.
編集し終わったら,マクロを保存しておく.保存するためにはVisual Basic
Editorのウィンドウの保存アイコンをクリックしておく.
このマクロを1度実行してみる.まず,Book1に戻り,先ほど入力した2,5を消去する.メニューからツール→マクロ→マクロ→を選び,開いたウィンドウからマクロ名がmathを選択し,実行ボタンを押す.すると,A1,B1セルに2,5が入力されたはずである.
このように,エクセルのVBを用いた場合,Visual Basic Editorで作成したプログラム(ソースコード)をそのまま実行する事ができる.マクロを保存したブックを閉じ,再度開く場合にエラーメッセージが表示される場合にはこのページを参照すること.
ここでは四則演算の結果をセルに入力してみる.先ほどから用いている「math」のマクロ(もうそろそろこれをソースコードと呼ぶことにする)を次のように編集する.
この例のように足し算は+,引き算は−,かけ算は*,わり算は/を使う.べき乗(2の3乗など)は^を使う.いくつかの演算が組み合わされる場合,その優先順序は通常の四則演算と同じである.必要ならば()を使う.
このソースコードを実行してみる.Book1に戻り,現在入力されている数値を全て消去する.メニューからツール→マクロ→マクロを選び,mathを選択し実行ボタンを押す.すると次のように数値が入力される.
何度も言うが,ソースコードを変更したら,必ずファイルを保存しておくこと.
次に,四則演算の式も出力(プログラムによりセルに入力)してみよう.文字を表示させるには,ダブルクォーテーション(”)で囲む. これらで囲まれた範囲でのみ全角文字が使用できる.すなわち,ソースコードを次のように編集する.
ここで,数式を出力するためのダブルクォーテーションの後は必ずスペースを入力すること.そうしないとちゃんと文字がセルに出力されない.単なる文字だけの場合は特にスペースは要らない.プログラムを保存し,Book1に戻りプログラムを実行してみる.実行する前には入力されている数値を消去すること.
別の計算をする時,いちいちプログラムを書き換えるのは面倒だし,いつも同じ数の計算しかできないのでは困る。 必要に応じて,人間がコンピュータに,数字を知らせることができるようにしたい. 人間が変数に値を入れることを入力という。
先ほどのプログラムを,変数を使って書き換えてみる. すなわち,エクセルのセルに入力されている数値を読み取り,変数に入力してから計算を行う.エディタをアクティブにして,次のようにソースコード「math」を変更する.前に入力した行は全部削除すること.
Sub math()
Dim a As Double, b As Double
a = Worksheets("Sheet1").Cells(1, 1).Value
b = Worksheets("Sheet1").Cells(1, 2).Value
Worksheets("Sheet1").Cells(3, 1).Value = "a + b"
Worksheets("Sheet1").Cells(4, 1).Value = "a - c"
Worksheets("Sheet1").Cells(5, 1).Value = "a * b"
Worksheets("Sheet1").Cells(6, 1).Value = "a / b"
Worksheets("Sheet1").Cells(3, 2).Value = a + b
Worksheets("Sheet1").Cells(4, 2).Value = a - b
Worksheets("Sheet1").Cells(5, 2).Value = a * b
Worksheets("Sheet1").Cells(6, 2).Value = a / b
End Sub
2行目の「Dim a As Double, b As Double」が変数a,とbを実数として宣言する宣言文である.「a = Worksheets("Sheet1").Cells(1, 1).Value」とは,1行1列目のセルの値を変数aに入力するための実行文である.
このプログラムを実行してみる.ファイルを保存し,Book1に戻り,今度はセルA1,B1に入力されている数値を残し,残りを全て消去する.メニューからツール→マクロ→マクロを選び,mathを選択して実行ボタンを押す.数式が文字式に変わり,計算結果は先ほどと同じように出力されたはずである.セルA1,A2に入力しておく数値を変えてプログラムを実行すれば,それにあわせて計算結果も変わる.各自確認しておくこと.
また,セルから数値を変数に入力させるのではなく,対話形式で数値を入力することもできる.これにはダイアログボックスを使用する.上記のソースコードで,a,bへの入力実行文を以下のように書き換える.
a = Application.InputBox(Prompt:="a の数値を入力してください。",
Type:=1)
b = Application.InputBox(Prompt:="b の数値を入力してください。", Type:=1)
Application.InputBox(Prompt:="a の数値を入力してください。", Type:=1)が,数値を入力するためのテキストボックス付のダイアログボックスを表示させるための実行文である.「Prompt:=」とはダイアログボックスに表示させる文字列を指定するためのオプションで,“”で囲まれた文字列が表示される.「Type:=」とは入力されるものの形式を指定するオプションである.例では数値形式である「1」を指定しており,数値以外のものが入力された場合にはエラーメッセージが表示される.
「ダイアログボックス」とはウインドウの中に使用者からの入力,指示を待つ機能を持ったものである<ダイアログ=会話・対話>.「メッセージボックス」と呼ばれるものもあるが,これは主に「メッセージ」だけを表示する場合が多く,「ボタン」によって判断の入力をさせるものである.
このままだと,入力された数値が何かが後から分からなくなるため,入力された数値をセルに出力する実行文も加えると,ソースコードは以下のようになる.
Sub math01()
Dim a As Double, b As Double
a = Application.InputBox(Prompt:="a の数値を入力してください。", Type:=1)
b = Application.InputBox(Prompt:="b の数値を入力してください。", Type:=1)
Worksheets("Sheet1").Cells(1, 1).Value = a
Worksheets("Sheet1").Cells(1, 2).Value = b
Worksheets("Sheet1").Cells(3, 1).Value = "a + b"
Worksheets("Sheet1").Cells(4, 1).Value = "a - c"
Worksheets("Sheet1").Cells(5, 1).Value = "a * b"
Worksheets("Sheet1").Cells(6, 1).Value = "a / b"
Worksheets("Sheet1").Cells(3, 2).Value = a + b
Worksheets("Sheet1").Cells(4, 2).Value = a - b
Worksheets("Sheet1").Cells(5, 2).Value = a * b
Worksheets("Sheet1").Cells(6, 2).Value = a / b
End Sub
このように,変数への入力には2通りの方法がある.どちらの方法が良いかは,自分のやりたいことによって変わるので,適宜判断すること.
プログラミング言語の=(代入)は,数学で使う=(等号)とは意味が異なる.
m = 1
mという変数に1という値を覚えさせる.
電卓のメモリーキーと同じ.
x = x + 1
xが覚えていた数に1を加え,またxに覚えさせ直す.
数学なら両辺にxがあるので, 0=1?という変な式だが,プログラムではよく使う.
ここまで習ったことは,まだまだプログラミングの初歩でエクセルだけで行える計算とも言える.これからは,エクセル,マクロだけでは難しいような処理をプログラミングで行うための基本を習っていく.