sironekotoroの日記

Perl で楽をしたい

Excel VBA ベーシック 公式テキスト 7章

ステートメント

Ifステートメント

  • とにもかくにも、やっとif文
    • 割と飽きてきてた。
    • やっぱ、覚えるだけではなく、動いて動かして、ってしないとね。
  • セルA1が空欄の時に100を入れる
Sub sample()
    If Range("A1").Value = "" Then
        Range("A1").Value = 100
    End If
End Sub
  • このifステートメント内の「=」は右辺を左辺に代入」ってヤツではなく、「値が等しい、イコール」であるとの意味。
    • Perlで言うところの「==」と理解。
  • 複数条件は論理式でまとめると効率が良さそう。
Sub sample()
    If Range("A1").Value <> "" And Range("B1").Value > 0 Then        
            Range("C1").Value = "OOKK"
    End If        
End Sub
  • Elseのはいるタイミング。 なお、ElseIFで更に条件を追加する事が出来る。
Sub sample()
    If Range("A1").Value > 100 And Range("A1").Value < 200 Then
        Range("B1").Value = "OK"
    Else
        Range("B1").Value = "NG"
    End If
End Sub

For ... Next ステートメント

  • おなじみ無限ループ製造構文
  • Hello1というメッセージボックスが出てきて、okボタンを押すとHello2,さらにok押すとHello3が出てくるというもの
  • next i ってあえて書かなくても良いのに。全部のループにあるんだし・・・
Sub lesson()
    Dim i As Long
    For i = 1 To 3
        MsgBox "Hello" & i
    Next i
End Sub
  • セルA1〜A3にHelloと入れる。
  • For Next ステートメントでセルを指定するときはCellsを使うのが一般的との事。
    • まぁ、Rangeだと変数を入れるところ無いものな。実は入れられたりするんかな?
Sub lesson()
    Dim i As Long
    For i = 1 To 3
        Cells(i, 1).Value = "Hello" & i
    Next i
End Sub
  • セルA1とB1の合計をC1に入れる
Sub lesson()
    Dim i As Long
    For i = 1 To 5
        Cells(i, 3).Value = Cells(i, 1).Value + Cells(i, 2).Value
    Next i
End Sub
  • For Next では制御用の変数が1ずつ増える。これを任意の数だけ増やすにはstepを使う
  • 一行おきにVBAとセルに入れる
Sub sample()
    Dim i As Long
    For i = 1 To 5 Step 2
        Cells(i, 1).Value = "VBA"
    Next i
End Sub

Withステートメント

  • オブジェクトの省略
  • いまいち使い手がわからない・・・
  • 3行目、.Range.から始まってる事に注意
  • このようにする事で、Range("A1”)Withステートメントで指定されたSheet2の特定のセルである、という事を示す。
Sub sample()
    With Sheets("Sheet2")
        .Range("A1").Value = "Hello"
    End With
End Sub
  • .が無い場合には、Withステートメントの記述にかかわらず、アクティブシートのA1が対象となる
  • 下の例をSheet3ひらいて実行すると、Sheet3のA1セルにHelloと入力される
  • .がないだけで!
Sub sample()
    With Sheets("Sheet2")
        Range("A1").Value = "Hello"
    End With
End Sub

FizzBuzz

  • For文とIf文を勉強したらこれをやらねば
  • dankogaiの影響受け過ぎと思いつつも。
Sub FizzBuzz()

Dim i As Long
For i = 1 To 100
    
    If i Mod 15 = 0 Then
        Cells(i, 1).Value = "FizzBuzz"
    ElseIf i Mod 3 = 0 Then
        Cells(i, 1).Value = "Fizz"
    ElseIf i Mod 5 = 0 Then
        Cells(i, 1).Value = "Buzz"
    Else
        Cells(i, 1).Value = i
    End If

Next i

End Sub