2014-04-18 25 views
1

我有一大堆數組公式的大工作表。我想用VBA更新這些公式以包含if語句。基本上我想新的公式爲If(year> max_year,If_True_Formula,If_False_Formula)。ArrayFormula超過255個字符。替換不工作

這是一個相當簡單的任務,通過連接三個字符串並設置ActiveCell.ArrayFormula =三個字符串的結果來完成。但是,如果結果字符串超過255個字符,事情就會變得複雜。在一些情況下,我需要的公式做了超過255個字符,所以我加了If_False_Formula爲If_True_Formula佔位符「X_X」和「Y_Y」並用此方法來創建完整的公式:

With ActiveCell 
    .FormulaArray = If_Statement 
    .Replace "X_X", If_True 
    .Replace "Y_Y", If_False 
End With 

這個工作完美,但我的數組公式中的幾個數組公式很長,If_True部分和If_False部分每個都超過255個字符。爲了克服這個問題,我想我可能只是將每個這些字符串成三塊(我不會一個字符串超過750個字符),然後用改良的方法來創建末滿弦:

True_1 = "" 
If len(If_True) > 255 Then 
    True_1 = Left(If_True, len(If_True)/3) & "X2_X2" 
    True_2 = Mid(If_True, len(If_True)/3, len(If_True)/3) & "X3_X3" 
    True_3 = Mid(If_True, len(True_1) + len(True_2) - 10, len(If_True)) 
End If 

該方法將我的大字符串分成三個子字符串,然後我可以使用三個替換語句將三個字符串添加到現有字符串中。

With ActiveCell 
    .FormulaArray = If_Statement 
    If True_1 = "" Then 
     .Replace "X_X", If_True 
    Else 
     .Replace "X_X", True_1 
     .Replace "X2_X2", True_2 
     .Replace "X3_X3", True_3 
    End If 
End With 

一些奇怪的原因,代碼運行沒有錯誤,但不會使True_1,True_2,True_3任何替換。如果初始字符串沒有分解,代碼將進行適當的替換。很奇怪...

+0

也嘗試'。替換內容:=「X_X」,替換:= True_1,LookAt:= xlPart'等等 –

回答

0

我在這裏張貼解答:Array formula with more than 255 characters

的原因是,該公式需要有意義,隨時更換。所以你不能用字符串替換。我在A1表示法中爲英文函數製作了一個函數。如果您在公式中多次使用if-command並且從未使用過1337行,您可以複製並使用它,而不用任何贅述。