VBA入門② No.8 繰り返し処理(条件)「Do〜Loop」

  • Do〜Loopを利用した繰り返し処理には2種類の方法があります
  • 1つは「While」を使った条件がtrueの間繰り返す処理
  • 2つめは「Until」を使った条件がtrueになるまで繰り返す処理

文法(While)

Do While 条件式
    処理内容
Loop

文法(While)

Do Until 条件式
    条件式を満たすまで繰り返す処理
Loop
続きを読む

VBA入門② No.7 繰り返し処理 「For〜Next」

  • 同じ処理を繰り返す方法です
  • カウンター用の変数を用意し、それが決められた最大値になった時点で、処理をストップします

文法

'デフォルトでは1回ループする度にカウンタ用変数が+1されます
For カウンタ用変数 = 初期値 To カウンタの最大値
    処理内容
Next

'STEPを利用して、ループ度の加算数を指定することも可能です
'下記の場合は、1回ループする度にカウンタ用変数が+2されます
For カウンタ用変数 = 初期値 To カウンタの最大値 Step 2
    処理内容
Next
続きを読む

VBA入門② No.6 条件分岐(複数) 「Select Case〜」

  • VBAでの条件分岐
  • 複数の条件により処理を分岐させたい場合、if文を利用するよりSelect Caseを利用した方が綺麗なコードを書くことができます

文法

Select Case 変数
    Case1
        変数=1の場合の処理
    Case2
        変数=2の場合の処理
    Case Else
       条件が満たされなかった場合の処理
End Select
続きを読む

VBA入門② No.5 条件分岐 「If〜Else」

  • VBAでの条件分岐
  • 「もし〜なら〜する」という書き方です

文法

If 条件文1
    条件1に当てはまった時の処理
ElseIf 条件文2
    条件1に当てはまらず、条件2に当てはまった時の処理
Else
    条件1にも2にも当てはまらなかった時の処理
End If
続きを読む

VBA入門② No.4 サブプロシージャとファンクションプロシージャ

  • プロシージャはプログラムをまとめて、整理・再利用するための処理単位なんだ
  • サブプロシージャとファンクションプロシージャの2種類の方法があるから、違いを説明するよ
  • サブプロシージャは引数を受け取ることはできるけど、戻り値がない(一方通行)
  • ファンクションプロシージャは、引数を受け取ることもできるし、戻り値がある
  • ようするに、サブプロシージャにはreturn(javascript)が無くて、ファンクションプロシージャーにはあるんだ!

サブプロシージャ

  • サブプロシージャの場合は、値を渡すだけ
  • 変数(myHello)に変化はありませんので、アラート(Hello)が表示されます
Option Explicit
'呼び出し元のプロシージャ
Sub myMain()
Dim myHello As String
myHello = "Hello"

myAlert myHello 'サブプロシージャを呼び出す

MsgBox myHello
End Sub

'呼び出される側のプロシージャ
Sub myAlert(ByVal myHello As String)

myHello = myHello & " World"

End Sub

ファンクションプロシージャ

  • ファンクションプロシージャは、値を渡して実行した内容を、戻り値として変数に返しています
  • 下記の場合、ファンクションプロシージャの処理が変数(myHello)に戻り値として返るので、アラート(Hello World!!)が表示されます
Option Explicit
'呼び出し元のプロシージャ
Sub myMain()

Dim myHello As String
myHello = "Hello"

myHello = myAlert(myHello) 'ファンクションプロシージャを呼び出す

MsgBox myHello
End Sub

'呼び出される側のプロシージャ
Function myAlert(ByVal myHello As String)

myHello = myHello & " World!!"
myAlert = myHello

End Function

VBA入門② No.3 引数を渡してプロシージャを実行する「ByVal,ByRef」

  • 他のサブプロシージャに引数を渡して呼び出す際、値渡し(ByVal)と参照渡し(ByRef)の二つの方法があるよ
  • 値渡しと参照渡しの違いは、引数をプロシージャに渡した際、渡した引数にも影響が出るかでないかの違いなんだけど…
  • 説明が難しいので、とりあえずサンプルを見てください><

文法

Option Explicit

'呼び出し元のプロシージャ
Sub myMain()

Call myAlert("HOGEHOGE")   'myAlertプロシージャに引数を渡して実行

End Sub

'呼び出される側のプロシージャ
Sub myAlert(ByVal myHello As String)

MsgBox myHello

End Sub

Callは省略してもOK

  • Callを省略する場合は、引数を渡す際のカッコ()も省略する必要があります
Option Explicit

'呼び出し元のプロシージャ
Sub myMain()

myAlert "HOGEHOGE" 'myAlertプロシージャに引数を渡して実行

End Sub

'呼び出される側のプロシージャ
Sub myAlert(ByVal myHello As String)

MsgBox myHello

End Sub
続きを読む

VBA入門② No.2 変数の宣言を強制する「Option Explicit」

  • Option Explicitは、変数のタイプミスを防ぐために、宣言を強制するステートメントだよ
  • 先頭に記述しておけば、宣言していない変数は利用不可となります

これはエラー(変数を宣言しないで利用)

Option Explicit
Sub myAlert()

myHello = "Hello World!!"
MsgBox myHello             '宣言していない変数の中身をアラートで表示

End Sub

これはOK(変数を宣言してから利用)

Option Explicit
Sub myAlert()

Dim myHello As String      '変数を文字列型で宣言

myHello = "Hello World!!"
MsgBox myHello             '変数の中身をアラートで表示

End Sub