Excelを楽しもう

VBAの基礎

----------------

9月からPythonで始めるOpenCV4をやる予定

Sub and Function

準備

  1. デスクトップにelv_excelというフォルダを作成してください。
  2. エクセルで新規ファイルを作成してください。
  3. 1で作成したフォルダにelv.xlsmで保存してください。
  4. 開発タブからVBEを起動してください。
  5. プロジェクトウィンドウの今作ったelv.xlsmを右クリック挿入→標準モジュール
  6. 作成した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,080