lesson for Excel VBA
back
§1 Basicの基礎
   
コード コードの説明
Set setcell = Worksheets("Sheet1").Range("B2") Sheet1は 原点を定めたいシートのシート名です。ここではSheet1という最初から付けられているシート名にしました。シート名はダブルクォーテイションで囲みます。
B2はそのシートの中で原点としたいセル名です。どこを指定してもかまいません。セル名もダブルクォーテイションで囲みます。Rangeの前にドッドがあることに注意してください。
With setcell この行からEnd Withまでの行は上記の条件を適応させます」
と言う命令。
A = .Offset(0, 0) 原点から ( この例ですとB2セルから ) 縦下方向に 0、右方向に 0行ったセルつまりB2セル自身の値を Aに代入しなさいと言う命令。Offsetの前にドッドがあるのに注意。
B = .Offset(1, 0) B2セルから下に1、右に 0 のセルつまりB3セルの値を Bに代入。
End With 条件適応の終わりと言う命令。
以上で、AとBの変数にSheet1のセルの値が代入されました。

 2-2 シート上への情報の書き出し方法

シートへの情報の書き出しは、取得方法とは逆に、変数に格納されている情報をセルに代入します。原点等を指定するのは 2-1と同様な考え方です。
コード コードの説明
Set setcell = Worksheets("Sheet1").Range("B2") 取得時と同じ。
With setcell 取得時と同じ。
.Offset(3, 0) = C
B2セルから下に3、右に0、つまりB5セルにCの
値を書き出しなさいと言う命令。
Offsetの前にドッドがあるのに注意。
.Offset(4, 0) = D B2セルから下に4、右に 0 のセル ( B6セル)に Dを 代入
.Offset(5, 0) = E B2セルから下に5、右に 0 のセル ( B7セル)に E を代入
.Offset(6, 0) = F B2セルから下に6、右に 0 のセル ( B8セル)に F を代入
End With 取得時と同じ

1. 変数と四則演算
 変数と言うと数学の嫌いな人はアレルギー反応を起こしてしまうかもしれませんね。 しかしBasicでは数値や文字を入れる箱を変数と考えて下さい、この変数と言う概念は大変大切です。例えば、AとBが任意の数値 ( ここではとりあえず整数とします ) が入る箱つまり数値変数とします。この時 A+B の結果を C という変数に格納したい場合Basicでは C=A+B と表します。 これは CイコールAプラスBという意味ではありません。 AプラスB の結果を C に代入する、または格納するという命令です。
 では A-B の結果を D に格納する場合は? そう、D=A-B ですね。同様に掛け算、割り算の場合は、E=A*B、F=A/B という風に表します。掛け算は
*  印 ( アステリスク ) 、割り算は /  印 ( スラッシュ )を使うことに注意して下さい。以上をプログラム風に書くと、

' 四則演算のプログラム
Dim A , B , C , D , E as integer
Dim F as single
C = A + B
D = A - B
E = A * B
F = A / B


と言う具合になります。 ここでちょっと脱線しますが,最初の行の' 四則演算・・・・はコメント行といい、プログラム上何も機能しません。文字通りコメントを表すのに用います。先頭にシングルクォーテイションまたは REM をつけてください。
また、 Dim 以降の文はA,B,C,D,Eは整数の変数ですよ、二行目のDim文はFは単精度の小数ですよ、と宣言している文です。 このように宣言しておく事により、変数に意味付けができたり、確保する箱の容量を節約できたりします。今のところこの程度の理解で良いと思います。この Dim文がなくてもVBAのほうで自動的にある変数として解釈してくれます。また変数の名前をつける時には以下のような約束があります。

変数名には、文字 (英数字、漢字、ひらがな、カタカナ) とアンダスコア (_) を使うことができます。スペースや記号は使えません。変数名の先頭の文字は、英字、漢字、ひらがな、カタカナのいずれかでなければなりません。また、変数名の長さは、半角で 255 文字以内でなければなりません。
ところで、上のようなことはVBAを使わなくてもExcelのシートで計算できるじゃないか、と言う人がいるかと思います。
確かにそのとおり。実はシートでも同じことができますね。 C1 セルに =A1+B1 と記入すれば足し算の結果が表示されます。ですから一つ一つのセルが立派な変数なのです。だけどここでは我慢して VBAにお付き合いしてください。
 それでは、上で書いたコードで本当に計算ができるかどうか確かめてみましょう。それには若干の予備的な技術が必要です。これは遅かれ早かれExcel上でVBAを使用するために必要不可欠なテクニックです。BASICの基本からは若干はずれますが、ここで説明しておきたいと思います。

2. シート上の情報( 文字や数値 )の取得とシート上への情報の書き出し方
2-1 シート上の情報の取得方法
この方法には色々なテクニックが有りますが、私がいつも使用している方法を紹介します。コードは下記のように書きます。
下記のコードで太文字以外の記述は決まりものと考えてください。なお実際にコードを記述するときは罫線は書きません。
念のため。下の例はSheet1シートのB2セル,B3セルにある値を取得する例です。
この方法の原理は取得したいデータを、任意のセルを原点とし、そこからの座標を指定しそこのデータを取得しようとするものです。座標は原点に対して右記の方法で指定します .Offset( 下方向セル数 、 右方向セル数 )。左のかっこの中と反対方向の場合はセル数にマイナス符号を付けます。
3. プログラムの実行
読み込み --> 計算処理-->書き出しを一連の処理とした時は一組の With setcell 〜 End With間に上記のコードを書くことができます。下記にデータを読み込み、四則演算をしてシートにその結果を書き出すまでのコードを示します。ただし最初と最後の行に新しい命令がありますが今のところ、これも決まり物として理解してください。

Sub FROA( )
' FROA は the Four (fundamental) Rules Of Arithmetic(四則演算)の略です

' 変数の宣言
Dim A , B , C , D , E as integer
Dim F as single

Set setcell = Worksheets("Sheet1").Range("B2")
With setcell


'シートからの値の読み込み
A = .Offset(0, 0)
B = .Offset(1, 0)

' 四則演算
C = A + B
D = A - B
E = A * B
F = A / B

' 結果のシートへの書き出し
.Offset(3, 0) = C
.Offset(4, 0) = D
.Offset(5, 0) = E
.Offset(6, 0) = F
End With

End Sub

以上の文をExcel のModule1のエディター内へカットアンドコピーしてください( Module1の挿入は§0を参照してください ) 。次に画面をシートに移します。( 下の 
A 部分のマークをクリックします )

シート上に下の B と同じように文字を記入してください。また B2,B3セルに任意の整数を代入します。そして C のボタンを押すと定義済みのマクロ( プログラム )名が表示されます。今は FROAのみです。ここで実行ボタン D を押すと先ほど記入したプログラムが実行され、計算結果が表示されます。うまく表示されましたか?
少し長い説明になりましたが。これで最初に書いたコードがちゃんと動作することが確認できました。
これを変更し、皆さん自身で簡単なマクロを作成してみてください。
§1続く
・・・・・・