Я пытаюсь написать макрос Excel для расчета комиссии на основе 3 критериев 1) Тип комиссии (A, B, C) 2) Тип обмена (США, HKEX) 3) Покупка / продажа (Покупка, Продать)
Чтобы сделать его удобным для обслуживания (добавить или изменить формулу расчета), я решил сохранить формулу расчета в электронной таблице Excel, которая отображается следующим образом:
введите здесь описание изображения
Я пытаюсь запустить макрос, соответствующий хранилищу формул в Excel, а затем рассчитать комиссию. Однако я не могу не преобразовать формулу в код VBA. Я пробовал много способов, но макрос просто не может выполнить формулу. Собственно, это выполнимо? Или есть способ лучше? Кто-нибудь может помочь? Спасибо!
Sub Ipricecheck1()
Sheets("PriceCheck").Delete
Sheets.Add.Name = "PriceCheck"
Dim Lastrow, Lastrow1, Lastrow2 As Long
Dim a, b, D, x As Long
Dim RPrice, Fcomm, Qcomm, MAF, Govfee As Double
Dim cal As String
Sheets("PriceCheck").Range("a1") = "Instrument ID"
Sheets("PriceCheck").Range("b1") = "Acc ID"
Sheets("PriceCheck").Range("c1") = "Buy/Sell"
Sheets("PriceCheck").Range("d1") = "Channel"
Sheets("PriceCheck").Range("e1") = "Reference Price"
Sheets("PriceCheck").Range("f1") = "FO Price"
Sheets("PriceCheck").Range("g1") = "Days Count"
Sheets("PriceCheck").Range("h1") = "Comm Schedule"
Sheets("PriceCheck").Range("i1") = "Fidessa Commission rate"
Sheets("PriceCheck").Range("j1") = "QFII Commission rate"
Sheets("PriceCheck").Range("k1") = "Market Access fee"
Sheets("PriceCheck").Range("l1") = "Gov fee"
Sheets("PriceCheck").Range("m1") = "Calculated Price"
Sheets("PriceCheck").Range("n1") = "Match/Unmatched"
Sheets("PriceCheck").Range("o1") = "Comm Cal"
Lastrow = Sheets("All Record").Cells(Rows.Count, 2).End(xlUp).Row
Lastrow1 = Sheets("Client Profile").Cells(Rows.Count, 1).End(xlUp).Row
b = 2
For a = 2 To Lastrow
If Sheets("All Record").Range("b" & a) = Sheets("Control Panel").Range("c3") Then
If Sheets("All Record").Range("ce" & a) = "SWAP" Then
Sheets("PriceCheck").Range("a" & b) = Sheets("All Record").Range("a" & a)
Sheets("PriceCheck").Range("b" & b) = "'" & Sheets("All Record").Range("i" & a)
Sheets("PriceCheck").Range("c" & b) = Sheets("All Record").Range("d" & a)
If Right(Sheets("All Record").Range("f" & a), 4) = "QFII" Then
Sheets("PriceCheck").Range("d" & b) = "QFII"
If Sheets("PriceCheck").Range("c" & b) = "SELL" Then
x = 3
Else
x = 4
End If
Else
Sheets("PriceCheck").Range("d" & b) = "Fidessa"
x = 2
End If
Sheets("PriceCheck").Range("e" & b) = Sheets("All Record").Range("p" & a)
RPrice = Sheets("All Record").Range("p" & a)
Sheets("PriceCheck").Range("f" & b) = Sheets("All Record").Range("g" & a)
Sheets("PriceCheck").Range("g" & b) = Sheets("All Record").Range("al" & a)
D = Sheets("All Record").Range("al" & a)
Sheets("PriceCheck").Range("h" & b) = Application.VLookup(Sheets("PriceCheck").Range("b" & b), Sheets("Client Profile").Range("a:ab"), 25, False)
Sheets("PriceCheck").Range("i" & b) = Application.VLookup(Sheets("PriceCheck").Range("b" & b), Sheets("Client Profile").Range("a:ab"), 26, False)
Sheets("PriceCheck").Range("j" & b) = Application.VLookup(Sheets("PriceCheck").Range("b" & b), Sheets("Client Profile").Range("a:ab"), 27, False)
Sheets("PriceCheck").Range("k" & b) = Application.VLookup(Sheets("PriceCheck").Range("b" & b), Sheets("Client Profile").Range("a:ab"), 28, False)
Sheets("PriceCheck").Range("l" & b) = Sheets("Comm").Range("g2")
RPrice = Sheets("All Record").Range("p" & a)
D = Sheets("All Record").Range("al" & a)
Fcomm = Sheets("PriceCheck").Range("i" & b)
Qcomm = Sheets("PriceCheck").Range("j" & b)
MAF = Sheets("PriceCheck").Range("k" & b)
Govfee = Sheets("PriceCheck").Range("l" & b)
cal = Application.VLookup(Sheets("PriceCheck").Range("h" & b), Sheets("Comm").Range("a:d"), x, False)
Sheets("PriceCheck").Range("m" & b) = cal
If Sheets("PriceCheck").Range("m" & b) = Sheets("PriceCheck").Range("f" & b) Then
Sheets("PriceCheck").Range("n" & b) = "Matched"
Else
Sheets("PriceCheck").Range("n" & b) = "Unmatched"
End If
b = b + 1
End If
End If
Next a
End Sub