指定条件で置換するのは、数行なら問題有りませんが、数万行以上を処理する場合、
10分以上かかる場合があります。でも配列を使えば数秒で完了できます。
0からすべて独学で習得した経験を踏まえて。とにかくわかりやすく紹介してみます。
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
配列は難解ですが、慣れれば非常に便利
<考え方>
現在のデータを配列に格納(対象データ = Range("B2:B10"))
↓
Ifで必要な処理を行い
↓
エクセル上にデータを戻す(Range("B2:B10") = 対象データ)
-----------------------------------------
VBAの表示→ローカルウィンドウを表示させて、確認しながら作ると作りやすいです。
10行程度なら速度差はありませんが、1万行だと約数分→約1秒になります。
ローカルウィンドウの内容はこちら↓、これを見ながら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