sironekotoroの日記

Perl で楽をしたい

Excel VBAスタンダード 公式テキスト 6章 ステートメント

6-1.SelectCaseステートメント

繰り返しや分岐等、マクロの実行を成業する命令がステートメントです。マクロでは、そうした制御が不可欠です。しかし、ほとんどのステートメントはマクロ記録で記録されませんので、自分で学習しなければなりません

  • なるほど。
Option Explicit

Sub Macro1()
'
' Macro1 Macro
'
    If IsDate(Range("A1").Value) = True Then
        Select Case Format(Range("A1").Value, "aaa")
            Case "月", "水", "金"
                Range("B1").Value = "可燃ごみ"
            Case "火"
                Range("B1").Value = "可燃ごみ"
            Case Else
                Range("B1").Value = "ごみは出せません"
            End Select
    End If
    
'
End Sub
  • Caseに複数の条件を設定したい時
    • Case 1,3,5
      • 1か3か5の時
    • Case 10 To 20
      • 10から20のあいだ
  • Case条件で、「値」に指定した評価条件を比較する時
    • Case Is < 30
      • 30以下の場合

6-2.Do...Loopステートメント

  • 繰り返しの前で条件を判定する
Do 条件
    処理
Loop
  • 繰り返しの後で条件を判定する
Do
    処理
Loop 条件
  • While
    • 条件が正しい間繰り返す
  • Until
    • 条件が正しくないときに繰り返す
Option Explicit

Sub Macro1()
'
' Macro1 Macro
'
Dim n As Long
n = 1
Do While Cells(n, 1) <> ""
    Cells(n, 2).Value = Cells(n, 1).Value * 2
    n = n + 1
Loop

'
End Sub

6-3.For Each...Nextステートメント

  • グループのメンバを1つずつ順番に取り出して操作
    • これはPerlっぽいというか、そのものだ・・・わかる!
' ワークシート名をmsgboxで表示する
Dim ws As Worksheet
For Each ws In Worksheets
MsgBox ws.Name
Next ws
' A1からA3までのフォントの色を赤くする
Dim c
For Each c In Range("A1:A3")
    c.Font.ColorIndex = 3
Next c

6-4.Exitステートメント

  • Exit Sub
  • Exit Function
  • Exit For
    • Forループの中で使うことで、Forループを抜ける
  • 'Exit Do'
' A1~A3、A5,A6セルに数字を入れる(A4セルは空)
' Exit Subでプロシージャが終了するのでMsgboxは表示されない
Dim i As Long
    For i = 1 To 6
        If Cells(i, 1).Value = "" Then
        Exit Sub
    Else
        Cells(i, 1).Font.ColorIndex = 3
    End If
    
    Next i
    MsgBox "終了しました"
' A1~A3、A5,A6セルに数字を入れる(A4セルは空)
' Exit ForでForループを抜けるが、プロシージャが
' 終了するわけではないので、Msgboxが表示される
Dim i As Long
    For i = 1 To 6
        If Cells(i, 1).Value = "" Then
        Exit For
    Else
        Cells(i, 1).Font.ColorIndex = 3
    End If
    
    Next i
    MsgBox "終了しました"
' A1~A3、A5,A6セルに数字を入れる(A4セルは空)
' Exit DoでDo..Whileループを抜けるが、プロシージャが
' 終了するわけではないので、Msgboxが表示される
Dim n As Long

Do
n = n + 1
If Cells(n, 1).Value = "" Then
    Exit Do
Else
    Cells(n, 1).Font.ColorIndex = 3
End If

Loop While n < 100

MsgBox "終了しました"