VBAのIF文で複数条件を指定する方法

VBAのIF文で複数の条件を指定したい場合の簡単なコードを書いておきます。

例えば、A社でA商品を購入した個数、A社でB商品を購入した個数、B社でA商品を購入した個数によって自動で値段を入れたいとか。複数条件で処理したい時は沢山あるはず…

条件によっては、もっと短く書けるかもしれませんが…参考までに…ただIF文の中にIFを入れて、さらにIFを入れているだけですけどね(苦笑

ちなみにコメントを入れましたが削除して使って下さい…

Sub 商品単価()
'Private Sub「マクロ1」「マクロ2」「マクロ3」を読み込んで一つのマクロとして表示する
 マクロ1
 マクロ2
 マクロ3
End Sub


'------------------------------------------------------------------------------------------
Private Sub マクロ1()

'.Rowで2行目を取得して1000行までチェックする
   Dim r As Variant
       r = Range("A1").Row
       r = r + 1
   For r = 1 To 1000

   '【条件1】
    'B行に「A社〇〇支店」or 「B社〇〇支店」が含まれていた場合は,条件2
     '〇〇支店が多かったためLikeでワイルドカードを使用
    If Range("B" & r).Value Like "A社**" Or _
       Range("B" & r).Value Like "B社**" Then
             
    
          '【条件2】
       '条件1に当てはまった場合=B行に「A社〇〇支店」or 「B社〇〇支店」、
       'G行をチェックして、G行の中に「A商品」or「B商品」or「C商品」が入力されているかチェックする
       '当てはまった場合は条件3へ
       '当てはまらなかった場合は、下記の【条件2の分岐】へ
            
       If Range("G" & r).Value = "A商品" Or _
               Range("G" & r).Value = "B商品" Or _
               Range("G" & r).Value = "C商品" Then
            
               '【条件3】
                  '条件1と条件2に当てはまった場合は条件3
                   'J行の中の数字をチェックして1~4の場合はL行に10000を入力する
                   'J行の中の数字が5~10の場合はL行に20000を入力する
                   'J行の中の数字が11~1000の場合はL行に{30000+(J行の中の数字-100)×100}の数値を入力する
             
                        If Range("J" & r).Value >= 1 And Range("J" & r).Value <= 4 Then 
                                Range("L" & r).Value = 10000 
                        ElseIf Range("J" & r).Value >= 5 And Range("J" & r).Value <= 10 Then 
                                Range("L" & r).Value = 20000 
                        ElseIf Range("J" & r).Value >= 11 And Range("J" & r).Value <= 1000 Then
                                Range("L" & r).Value = ((Range("J" & r).Value - 100) * 100) + 30000
                        End If
                  
          '【条件2の分岐-1】       
           '条件1に当てはまった場合=B行に「A社〇〇支店」or 「B社〇〇支店」、
           'G行をチェックして、「D商品」or「E商品」が入力されているかチェックする
           '当てはまった場合は条件3へ
       '当てはまらなかった場合は、下記の【条件2の分岐】へ
               ElseIf Range("G" & r).Value = "D商品" Or Range("G" & r).Value = "E商品" Then
               
                          '【条件3】 
                            '条件1と条件2に当てはまった場合は条件3
                            'J行の中の数字をチェックして1~4の場合はL行に10000を入力する 
                             'J行の中の数字が5~10の場合はL行に20000を入力する 
                             'J行の中の数字が11~1000の場合はL行に{30000+(J行の中の数字-100)×100}の数値を入力する
                       
                               If Range("J" & r).Value >= 1 And Range("J" & r).Value <= 4 Then
                        Range("L" & r).Value = 6000
                       ElseIf Range("J" & r).Value >= 5 And Range("J" & r).Value <= 10 Then
                                     Range("L" & r).Value = 7000
                                 ElseIf Range("J" & r).Value >= 11 And Range("J" & r).Value <= 1000 Then
                                     Range("L" & r).Value = ((Range("J" & r).Value - 100) * 200) + 40000
                               End If

             '【条件2の分岐-2】 
              '上記同様、G行をチェックして、「F商品」の場合、【条件3】の処理をする
                  ElseIf Range("G" & r).Value = "F商品" Then
                                 If Range("J" & r).Value >= 1 And Range("J" & r).Value <= 4 Then
                                    Range("L" & r).Value = 8000
                                 ElseIf Range("J" & r).Value >= 5 And Range("J" & r).Value <= 10 Then
                                    Range("L" & r).Value = 9000
                                 ElseIf Range("J" & r).Value >= 11 And Range("J" & r).Value <= 1000 Then
                                    Range("L" & r).Value = ((Range("J" & r).Value - 100) * 240) + 5000
                                End If
                   End If
     End If    
 Next
End Sub  

'------------------------------------------------------------------------------------------
'同様に「C社」の場合の処理を書く
           
Private Sub マクロ2()

 Dim r As Variant
     r = Range("L1").Row
     r = r + 1


 For r = 1 To 1000
                 
      If Range("B" & r).Value Like "C社**" Then  
            
            If Range("G" & r).Value = "A商品" Or _
               Range("G" & r).Value = "B商品" Then
            
                        If Range("J" & r).Value >= 1 And Range("J" & r).Value <= 4 Then 
               Range("L" & r).Value = 10000
              ElseIf Range("J" & r).Value >= 5 And Range("J" & r).Value <= 10 Then
               Range("L" & r).Value = 20000 
              ElseIf Range("J" & r).Value >= 11 And Range("J" & r).Value <= 1000 Then
                           Range("L" & r).Value = ((Range("J" & r).Value - 100) * 100) + 30000
                          End If
 
             ElseIf Range("G" & r).Value = "G商品" Or Range("G" & r).Value = "H商品" Then
                        If Range("J" & r).Value >= 1 And Range("J" & r).Value <= 4 Then 
                           Range("L" & r).Value = 6000 
                        ElseIf Range("J" & r).Value >= 5 And Range("J" & r).Value <= 10 Then
                           Range("L" & r).Value = 7000 
                        ElseIf Range("J" & r).Value >= 11 And Range("J" & r).Value <= 1000 Then
                           Range("L" & r).Value = ((Range("J" & r).Value - 100) * 200) + 40000
                        End If
             ElseIf Range("G" & r).Value = "I商品" Then
                        If Range("J" & r).Value >= 1 And Range("J" & r).Value <= 4 Then
                           Range("L" & r).Value = 8000
                        ElseIf Range("J" & r).Value >= 5 And Range("J" & r).Value <= 10 Then
                           Range("L" & r).Value = 9000 
                        ElseIf Range("J" & r).Value >= 11 And Range("J" & r).Value <= 1000 Then
                           Range("L" & r).Value = ((Range("J" & r).Value - 100) * 240) + 5000  
                        End If
             End If
            
      End If
 Next  
End Sub 

'------------------------------------------------------------------------------------------
'同様に「D社」の場合の処理を書く

Private Sub マクロ3()

   Dim r As Variant
       r = Range("L1").Row
       r = r + 1
   For r = 1 To 1000
       
       
        If Range("B" & r).Value Like "D社**" Then
                If Range("G" & r).Value = "A商品" Or _
                   Range("G" & r).Value = "G商品" Then
       
                      If Range("J" & r).Value >= 1 And Range("J" & r).Value <= 12 Then
                         Range("L" & r).Value = 10000
                      ElseIf Range("J" & r).Value >= 13 And Range("J" & r).Value <= 30 Then
                         Range("L" & r).Value = ((Range("J" & r).Value - 12) * 230) + 11000
                      ElseIf Range("J" & r).Value >= 31 And Range("J" & r).Value <= 40 Then
                         Range("L" & r).Value = ((Range("J" & r).Value - 31) * 220) + 12000
                      ElseIf Range("J" & r).Value >= 41 And Range("J" & r).Value <= 400 Then
                         Range("L" & r).Value = ((Range("J" & r).Value - 41) * 170) + 13000
                      End If

               ElseIf Range("G" & r).Value = "J商品" Then
                      If Range("J" & r).Value >= 1 And Range("J" & r).Value <= 12 Then
                         Range("L" & r).Value = 10000
                      ElseIf Range("J" & r).Value >= 13 And Range("J" & r).Value <= 30 Then
                         Range("L" & r).Value = ((Range("J" & r).Value - 12) * 300) + 12000
                      ElseIf Range("J" & r).Value >= 31 And Range("J" & r).Value <= 40 Then
                         Range("L" & r).Value = ((Range("J" & r).Value - 31) * 270) + 13000 
                      ElseIf Range("J" & r).Value >= 41 And Range("J" & r).Value <= 400 Then
                         Range("L" & r).Value = ((Range("J" & r).Value - 41) * 260) + 14000
                      End If
               End If
         End If
     Next
End Sub 
タイトルとURLをコピーしました