トップページ(目次)

407.指定条件に置き換える(配列版、完全一致)

指定条件で置換するのは、数行なら問題有りませんが、数万行以上を処理する場合、 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
注意点として、配列(対象データ)が1個のみの場合、配列が機能しないので使えません。 その場合、最終行が2だった場合のみ別処理を行い条件分岐させます
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

Copyright © 2021 https://excel3000.web.fc2.com/ All Rights Reserved.
    inserted by FC2 system