Excelを楽しもう
VBAの基礎
----------------
9月からPythonで始めるOpenCV4をやる予定
Sub and Function
準備
- デスクトップにelv_excelというフォルダを作成してください。
- エクセルで新規ファイルを作成してください。
- 1で作成したフォルダにelv.xlsmで保存してください。
- 開発タブからVBEを起動してください。
- プロジェクトウィンドウの今作ったelv.xlsmを右クリック挿入→標準モジュール
- 作成したModule1をダブルクリック
項目 | Sub | Function |
---|---|---|
マクロの表示 | 表示される | 表示されない |
引数 | とる | とる |
戻り値 | 返さない | 返す |
SubやFunctionで作成されたものをプロシージャと呼びます。
SubとFunctionでは違いがあります。
項目 | Sub | Function |
---|---|---|
マクロの表示 | 表示される | 表示されない |
引数 | とる | とる |
戻り値 | 返さない | 返す |
項目 | Sub | Function |
---|---|---|
マクロの表示 | 表示される | 表示されない |
引数 | とる | とる |
戻り値 | 返さない | 返す |
Sub テスト()
Call 割り切り確認(10)
End Sub
Sub 割り切り確認(ByVal num As Integer)
If num Mod 2 = 0 Then
Range("A1").Value = "割り切れます"
Else
Range("A1").Value = "割り切れません"
End If
End Sub
項目 | Sub | Function |
---|---|---|
マクロの表示 | 表示される | 表示されない |
引数 | とる | とる |
戻り値 | 返さない | 返す |
Sub 親関数()
Call Yobidashi(5, 4)
End Sub
Sub Yobidashi(a As Integer, b As Integer)
Dim result As Integer
result = a + b
Cells(1, 1).Value = result
End Sub
項目 | Sub | Function |
---|---|---|
マクロの表示 | 表示される | 表示されない |
引数 | とる | とる |
戻り値 | 返さない | 返す |
Sub 親関数2()
Cells(1, 1).Value = Yobidashi2(4, 8)
End Sub
Function Yobidashi2(a As Integer, b As Integer)
Dim result As Integer
result = a + b
Yobidashi2 = result
End Function
Let's make a Function
Function 分割(元文列, 区切り文字, 取出し番号)
分割後 = Split(元文列, 区切り文字)
分割 = 分割後(取出し番号 - 1)
End Function
Functionを利用して、エクセル上で使う関数の作成ができます。
MsgBox
こんなやつ
定数 | 値 | 内容 |
---|---|---|
vbOKOnly | 0 | [OK]ボタンのみを表示します |
vbOKCancel | 1 | [OK]ボタンと[キャンセル]ボタンを表示します |
vbAbortRetryIgnore | 2 | [中止]、[再試行]、および[無視]の3つのボタンを表示します |
vbYesNoCancel | 3 | [はい]、[いいえ]、および[キャンセル]の3つのボタンを表示します |
vbYesNo | 4 | [はい]ボタンと[いいえ]ボタンを表示します |
vbRetryCancel | 5 | [再試行]ボタンと[キャンセル]ボタンを表示します |
vbCritical | 16 | 警告メッセージアイコンを表示します |
vbQuestion | 32 | 問い合わせメッセージアイコンを表示します |
vbExclamation | 48 | 注意メッセージアイコンを表示します |
vbInformation | 64 | 情報メッセージアイコンを表示します |
vbDefaultButton1 | 0 | 第1ボタンを標準ボタンにします |
vbDefaultButton2 | 256 | 第2ボタンを標準ボタンにします |
vbDefaultButton3 | 512 | 第3ボタンを標準ボタンにします |
vbDefaultButton4 | 768 | 第4ボタンを標準ボタンにします |
vbApplicationModal | 0 | アプリケーションモーダルに設定します。メッセージボックスに応答するまで、現在選択中のアプリケーションの実行を継続できません |
vbSystemModal | 4096 | システムモーダルに設定します。メッセージボックスに応答するまで、すべてのアプリケーションが中断されます |
引数buttonsには、次の定数を使用できます。
[はい]ボタンと[いいえ]ボタンを表示し、注意メッセージアイコンを表示するには、引数buttonsに、定数vbYesNo と 定数vbExclamation の合計(vbYesNo + vbExclamation)を指定します。
定数 | 値 | 説明 |
---|---|---|
vbOK | 1 | [OK]ボタンが押された |
vbCancel | 2 | [キャンセル]ボタンが押された |
vbAbort | 3 | [中止]ボタンが押された |
vbRetry | 4 | [再試行]ボタンが押された |
vbIgnore | 5 | [無視]ボタンが押された |
vbYes | 6 | [はい]ボタンが押された |
vbNo | 7 | [いいえ]ボタンが押された |
戻り値
Sub Sample()
Dim rc As Integer
rc = MsgBox("処理を行いますか?", vbYesNo + vbQuestion, "確認")
If rc = vbYes Then
MsgBox "処理を行います"
Else
MsgBox "処理を中断します"
End
End If
MsgBox "いいえなら" & vbCrLf & "これは表示されない"
End Sub
Break Time
Iterative processing
繰り返し処理
プログラミングの基本の1つである繰り返し処理1
Dim カウンタ変数 As Long
For カウンタ変数 = 初期値 To 繰り返し回数
繰り返し回数までの処理
Next
For文
Sub Test()
Dim i As Long
Worksheets("Sheet1").Select
Cells(1, 1).Select
For i = 1 To 10
Cells(1, i).Value = i
Next
End Sub
Sheet1 のA1からA10まで上から順に1~10を入力
Sub Test2()
Dim i As Long
Worksheets("Sheet1").Select
Cells(1, 1).Select
For i = 1 To 10
Cells(i, 1).Value = i
Next
End Sub
Sheet1 のA1からJ1まで横に1~10を入力
プログラミングの基本の1つである繰り返し処理2
Dim 要素を受け取る変数名 As Variant
For Each 要素を受け取る変数名 In 配列やコレクションなどのグループ名
処理
Next 要素を受け取る変数名
For Each文
Sub SampleEach()
Dim myRange As Range
For Each myRange In Selection
myRange.Value = "Hello VBA!"
Next myRange
End Sub
Excelのセルを適当に
範囲選択して
実行すると
選択範囲全てに
処理が実行される
プログラミングの基本の1つである繰り返し処理3
Do While 条件式
条件式を満たすまで繰り返す処理
Loop
Do While文
Sub test3()
Dim i As Long
i = 1
Worksheets("Sheet2").Select
Cells(1, 1).Select
Do While i < 11
Cells(i, 1).Value = i
i = i + 1
Loop
End Sub
*Sheet2が無い人は手動で作成してください。
プログラミングの基本の1つである繰り返し処理3
Do Until 条件式
条件式を満たすまで繰り返す処理
Loop
Do Until文
Sub test4()
Dim i As Long
i = 1
Do Until Cells(i, 1) = ""
Cells(i, 2).Value = i
i = i + 1
Loop
End Sub
For文とDo文の違いは
For文が指定した回数だけ回って終わる。
というのに対して、Do 文の方 は、
ある条件が満たされなくなった時点で終わる。
作成する内容に合わせて使い分けてみましょう。
Conditional branch
If 条件式1 Then
条件式1を満たした場合の処理
ElseIf 条件式2 Then
条件式2を満たした場合の処理
Else
条件式1と条件式2を満たさなかった
場合の処理
End If
プログラミングの基本の1つである条件分岐1
If文
Sub 得点判定()
Dim intScore As Integer
On Error GoTo ErrCelVal
intScore = InputBox("得点を入力してください")
If 79 < intScore And intScore <= 100 Then
MsgBox " 天才です"
ElseIf 69 < intScore And intScore < 80 Then
MsgBox "もう一息で天才です"
ElseIf 59 < intScore And intScore < 70 Then
MsgBox "まぁまぁです"
ElseIf 0 < intScore And intScore < 60 Then
MsgBox "悲しいです"
Else
MsgBox "得点は 0?100の数字で入力してください"
End If
ErrCelVal:
MsgBox "セルに数値が入っていません。"
End Sub
プログラミングの基本の1つである条件分岐2
Select Case 変数
Case 条件式1
処理1
Case 条件式1
処理1
Case Elase
どの処理にも一致しなかった時の処理
End Select
Case文
Sub CaseTest()
Dim str As String
str = "中学生"
Select Case str
Case "小学生"
MsgBox "小学生です"
Case "中学生"
MsgBox "中学生です"
Case "高校生"
MsgBox "高校生です"
Case Else
MsgBox "入力が不正です"
End Select
End Sub
プログラミングの基本の1つである条件分岐2
Case文 or条件
Sub CaseTest2()
Dim age As Integer
age = 14
Select Case age
Case 7, 8, 9, 10, 11, 12
MsgBox "小学生です"
Case 13, 14, 15
MsgBox "中学生です"
Case 16, 17, 18
MsgBox "高校生です"
Case Else
MsgBox "入力が不正です"
End Select
End Sub
プログラミングの基本の1つである条件分岐2
Case文 toで範囲指定
Sub CaseTest3()
Dim age As Integer
age = 14
Select Case age
Case 7 To 12
MsgBox "小学生です"
Case 13 To 15
MsgBox "中学生です"
Case 16 To 18
MsgBox "高校生です"
Case Else
MsgBox "入力が不正です"
End Select
End Sub
プログラミングの基本の1つである条件分岐2
Case文 lsで比較条件
Sub CaseTest4()
Dim age As Integer
age = 8
Select Case age
Case Is < 7, Is > 18
MsgBox "7から18までの整数を入力してください"
Case 7 To 12
MsgBox "小学生です"
Case 13 To 15
MsgBox "中学生です"
Case 16 To 18
MsgBox "高校生です"
Case Else
MsgBox "入力が不正です"
End Select
End Sub
プログラミングの基本の1つである条件分岐2
Case文 ワイルドカード
Select Case True
Case 変数 Like 条件式1
処理1
Case 変数 Like 条件式2
処理2
Case Else
デフォルト(どの条件にも
一致しなかった場合)の処理
End Select
パターン | 説明 |
---|---|
? | 任意の1文字 |
* | 任意の数の文字 |
# | 任意の1文字の数字(半角) |
[charlist] | リストcharlistに指定した文字の中の任意の1文字 |
[!charlist] | リストcharlistに指定した文字以外の任意の1文字 |
Sub CaseTest5()
Dim str As String
str = "中学"
Select Case True
Case str Like "小*"
MsgBox "小学生です"
Case str Like "中*"
MsgBox "中学生です"
Case str Like "高*"
MsgBox "高校生です"
Case Else
MsgBox "入力が不正です"
End Select
End Sub
If文とCase文の使い分けは、
and 条件を使いたい時はIf文。
それ以外はCaseの方が楽だと思います。
まとめ
SubとFunctionの違いについて学びました
関数には引数を渡す事ができます
Functionは戻り値を返す事ができます
Excel上で使える自分専用の関数を作成する事ができます
MsgBoxの出し方を学びました
繰り返し処理 For文 For Each文とDo While文、Do Until文
条件分岐 If 文 Case文
Thank you!
See you next Time!
elv_excel3
By Ayako Matsumoto
elv_excel3
- 1,068