【ExcelVBA】for文 ネスト(入れ子)
for文の入れ子
Sub sample1()
Dim i As Integer
Dim j As Integer
Dim str As String
For i = 1 To 3
For j = 1 To 4
str = str & i & "年" & j & "組" & ", "
Next j
str = str & vbCrLf
Next i
MsgBox str
End Sub
【ExcelVBA】for文 Exit Forでループを抜ける
ある条件に合致した場合にループを抜けるなど。
Sub sample1()
Dim i As Integer
Dim subject As String
For i = 2 To 10
If Not IsNumeric(Range("B" & i)) Then
subject = Range("A" & i)
Exit For
End If
Next i
MsgBox subject & "には数値以外の値が入っています"
End Sub
【ExcelVBA】for文
■構文
For カウンタ名 = 初期値 To 到達値
処理
Next カウンタ名
■例
Sub sample1()
Dim arr() As Variant
Dim i As Integer
Dim str As String
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
For i = 0 To 9
str = str & arr(i) & ", "
Next i
MsgBox str
End Sub
■Stepの使い方
For カウンタ名 = 初期値 To 到達値 Step 増減数
処理
Next カウンタ名
※増減数が1の場合は「Step 増減数」の部分は省略可
Sub sample2()
Dim arr() As Variant
Dim i As Integer
Dim str As String
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
For i = 0 To 9 Step 2
str = str & arr(i) & ", "
Next i
MsgBox str
End Sub
Stepステートメントでマイナス値を指定すると、デクリメント(マイナス)で
逆順にループを回すことができる。
Sub sample3()
Dim arr() As Variant
Dim i As Integer
Dim str As String
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
For i = 0 To 9 Step -2
str = str & arr(i) & ", "
Next i
MsgBox str
End Sub
【ExcelVBA】if文
■構文
If 条件式1 Then
処理1
ElseIf 条件式2 Then
処理2
Else
処理3
End If
■例
Sub sample1()
Dim year As Integer
Dim str As String
'うるう年の場合
year = 2016
If year Mod 4 = 0 Then
str = str & year & "年はうるう年です。" & vbCrLf
Else
str = srt & year & "年はうるう年ではありません。" & vbCrLf
End If
'うるう年でない場合
If year Mod 4 = 0 Then
str = str & year & "年はうるう年です。" & vbCrLf
Else
str = srt & year & "年はうるう年ではありません。" & vbCrLf
End If
MsgBox str, vbInformation
End Sub
【ExcelVBA】配列
■配列の宣言、定義
・固定長配列
Dim 配列名(添字の上限値) As データ型名
・可変長配列
Dim 配列名() As データ型名
■初期化
・Eraseステートメントを使う方法
Erase 配列名
初期値はデータ型によって異なる。
・数値配列:0(ゼロ)
・文字列配列:長さ0(ゼロ)の文字列
・オブジェクト配列:Nothing
・バリアント配列:Empty
・Array関数を使う方法
Dim 配列名() As Variant
配列名 = Array(要素(0), 要素(1), ・・・)
■ReDimで再定義
ReDim 配列名(添字)
配列に代入されたデータを保持したまま要素数を変更する場合
ReDim Preserve 配列名(添字)
データ型の変更も可能だが、変更できるのは可変長配列の宣言時に
バリアント型で宣言した場合のみ。
■2次元配列(多次元配列)
Dim 配列名(添字の上限値, 添字の上限値, ・・・) As データ型名
次元ごとに「,」(カンマ)で区切って「()」内に並べる。
■セル範囲の値を配列の要素に一括で代入する
Sub Sample1()
Dim arr As Variant
arr = WorksheetFunction.Transpose(Range("A1:B5"))
Dim msg As String
Dim i As Integer
Dim j As Integer
For i = 1 To 5
For j = 1 To 2
msg = msg & arr(j, i) & ", "
Next j
msg = msg & vbCrLf
Next i
MsgBox msg
End Sub
配列arrの要素の値にアクセスするためのインデックス番号が
0からでなく1から始まっている。
Transpose関数により行と列が入れ替わっている。
■要素の値をセルに代入する
Sub Sample2()
Dim arr(2, 5) As Variant
Dim msg As String
Dim i As Integer
Dim j As Integer
For i = 0 To 4
For j = 0 To 1
arr(j, i) = i + 1 + 10 * j
msg = msg & arr(j, i) & ", "
Next j
msg = msg & vbCrLf
Next i
Range("A1:B5") = WorksheetFunction.Transpose(arr)
MsgBox msg
End Sub
Transpose関数を使って行と列を入れ替えて配列要素の値をセルに格納。
■UBound、LBoundで配列の要素数を取得する
配列の要素数を取得するには以下の式で計算し取得する。
要素数 = UBound関数の戻り値 - LBound関数の戻り値 + 1
■Forループで操作する方法
Dim i As Integer
For i = LBound(arr) To UBound(arr)
'arr(i)を使った処理
Next i
■For Eachで操作する方法
Dim Var As Variant
For Each Var In arr
'Varを使った処理
Next Var
【ExcelVBA】演算子
比較演算
No. | 演算子 | 説明 | 例 | 得られる結果 |
---|---|---|---|---|
1 | < | 小さい | 8 < 5 | FALSE |
2 | <= | 以下 | 3 <= 8 | TRUE |
3 | > | 大きい | 8 > 5 | TRUE |
4 | >= | 以上 | 3 >= 8 | FALSE |
5 | = | 等しい | 3 = 8 | FALSE |
6 | <> | 等しくない | 3 <> 8 | TRUE |
算術演算
No. | 演算子 | 説明 | 例 | 得られる結果 |
---|---|---|---|---|
1 | + | 足し算 | 8 + 5 | 13 |
2 | - | 引き算 | 10 - 4 | 6 |
3 | * | 掛け算 | 3 * 5 | 15 |
4 | / | 割り算 | 8 / 5 | 1.6 |
5 | \ | 割り算の商 | 8 \ 5 | 1 |
6 | Mod | 割り算の余り | 8 Mod 5 | 33 |
7 | ^ | べき乗 | 6 ^ 2 | 36 |
論理演算
No. | 演算子 | 説明 | 例 | 得られる結果 |
---|---|---|---|---|
1 | And | 論理積 | 8 > 4 And 2 <= 3 | TRUE |
2 | Or | 論理和 | 8 > 4 Or 4 <= 1 | TRUE |
3 | Not | 論理否定 | Not 8 > 4 | FALSE |