VBA

判定/配列操作

ForEachで配列要素にアクセス
Dim c As Variant
If TypeName(selection)<>"Range" Then Exit Sub
  For Each c In Selection
  c.offset(0,1)=c.Value*2
  Next
配列宣言するときはVariant(何でもあり)型を指定します。For Eachで配列内の全ての値に対して処理をします。
例ではoffset(0,1)したセルにc.Value*2つまり2倍した値を代入しています。
ForNextで配列要素にアクセス
Dim hida As Long
Dim migi As Long
For migi=2 To 11
    For hida=2 To 21
        If Range(F,migi).Value=Range(B,hida).Value Then
            Range(C,hida).Value="OK"
            Exit For
        End If
    Next
Next
例のようにFor~Nextはネスト(入れ子)で記述することも出来ます。
内側の処理内で If Range(F,migi).Value
=Range(B,hida).Value Thenつまり値が同じならRange(C,hida).Value="OK"を記入すると指定しています。
CountIf関数で重複しているか判定する
Dim i As Long
For i=2 to 13
    If workshhet Function.CountIf(Range("A:A"),Cells(i,"C"))>1 Then
    Cells(i,"D")="重複"
Next
CountIf(Range("A:A"),Cells(i,"C"))
>1 Thenで個数が1より大きい(つまり同じ値が2個以上ある)場合に重複と表示させます。
動的配列でマッチング
Dim tate As Long
Dim rM As Range
Dim st() As Variant

For tate=0 to 19
    ReDim preserve st(tate)
    st(tate)=Range("F2").offset(tate).Value
Next

For tate=0 to UBound(st)
    For Each rM In Range("B2:B1001")
        If rM.Value=st(tate)Then
        rM.offset(,1).Value="OK"
        End if
    Next
Next
まずst(tate)=Range("F2")
.offset(tate).Valueでセルの値を順番に配列に入れていきます。 次にFor Each rM In Range("B2:B1001")でセル範囲の値を順番に変数に入れ、その2つの値をIf rM.Value=st(tate)Thenで一緒だった場合に OKと表示するように指定しています。
Findでマッチング
Dim rM As Range
Dim rH As Range
Dim rMy As Range
Dim rFirst As Range
For Each rM In Range("F2:F21")
Set rH=Range("B1:B100001")
Set rMy=rH.Find(what:=rM.Value)

  If rMy Is Nothing Then Exit for
  Else
  Set rFirst=rMy
  rMy.offset(,1).Value="OK"
  End If

  Do
  Set rMy=rH.Find Next(rMy)
    If rMy.Address=rFirst.Address Then Exit Do
    Else
    rMy.offset(,1).Value="OK"
    End If
  Loop
Next
まずFor Each rM In Range("F2:F21")で比較元となるセル範囲を変数に入れていきます。次にrH=Range("B1:B100001")でrhに比較先のセル範囲を入れます。 Find(what:=rM.Value)でwhatに続けて比較元の値範囲を指定します。そしてその後の処理で存在有無により処理を分けていきます。
条件に合った項目をカウントする
WorksheetFunction.CountIf(Range("B3:B6"),"OK")
CountIfで条件に合う項目だけカウントします。
配列検索し一致した値の行数を取得する
For i=1 To UBound(A,1)
            If A(i,1)="イトウ" Then
                Debug.Print"イトウは、No"& A(i,1)&"です
            End If
Next
配列内にセル範囲を入れForで配列内を順番に検索していきます。該当行の行数をNo"& A(i,1)&"で表示できます。
個々のセルに対して処理実行(コレクションの全オブジェクトに対して操作)
Dim tRng As Range
For Each tRng In selection
    tRng.Value=tRng.Value &"支店"
Next
tRngにセルを代入し処理しています。
各行に対して処理実行(コレクションの全オブジェクトに対して操作)
Dim tRow As Range
For Each tRow In Range("B3:D8").Rows
    If tRow.cells(2).Value="和菓子"Then
    tRow.cells(3).Value=tRow.cells(3).Value-20
Next
tRowにセル範囲を代入し、行全体をまとめて処理しています。
If 条件分岐処理
If Activecell>0 Then
              If Activecell>5 Then MsgBox"Big"
              Else
              If Activecell<0 Then MsgBox"Minus"
              End If
Ifを使用して条件により処理を変更することができます。
SelectCase 分岐処理
Selectcase Activecell
Case 1 to 5
    MsgBox"範囲内"
Case Is>10
    MsgBox"大きい"
Case 7,9
    MsgBox"奇数"
Case Else
    MsgBox"それ以外"
End Select
条件分岐の値がはっきり決まっているときはSelectcaseを使用したほうがコードが見やすくなります。