Преобразование формулы в строку - PullRequest
0 голосов
/ 23 января 2019

У меня есть следующая формула, которую я ввожу в функцию.

dim minfee, feetier3, feetier4, feetier5, bpspread1, bpsread2, bpspread3 as double

call insformulaincell("=IF(K2 = 100, ""#NA"", IF(K2 <" & minfee & "," & feetier3 & ",IF(K2<" & feetier4 & ",K2+ " & bpspread1 & ",IF(K2<" & feetier5 & ",K2+ " & bpspread2 & ",K2+ " & bpspread3 & "))))")

'all the function does is paste the formula into a cell 
'How would I format the formula so that it can be stored as a single string?
'Ex:

dim sFormula as string 

sformula = ""=IF(K2 = 100, ""#NA"", IF(K2 <" & minfee & "," & feetier3 & ",IF(K2<" & feetier4 & ",K2+ " & bpspread1 & ",IF(K2<" & feetier5 & ",K2+ " & bpspread2 & ",K2+ " & bpspread3 & "))))""

call insformulaincell(sFormula)

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

Пример: "... If (K2<"& minfee &", "...) в отличие от" ... If (K2 <1) ... "", предполагая, что minfee = 1 </p>

1 Ответ

0 голосов
/ 23 января 2019

В VBA " служит разделителем для строковых литералов , например:

Dim foo As String
foo = "some string"

Если ваш строковый литерал должен содержать " двойные кавычки, вам необходимо экранировать их, удвоив их между разделителями строк :

foo = """some string"""

Печать приведенного выше приведет к "some string", , включая двойные кавычки.

Таким образом, вам нужно нужно удалить ведущие и конечные двойные кавычки .

sformula = "=IF(K2 = 100, ""#NA"", IF(K2 <" & minfee & "," & feetier3 & ",IF(K2<" & feetier4 & ",K2+ " & bpspread1 & ",IF(K2<" & feetier5 & ",K2+ " & bpspread2 & ",K2+ " & bpspread3 & "))))"

Если разбить это, это объединение следующих литералов:

  • "=IF(K2 = 100, ""#NA"", IF(K2 <" (заметьте, "#NA" - это плохая идея IMO. Используйте функцию NA(), чтобы получить фактическую ошибку листа вместо строкового значения, которое выглядит как единое целое)
  • ","
  • ",IF(K2<"
  • ",K2+ "
  • ",IF(K2<"
  • ",K2+ "
  • ",K2+ "
  • "))))"

Что мне подходит.

Возможно, такая конкатенация раздражающе запутывает. Пользовательская функция StringFormat может помочь смягчить это, абстрагируя конкатенации:

sFormula = StringFormat("=IF(K2=100, ""#NA"", IF(K2<{0},{1},IF(K2<{2},K2+{3},IF(K2<{4},K2+{5},K2+{6}", _
    minfee, feetier3, feetier4, bpspread1, feetier5, bpspread2, bpspread3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...