Почему Replace не работает в этом FormulaArray? - PullRequest
0 голосов
/ 08 февраля 2019

Я написал довольно длинную формулу, поэтому мне пришлось разрезать ее по частям и использовать. Заменить, чтобы сделать ее снова одной формулой.

Целью формулы было подсчитать уникальные значения в пределах диапазона,с несколькими критериями.Часть формулы SUM состоит в суммировании различных критериев.

Боюсь, я немного новичок и пока не имею большого опыта работы с Array.

Однако, это не работает, так как мой ответ "#NAME?"в Excel, и формула: "=IF(SUM((WWW))=0,""-"",SUM((WWW)))", поэтому он не распознает замененные детали.

Что я делаю не так?

Формула работает, если убрать в ней символ «=» и вручную установить его в Excel.Таким образом, формула верна.

Dim theFormulaPart1 As String
Dim theFormulaPart2 As String
Dim theFormulaPart3 As String
Dim theFormulaPart4 As String
Dim theFormulaPart5 As String

theFormulaPart1 = "=IF(SUM((WWW))=0,""-"",SUM((WWW)))"
theFormulaPart2 = "IF(FREQUENCY(IF((Scientific_Name=RC[-8])*(Total>0)*(Membership=""EAZA""),MATCH(Mnemonic,Mnemonic,0)),MATCH(Mnemonic,Mnemonic,0))>0,1))+XXX"
theFormulaPart3 = "(IF(FREQUENCY(IF((Scientific_Name=RC[-8])*(Total>0)*(Membership=""Temporary""),MATCH(Mnemonic,Mnemonic,0)),MATCH(Mnemonic,Mnemonic,0))>0,1))+YYY"
theFormulaPart4 = "(IF(FREQUENCY(IF((Scientific_Name=RC[-8])*(Total>0)*(Membership=""Associate""),MATCH(Mnemonic,Mnemonic,0)),MATCH(Mnemonic,Mnemonic,0))>0,1))+ZZZ"
theFormulaPart5 = "(IF(FREQUENCY(IF((Scientific_Name=RC[-8])*(Total>0)*(Membership=""N-EEP""),MATCH(Mnemonic,Mnemonic,0)),MATCH(Mnemonic,Mnemonic,0))>0,1)"    

 With ActiveSheet.Range("I42")
    .FormulaArray = theFormulaPart1
    .Replace "WWW", theFormulaPart2, xlPart
    .Replace "XXX", theFormulaPart3, xlPart
    .Replace "YYY", theFormulaPart4, xlPart
    .Replace "ZZZ", theFormulaPart5, xlPart
End With

Настройка, кажется, работает нормально, так как это дает "20":

Dim theFormulaPart1 As String
Dim theFormulaPart2 As String
Dim theFormulaPart3 As String
Dim theFormulaPart4 As String
Dim theFormulaPart5 As String   

theFormulaPart1 = "=IF(SUM(WWW)=0,""-"",SUM((WWW)))"
theFormulaPart2 = "3+XXX"
theFormulaPart3 = "4+YYY"
theFormulaPart4 = "6+ZZZ"
theFormulaPart5 = "7"

With ActiveSheet.Range("I36")
    .FormulaArray = theFormulaPart1
    .Replace "WWW", theFormulaPart2, xlPart
    .Replace "XXX", theFormulaPart3, xlPart
    .Replace "YYY", theFormulaPart4, xlPart
    .Replace "ZZZ", theFormulaPart5, xlPart
End With

1 Ответ

0 голосов
/ 08 февраля 2019

Поскольку у вас есть формула массива, вам нужно обращаться с ней как таковой, в противном случае вы удаляете функциональность.

Например:

Если бы у меня была формула массива {=SUM(B1:F1*B2:F2)} в Cells(1,1) и я хочу расширить диапазон, мне придется заменить его следующим образом:

  • Cells(1, 1).FormulaArray = Replace(Cells(1, 1).Formula, "F", "G").

или

  • Cells(1, 1).FormulaArray = Replace(Cells(1, 1).FormulaArray, "F", "G")

Но если бы я сделал это так:

  • Cells(1, 1) = Replace(Cells(1, 1).FormulaArray, "F", "G")

Он будет принимать значение ячейки вместоформула, создающая нормальную формулу, приводящую к ошибке, именно то, что вы делаете с этой строки и далее: With ActiveSheet.Range("I36").

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