循环列以查找匹配 - VBA

时间:2017-07-06 11:06:39

标签: excel vba excel-vba excel-formula

我正在尝试创建一个VBA命令,该命令经历了很多案例,以便找到佣金费用百分比。首先,我需要将ID与特殊ID列表进行比较(使用一个整数,循环遍历30个整数的列)。我还需要检查'komisija'值是否大于40,然后返回40。

Dim klienta_nr As Long
Dim ISIN As String
Dim Cena As Double
Dim Skaits As Double
Dim Komisija As Double

Set kSheet = ThisWorkbook.Sheets("komisijas")

'Set variables equal to the cell data
  klienta_nr = Range("A2").Value
  ISIN = Range("E2").Value
  Cena = Range("H2").Value
  Skaits = Range("I2").Value


'First, have case for non-special klients
If Application.WorksheetFunction.Match(klienta_nr, kSheet.Range("A2:A40")) Then
      If Right(klienta_nr, 1) = 1 Or Right(klienta_nr, 1) = 8 Then
        Komisija = (Cena * Skaits) * 0.003
        End If
      If Right(klienta_nr, 1) = 7 Then
        Komisija = (Cena * Skaits) * 0.01
        End If
      If Komisija > 40 Then
        Range("K2").Value = Komisija
        End If
      Range("K2").Value = Komisija
End If

Range("K2").Value = Komisija

3 个答案:

答案 0 :(得分:0)

如果我理解正确,你必须这样做:

for each k in range("komisijas")
 If klienta_nr = k.value Then
   If Right(klienta_nr, 1) = 1 Or Right(klienta_nr, 1) = 8 Then
     Komisija = (Cena * Skaits) * 0.003
   If Right(klienta_nr, 1) = 7 Then
     Komisija = (Cena * Skaits) * 0.01
   End If
   If Komisija > 40 Then
     Range("D4").Value = 40
   End If
     Range("D4").Value = Komisija
 End If
next

此代码未经过测试。

答案 1 :(得分:0)

试试这个:

Dim var as Variant
var = Application.WorksheetFunction.Match(klienta_nr, kSheet.Range("A2:A17"))
If Not iserror(var) Then

答案 2 :(得分:0)

我最终使用Application.Match函数来比较变量。通过这样做,我能够得到我想要的预期结果。

'Set variables equal to the cell data
klienta_nr = Range("A2").Value
ISIN = Range("E2").Value
Cena = Range("H2").Value
Skaits = Range("I2").Value
vk = Range("B2").Value

    If Not Application.Match(klienta_nr, kSheet.Range("A2:A100")) Then
      'IP2, 0.03% komisija, 40 EUR/USD Max
         If Right(vk, 1) = 1 Or Right(vk, 1) = 8 Then
            Komisija = (Cena * Skaits) * 0.003
            Range("K2").Value = Komisija
            End If
      'IP1, 0.1% komisija, 40 EUR/USD Max
        If Right(vk, 1) = 7 Then
            Komisija = (Cena * Skaits) * 0.01
            Range("K2").Value = Komisija
            End If
        'Komisija MAX is 40, so anything >=40 equals 40
        If Komisija >= 40 Then
            Range("K2").Value = 40
            End If
    End If