前書き
人生には不運がつきもので、そのなかでもExcelをVBAでいじらなきゃいけないというのはなるべく遭遇したくない類いの不運ですよね?
前にそんな境遇になったときにVBAについて調べたやつを転記しておきます。クッソ初歩的な内容です。qiitaでは全角で赤四角表示になるようですが直すのも面倒なので各自読み進めて頂きたく。
Visual Basic for Application
##1. 全般
###命名
- VBAはケースセンシティブである。変数Varと変数varは別々の変数として定義される。
- 変数名・関数名は文字で始まらなければいけない。
- 変数名・関数名にスペースは使えない。
- 変数名・関数名に記号は使えない。ただし、アンダースコア(_)は例外。
###型(変数・定数)
数値 Integer 整数
数値 Long 小数
数値 Double 倍精度少数
文字 String 文字列。""で囲まれた
真偽 Boolean TrueもしくはFalseを取る。
その他、Class を用いた型の定義が可能。
###変数の宣言
構文
Dim name As type
例1
Dim i As Integer
###定数の宣言 構文
Const name As type
例1
Const ci As Integer
###算術演算子
+ 加算
- 減算
* 乗算
/ 除算
^ べき乗算
###比較演算子
= 左項と右項の値が等しい
> 左項の値が右項の値より大きい
< 左項の値が右項の値より小さい
>= 左項の値が右項の値以上
<= 左項の値が右項の値以下
<> 左項と右項の値が等しくない
###論理演算子
And 左項と右項の両方が真、ならば真
Or 左項と右項のどちらかが真、ならば真
Not 論理値反転
##2. 関数
###Sub Procedure
構文
Sub name
Code
End Sub
例
Sub PM_MyFirstSub
MsgBox ("Hello World")
End Sub
##3. フローコントロール
###3-1.条件分岐
###If...Then...Else文
構文
If condition Then
Code
Else
Code
End If
例
Sub PM_TestingIfThenElse
Dim Number As Integer
Number = Inputbox (“Give a number:”)
If Number > 500 Then
MsgBox (“The number you gave is greater than 500.“)
Else
MsgBox (“The number you gave is less than 500.”)
End If
End Sub
###Select...Case文
構文
Select Case value
Case condition
Code
Case condition
Code
Case condition
Code
Case Else
Code
End Select
例1
Select Case value
Case 1
myColor = 3 '赤
Case 2
myColor = 6 '黄
Case 3,4
myColor = 8 '水色
Case Else
myColor = 10 '緑
End Select
例2
Select Case value
Case Is < 10
myColor = 3 '赤
Case Is < 20
myColor = 6 '黄
Case Is < 30
myColor = 8 '水色
Case Else
myColor = 10 '緑
End Select
例3
Select Case value
Case 1 To 9
myColor = 3 '赤
Case 10 To 19
myColor = 6 '黄
Case 20 To 29
myColor = 8 '水色
Case Else
myColor = 10 '緑
End Select
###3-2.繰り返し
###For...Next文
構文
For counter = beginValue To endValue [step Value]
Code
Next counter
例
Sub PM_TestingForNextLoop
Dim Counter As Integer
For Counter = 10 To 0 Step -2
MsgBox (Counter)
Next Counter
End Sub
###Do While...Loop文
構文1
Do While condition
Code
Loop
構文2
Do
Code
Loop While condition
例2
Sub PM_TestDoWhileLoop1
Dim Number As Long
Do While Number<500
Number = InputBox("Give a number:")
Loop
End Sub
###3-3.例外処理
###On Error GoTo
構文
Code
On Error GoTo label
Code
label:
Code
例
Sub test()
Dim x
On Error GoTo ErrorHandler
x = Range("A1").Value / Range("B1").Value
Range("c1").Value = x
MsgBox "計算が終わりました"
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しましたので終了します"
End Sub
Errオブジェクト
Err.Number エラーを指定する数値を設定
Err.Source 最初にエラーを発生させたオブジェクトまたはアプリケーションの名前を示す文字列式を設定
Err.Description エラーを説明する文字列を取得または設定
Err.HelpFile ヘルプ ファイルへの絶対パスを含む文字列式を設定
Err.HelpContext ヘルプ ファイルのトピックを表すコンテキストIDを含む整数を設定
Err.LastDLLError DLLの呼び出しにより作成されたシステムエラーコード
エラーコードとメッセージ
エラーコード エラーメッセージ
3 Return に対応する GoSub がありません。
5 プロシージャの呼び出し、または引数が不正です。
6 オーバーフローしました。
7 メモリが不足しています。
9 インデックスが有効範囲にありません。
10 宣言が重複しています。 (バージョン 5.0 および 7.0)
10 この配列は固定されているか、または一時的にロックされています。 (バージョン 97)
11 0 で除算しました。
13 型が一致しません。