2017-07-06 71 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