2017-07-06 72 views
0

我正在尝试创建一个VBA命令,通过许多案例来查找佣金费用百分比。首先,我需要将ID与特殊ID列表进行比较(使用一个整数,通过30个整数列循环)。我还需要检查,看看是否“komisija”值大于40,那么这将简单地返回40通过列循环找到匹配 - VBA

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 
+1

是否有您要解决的特定问题?您的代码是否产生错误?它是否在做你需要它做的事情?我不确定你的问题实际上是什么。 – FreeMan

+0

这应该是做什么? '范围(komisijas!A)'。 – SJR

+0

我想看看变量klienta_nr是否与一个列中的整数相匹配。作为Excel函数,我将使用MATCH,但对于VBA,我不确定要使用什么。 – Nikolajs

回答

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 

此代码未经测试。

+0

嗨费尔南多,“为每个K在komisijas”工作,我没有得到它,我不是一个VBA专家 –

+0

对不起,我更新到范围(“komisijas”)。我明白komisijas是一个命名的范围。我是对的? –

+0

不完全是我想要得到的,但我更新了我的代码上面。仍然没有工作,但可能会给你一个想法,我试图去与此。 – Nikolajs

0

试试这个:

Dim var as Variant 
var = Application.WorksheetFunction.Match(klienta_nr, kSheet.Range("A2:A17")) 
If Not iserror(var) Then 
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