我是住宅業主協會的辦公室負責人。我用Excel表格記錄費用和收據,並生成包含欠款人名單和已付款人員詳細信息的摘要。我創建了一個列A到J的支付分類帳。彙總狀態列表以列M到V.我使用數組公式計算「rct no。」。或通過分類賬表掃描「未支付」狀態。FormulArray在VBA中沒有給出正確的結果
由於數組計算非常慢,我想用宏替換個別計算。我創建了一個簡單的示例宏來使用簡單的公式陣列,因爲完整的公式會返回錯誤。
該宏被稱爲「測試」。然而,當我運行它並沒有給出N5值的變量「final」的正確值。代碼可能效率不高,但只是嘗試並使其工作。歡迎任何幫助完成最後一行工作的幫助。請參閱示例excel文件的鏈接。
Sub test()
Dim rct As String
Dim dday As String
Dim ddate As String
Dim dmonth As String
Dim dyear As String
Dim final As Variant
Range("z3").FormulaArray = "=INDEX($A$1:$I$200,MATCH(1, (Month_Adjusted=N$2)*(Flat_No=$M5),0),6)"
Range("aa3").FormulaArray = "=INDEX($A$1:$I$200,MATCH(1, (Month_Adjusted=N$2)*(Flat_No=$M5),0),1)"
rct = Range("z3").Value
Range("ab3").Formula = "=day(aa3)"
dday = Range("ab3").Value
Range("ac3").Formula = "=MONTH(aa3)"
dmonth = Range("ac3").Value
Range("ad3").Formula = "=YEAR(aa3)"
dyear = Range("ad3").Value
final = Application.concatenate(rct & ""/"" & dday & "" - "" & dmonth & "" - "" & dyear)
Range("n5").Value = final
End Sub
非VBA板在細胞N5實際使用的公式是
=IF(ISERROR(CONCATENATE((INDEX($A$1:$j$958,MATCH(1,(Month_Adjusted=n$2)*(Flat_No=$M5),0),6))," / ",DAY((INDEX($A$1:$j$958,MATCH(1,(Month_Adjusted=n$2)*(Flat_No=$m5),0),1))),"-",MONTH((INDEX($A$1:$j$958,MATCH(1,(Month_Adjusted=n$2)*(Flat_No=$m5),0),1))),"-",YEAR((INDEX($A$1:$K$j58,MATCH(1,(Month_Adjusted=n$2)*(Flat_No=$m5),0),1))))),"Not Paid",CONCATENATE((INDEX($A$1:$j$958,MATCH(1,(Month_Adjusted=n$2)*(Flat_No=$m5),0),6))," / ",DAY((INDEX($A$1:$j$958,MATCH(1,(Month_Adjusted=n$2)*(Flat_No=$m5),0),1))),"-",MONTH((INDEX($A$1:$j$958,MATCH(1,(Month_Adjusted=n$2)*(Flat_No=$m5),0),1))),"-",YEAR((INDEX($A$1:$j$958,MATCH(1,(Month_Adjusted=n$2)*(Flat_No=$m5),0),1)))))
感謝年幫助。我認爲問題在於單引號和雙引號。當在「公式」或「Formularrarray」中使用雙引號時,我需要修改代碼而不更改引號.final = Application.concatenate(rct&「」/「」&dday&「」 - 「」&dmonth &「」 - 「」&dyear)仍然返回類型不匹配錯誤,雖然我沒有看到不匹配錯誤。這條線是正確的(僅僅爲了學術上的利益) – rameshjey
@rameshjey但是,當你可以在原生VBA中使用concatenate('&')時,不要使用'Application.Concatenate'(並且**正在做這件事)運算符 – YowE3K
@ YowE3K不錯,它是mornng/night嗎?其實並不重要;) –