嘗試撰寫 My_Eval 函式(執行計算,我在表中查找函式)。
這是我的 VBA
Function MY_EVAL(ref as String) As Variant
MY_EVAL = evaluate(ref)
End Function
哪個應該起作用,這是它失敗的地方。
| 一個 | 乙 | C | |
|---|---|---|---|
| 1 | 最佳 | 單元格 2 | =MY_EVAL(B3) |
| 2 | 底部 | 單元格 4 | =MY_EVAL(B3) |
| 3 | 公式 | 索引(A:B,行(),1) |
C1 按預期顯示 TOP
C2 也顯示 TOP 而不是 BOTTOM,為什么?
My_Eval在包含單元格上執行Row()也可以按預期作業。
我希望單元格 C 評估為 BOTTOM,而不是評估為“TOP”
uj5u.com熱心網友回復:
如果帶有查找表的作業表不是 ActiveSheet,則您的函式可能會產生意外結果 - 默認Application.Evaluate使用 ActiveSheet 作為背景關系:如果您想使用特定作業表,請使用Worksheet.Evaluate表單。
例如:
Function MY_EVAL(ref As String) As Variant
MY_EVAL = Application.ThisCell.Worksheet.Evaluate(ref)
End Function
(使用ThisCell呼叫此函式的公式來識別單元格)
編輯:這仍然不起作用 - 來自這里的資訊https://www.mrexcel.com/board/threads/vba-using-column-or-row-within-evaluate.802692/
“COLUMN 函式回傳一個顯然 Evaluate 無法取消參考的陣列。”
同樣適用于ROW()- 如果您放入 UDF:
Debug.Print TypeName(Application.ThisCell.Worksheet.Evaluate("ROW()"))
它會給你Variant()解釋這個問題。
所以使用下面@scottcraner 的建議:
Function MY_EVAL(ref As String) As Variant
With Application.ThisCell
MY_EVAL = .Worksheet.Evaluate(Replace(ref, "ROW()", .Row))
End With
End Function
...假設ref不使用(例如)ROW(A1:A3)等形式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528564.html
標籤:擅长vbaexcel公式
下一篇:excel-提取給定陣列的值
