


![]()

エクセルは変数の集まりです。
各セルA1・A2・A3・A4・A5・・・・・・・・・・
B1・B2・B3・B4・B5・・・・・・・・・・・・・
各セルの列番号・行番号が変数の名前です。
セル以外の変数を使ってプログラムを作るのがVBAです。
(1)セル変数を使う計算式
(2)セル変数を使って計算式を追加する
(3)数値型変数を使う例題
(4)文字型変数を使う例題

VBA実践塾ではセル番号をCells(行,列)形式で表します。
その理由は行番号を変数を使ってデータベースとして使うからです。
大阪・名古屋・東京の1月の合計はエクセルの計算式では
=B2+B3+B4になります。
VBAでは
Sub keisan()
Cells(5, 2) = Cells(2, 2) + Cells(3, 2) + Cells(4, 2)
End Sub
になり計算ボタンにリンクさせています。
大阪の数値を変えるとエクセルの計算式だと瞬時に答えが変わりますが、VBAでは毎回ボタンをクリックしないといけません。
VBAの場合はシートに計算式が入力されていませんので間違って式を消してしまうことはありません。

エクセルで合計・消費税・税込金額を計算する式は
=B3+B4+B5
=B6*D1
=B6+B7
になります。
ではVBAではどのようになるでしょうか。
Sub keisan2()
Cells(6, 2) = Cells(3, 2) + Cells(4, 2) + Cells(5, 2)
Cells(7, 2) = Cells(6, 2) * Cells(1, 4)
Cells(8, 2) = Cells(6, 2) + Cells(7, 2)
End Sub
消費税の入っているセルは8%に変わりますね。
Cells(1, 4)が消費税だとわかりにくいですね。
次の問題で分かりやすくしていきます。

エクセルだと範囲を選択してオートサムのアイコンをクリックすれば計算式が一度に作られますね。
VBAならこのように簡単にはいきません。
まず消費税という変数を定義しておきましょう。
dim 消費税 as long
変数を定義しなくても通常はつかえます。
VBA実践塾ではあえてツール→オプション→編集→コードの設定→自動構文チェックにチェックをつけています。
コードの先頭にOption Explicitが常に表示しています。
これがあると変数は必ず定義しないとエラーになります。
プログラムを作っていくと変数を定義していた方がバグ(エラー)を修正しやすいのがわかってきます。
ではVBAのコードを紹介しておきます。
Sub keisan3()
Dim 消費税 As Double
Dim i As Long
消費税 = Cells(1, 4)
'1月の計算
Cells(6, 2) = Cells(3, 2) + Cells(4, 2) + Cells(5, 2)
Cells(7, 2) = Cells(6, 2) * 消費税
Cells(8, 2) = Cells(6, 2) + Cells(7, 2)
i = 1
'2月の計算
Cells(6, 2 + i) = Cells(3, 2 + i) + Cells(4, 2 + i) + Cells(5, 2 + i)
Cells(7, 2 + i) = Cells(6, 2 + i) * 消費税
Cells(8, 2 + i) = Cells(6, 2 + i) + Cells(7, 2 + i)
i = i + 1
'3月の計算
Cells(6, 2 + i) = Cells(3, 2 + i) + Cells(4, 2 + i) + Cells(5, 2 + i)
Cells(7, 2 + i) = Cells(6, 2 + i) * 消費税
Cells(8, 2 + i) = Cells(6, 2 + i) + Cells(7, 2 + i)
i = i + 1
'合計の計算
Cells(3, 2 + i) = Cells(3, 2 + i - 3) + Cells(3, 2 + i - 2) + Cells(3, 2 + i - 1)
Cells(4, 2 + i) = Cells(4, 2 + i - 3) + Cells(4, 2 + i - 2) + Cells(4, 2 + i - 1)
Cells(5, 2 + i) = Cells(5, 2 + i - 3) + Cells(5, 2 + i - 2) + Cells(5, 2 + i - 1)
Cells(6, 2 + i) = Cells(6, 2 + i - 3) + Cells(6, 2 + i - 2) + Cells(6, 2 + i - 1)
Cells(7, 2 + i) = Cells(7, 2 + i - 3) + Cells(7, 2 + i - 2) + Cells(7, 2 + i - 1)
Cells(8, 2 + i) = Cells(8, 2 + i - 3) + Cells(8, 2 + i - 2) + Cells(8, 2 + i - 1)
i = i + 1
'消費税の計算
Cells(3, 2 + i) = Cells(3, 2 + i - 1) * 消費税
Cells(4, 2 + i) = Cells(4, 2 + i - 1) * 消費税
Cells(5, 2 + i) = Cells(5, 2 + i - 1) * 消費税
Cells(6, 2 + i) = Cells(6, 2 + i - 1) * 消費税
i = i + 1
'総合計の計算
Cells(3, 2 + i) = Cells(3, 2 + i - 2) + Cells(3, 2 + i - 1)
Cells(4, 2 + i) = Cells(4, 2 + i - 2) + Cells(4, 2 + i - 1)
Cells(5, 2 + i) = Cells(5, 2 + i - 2) + Cells(5, 2 + i - 1)
Cells(6, 2 + i) = Cells(6, 2 + i - 2) + Cells(6, 2 + i - 1)
End Sub
プログラムの先頭に‘がついているのは注釈(コメント)です。
コメントアイコンをクリックするとつきます。
コメントアイコンが表示されていない場合は表示→ツールバー→編集をクリック
すると出てきます。
変数の型はアベノ塾では普通long型とstring型を使いますが今回のように小数点の場合はdouble型を使います。
小数点を使う人は始めから数値はlong型よりdouble型を使った方が楽でしょう。
今回のポイントは消費税という変数にCells(1, 4)を格納するところです。
変数iを使わず直接座標値を指定した方がわかりやすいですがi = i + 1になれてもらうことと訓練のためにあえて使いました。

