我發現了一個很好的用戶定義函數Nth_Occurence;它尋找範圍內給定值的「第N」次出現。它工作得很好,但在某些情況下,它表現得很奇怪。下面是詳細信息:Excel用戶定義的函數:Nth_Occurence
語法中的公式:= Nth_Occurence(範圍,數值出現時offset_row,offset_col)
= Nth_Occurence(A1:A100,8,6,3,7)這將尋找用於數字8的範圍A1中的第六occurence:A100和返回是3行向下7列到右側
在這裏,單元格的內容被VB代碼:
Function Nth_Occurrence(range_look As Range, find_it As String, occurrence As Long, offset_row As Long, offset_col As Long)
Dim lCount As Long
Dim rFound As Range
Set rFound = range_look.Cells(1, 1)
For lCount = 1 To occurrence
Set rFound = range_look.Find(find_it, rFound, xlValues, xlWhole)
Next lCount
Nth_Occurrence = rFound.Offset(offset_row, offset_col)
End Function
以下是問題:
1 - 如果查找範圍的顯示不可見(隱藏列,######(部分隱藏值),;;; (在單元格中不顯示),查找失敗並返回#VALUE。
*** FIXED由Ron:2-函數忽略所述第一小區在範圍
***由Ron FIXED:通過itsself 3-結果犯規更新如果目標小區的值(第3行,在我的例子中第7列)改變;我需要運行:ActiveSheet.EnableCalculation =假ActiveSheet.EnableCalculation =真
我VB的水平是 '複製/粘貼',變化值,希望最好...
謝謝大家
更新實施例看問題1:
在細胞A1輸入公式:= D1和下拉到A10(所以A1:A10是指D1:D10)
填充單元格D1:D10與值:1,2, 3,1,2,3,1,2,3,1
填充單元B1:B10與值:放於小區C2
99,98,97,96,95,94,93,92,91,90
「3」 在小區C1輸入式:= Nth_Occurrence(A1:A10,c2,2,0,1)
結果應該是94,在小區C2輸入 「2」,結果應該是95
**塔A的設置寬度:甲至5像素...
在單元格C2中輸入「3」,結果爲:#VALUE
修復:將列A的重置寬度:A重置爲顯示C2的內容和更改值的級別。
沒有理由應該忽略第一個單元格,但它不會檢查它,直到最後一個(見range.find HELP)。您也可能需要檢查環繞搜索。嘗試'Application.Volatile'來更新不在參數列表中的單元格更改。不確定隱藏的數據。你需要提供一些失敗的例子。 –
謝謝羅恩修復問題2 – Simon
對於問題1,嘗試尋找xlFormulas而不是xlValues –