VBA рассчитывает комиссию по некоторым критериям - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь написать макрос 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...