文字型も数値型も変数の使い方は同じです。
今回は日付関数・時間関数の使い方も勉強しましょう。
文字列の連結は&でつなぎます。
メッセージボックス内での改行はvbCrLfを使います。
ではVBAのプログラムを参考にしてください。
Sub moji()
Dim tuki As String
Dim 日 As String
Dim hi As Long
tuki = Cells(4, 1)
日 = Cells(5, 1)
hi = Day(Date)
Cells(1, 3) = Cells(1, 1) & Cells(2, 1) & Year(Date) & Cells(3, 1) & Month(Date) & tuki & hi & 日
Cells(2, 3) = "時間は" & Hour(Time) & "時" & Minute(Time) & "分" & Second(Time) & "秒"
End Sub
Sub mojimsg()
Dim tuki As String
Dim jikan As String
tuki = Cells(1, 1) & Cells(2, 1) & Year(Date) & Cells(3, 1) & Month(Date) & Cells(4, 1) & Day(Date) & Cells(5, 1)
jikan = "時間は" & Hour(Time) & "時" & Minute(Time) & "分" & Second(Time) & "秒"
MsgBox tuki & vbCrLf & jikan
End Sub

Sub IFの下を実行しない()
Dim yesno As Long
yesno = MsgBox("実行する(Yes)・しない(No)", vbYesNo)
If yesno = 6 Then
MsgBox "IFの中実行"
Else
Exit Sub
End If
MsgBox "IFの外実行"
End Sub

Option Explicit
Dim call内の判断 As Long
Sub callの判断でIFの下を実行しない()
Call callの判断
If call内の判断 = 6 Then
MsgBox "IFの親の中実行"
Else
Exit Sub
End If
MsgBox "IFの親の外実行"
End Sub
Sub callの判断()
call内の判断 = MsgBox("実行する(Yes)・しない(No)", vbYesNo)
If call内の判断 = 6 Then
MsgBox "IFの子の中実行"
Else
Exit Sub
End If
MsgBox "IFの子の外実行"
End Sub
For i = 2 To lastrow
kei = kei + Cells(i, 2)
Next

Dim 合計(10) As Long
For i = 3 To lastRow1
For j = 0 To 10
合計(j) = 合計(j) + Worksheets("レッサー売店").Cells(i, j + 4)
Next
Next
For j = 0 To 10
Worksheets("レッサー売店").Cells(i, j + 4) = 合計(j)
Next