配列は難解ですが、使えるようになると非常に便利なコードです。
使えなくても問題がありませんが、例えば、1万行を指定条件で処理する場合、
圧倒的なスピードアップになります。
ゼロから独学で使えるようになったので、その経験を踏まえて、わかりやすさに特化してご紹介します。
サンプル:売上の個数によって、会社ごとに 売上 小・中・大 で条件を分けて置換する場合
<考え方>
現在のデータを配列に格納(対象データ = Range("B2:B10"))
↓
Ifで必要な処理を行い
↓
エクセル上にデータを戻す(Range("B2:B10") = 対象データ)
Sub 指定条件に置き換え置換する_配列版()
対象データ = Range("B2:B10")
For 配列行 = 1 To 9 'データの個数が9個のため9回処理する
If 30 <= 対象データ(配列行, 1) Then '30~の場合
'何もしない
ElseIf 20 <= 対象データ(配列行, 1) Then '20~の場合
対象データ(配列行, 1) = "売上 大"
ElseIf 10 <= 対象データ(配列行, 1) Then '10~の場合
対象データ(配列行, 1) = "売上 中"
ElseIf 1 <= 対象データ(配列行, 1) Then '1~の場合
対象データ(配列行, 1) = "売上 小"
End If
Next 配列行
Range("B2:B10") = 対象データ
End Sub
VBAメニューの [表示] > [ローカルウィンドウ] を表示させて、
対応するデータを確認しながら作ると作りやすいです。
ローカルウィンドウの内容はこちら↓、これを見ながらForとIfを組んでいきます
<少し進化>最終行と配列量を変数に入れる
B列の最終行を変数で取得し、配列の大きさを動的に取得することもできます。
最終行 = Cells(Rows.Count, "B").End(xlUp).Row = 10
LBound(対象データ)と書けば、配列(対象データ)内の最小値を取得 = 1
UBound(対象データ)と書けば、配列(対象データ)内の最大値を取得 = 9
これを理解して、自由に使いこなせるようになれれば、いろいろ転用できます。
Sub 指定条件に置き換え置換する_配列版_最終行変数版()
最終行 = Cells(Rows.Count, "B").End(xlUp).Row
対象データ = Range("B2:B" & 最終行)
For 配列行 = LBound(対象データ) To UBound(対象データ)
If 30 <= 対象データ(配列行, 1) Then '30~の場合
'何もしない
ElseIf 20 <= 対象データ(配列行, 1) Then '20~の場合
対象データ(配列行, 1) = "売上 大"
ElseIf 10 <= 対象データ(配列行, 1) Then '10~の場合
対象データ(配列行, 1) = "売上 中"
ElseIf 1 <= 対象データ(配列行, 1) Then '1~の場合
対象データ(配列行, 1) = "売上 小"
End If
Next 配列行
Range("B2:B" & 最終行) = 対象データ
End Sub
Sub 指定条件に置き換え置換する_配列版_最終行変数版_一個のみ分岐()
最終行 = Cells(Rows.Count, "B").End(xlUp).Row
If 最終行 <> 2 Then '通常処理
対象データ = Range("B2:B" & 最終行)
For 配列行 = LBound(対象データ) To UBound(対象データ)
If 30 <= 対象データ(配列行, 1) Then '30~の場合
'何もしない
ElseIf 20 <= 対象データ(配列行, 1) Then '20~の場合
対象データ(配列行, 1) = "売上 大"
ElseIf 10 <= 対象データ(配列行, 1) Then '10~の場合
対象データ(配列行, 1) = "売上 中"
ElseIf 1 <= 対象データ(配列行, 1) Then '1~の場合
対象データ(配列行, 1) = "売上 小"
End If
Next 配列行
Range("B2:B" & 最終行) = 対象データ
Else '最終行 = 2(売上データが1個だけ)の場合
If 30 <= Range("B2") Then '30~の場合
'何もしない
ElseIf 20 <= Range("B2") Then '20~の場合
Range("B2") = "売上 大"
ElseIf 10 <= Range("B2") Then '10~の場合
Range("B2") = "売上 中"
ElseIf 1 <= Range("B2") Then '1~の場合
Range("B2") = "売上 小"
End If
End If
End Sub