Манипулируйте текстовой строкой множеством символов, чтобы вставить функцию в строки в VBA. - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь создать цикл, который вставляет формулу на основе значения индекса, но я сталкиваюсь с проблемой, так как строка имеет много значений. Я хочу вставить формулу таким образом, так как я вытягиваюданные из API, и я не могу получить доступ к данным API в цикле.

Я сделал следующий код для формулы

Dim LastRow As Long
Dim r As Long

r = 10
StartRow = 3
LastRow = Range("I" & StartRow).End(xlDown).Row

For i = StartRow To LastRow
Range("B" & r).Value = "=BCurveStrip(I" & i & ")"

r = r + 1
Next i

Возвращается в ячейке "B"

          "B"
10    =BCurveStrip(I3)
11    =BCurveStrip(I4)
12    =BCurveStrip(I5)
13    =BCurveStrip(I6)

Я хочу сделать то же самое для формулы, которая немного сложнее и выглядит следующим образом:

=BCurveFwd(B13;"startdate,maturity,par.mid";B22;C22;B23;C23;"cols=3;rows=1")

И цикл для возврата этого

14    =BCurveFwd(B10;startdate,maturity,par.mid";B22;C22;B23;C23;"cols=3;rows=1")
15    =BCurveFwd(B11"startdate,maturity,par.mid";B22;C22;B23;C23;"cols=3;rows=1")
16    =BCurveFwd(B12"startdate,maturity,par.mid";B22;C22;B23;C23;"cols=3;rows=1")
17    =BCurveFwd(B13"startdate,maturity,par.mid";B22;C22;B23;C23;"cols=3;rows=1")

например, в строках с 14 по 17

1016 * Я пытался
r = 14
StartRow = 10
LastRow = Range("B & StartRow).End(xlDown).Row

For i = StartRow To LastRow
Range("B" & r).Value = "=BCurveFwd(B" & i & ";"startdate,maturity,par.mid";B22;C22;B23;C23;"cols=3;rows=1")"

r = r + 1
Next i

Я понимаю, что проблема заключается в том, что я не знаю, как манипулировать текстовой строкой с "в ней.Как всегда, любая помощь приветствуется.Спасибо

Ответы [ 3 ]

1 голос
/ 09 июля 2019

В дополнение к правильному экранированию кавычек, поскольку вы пишете в .Value, вам необходимо использовать ограничитель центральных параметров США , вместо ; (то же самое применимо, если вы используете .Formula).

Если вы предпочитаете придерживаться местного вкуса, пишите .FormulaLocal

1 голос
/ 09 июля 2019

Удвойте ваши включенные цитаты:

"=BCurveFwd(B13;""startdate,maturity,par.mid"";B22;C22;B23;C23;""cols=3;rows=1"")"
0 голосов
/ 09 июля 2019

Я решил проблему со следующим

ставлю

,"startdate,maturity,par.mid",B22,C22,B23,C23,"cols=3;rows=1")

в ячейке G32, а потом я просто сделал

text1 = Range("G32").text
For i = StartRow To LastRow

Range("B" & r).Value = "=BCurveFwd(B" & i & text1

r = r + 1
Next i 

Не самое элегантное решение, но оно сделало свою работу. Спасибо всем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...