為自己的Excel加入自定義函數
可以參考以下:
Excel 2010 可以自訂公式(函數)來補足內建公式(函數)無法處理的情形
為自己的 Excel 2003 加入自定義函數
如何在另一個活頁簿中使用自訂函式
Excel 2003 自訂函數_簡單說明
如何讓 Excel 2010 的自訂函數顯示說明文字
以阿姨提的例子 ... 迪西也寫了一個「自訂函數」 ...
用法就是跟一般的函數差不多,經過測試,無法接受「連續型的位址 (A1:A8)」 ...
只要輸入的參數其中有一個「連續型的位址」是就會有問題了 #VALUE!,如下:
A9=COUNT_NR(A1:A8)
A9=COUNT_NR(A1,A2, ...,B1:C3, ...)
A9=COUNT_NR(A1:A8,B1,C3,A18)
值與儲存格混合的也不行,一樣會有 #VALUE!
A9=COUNT_NR(1,1,2,3,5,4,4,1,B1,C2,D6)
只要拿掉這個「連續型的位址 (A1:A8)」就正常了,如下:
A9=COUNT_NR(A1,A2,A3,A4,A5,A6,A7,A8)
A9=COUNT_NR(1,1,2,3,5,4,4,1)
把以下的方塊中的 VBA 程式碼,貼到工作表「巨集/VBA編輯器中」,可以參考上述連結
的文章,程式效果與 IF、COUNTIF + IF、COUNTIF ... 相當類似
語法:
Function COUNT_NR(ParamArray argList() As Variant)
' 函數(1,2,3, ...) 或是 函數(A1,B2,C3, ...) ok
' #VALUE! 異常終止 類型:
' 1.引數其中之一只要有 A1:A3 這種連續型位址
' 函數(A1:A8)
' 函數(A1,A2, ...,B1:C3, ...)
' 函數(A1:A8,B1,C3,A18)
' 2、值與儲存格混核的類型
' 函數(1,1,2,3,5,4,4,1,B1,C2,D6)
' 函數(A1,A2, ...,1,2,3, ...)
Dim i, j, Count As Variant
For i = LBound(argList) To UBound(argList)
If i = UBound(argList) Then
Exit For
End If
For j = i + 1 To UBound(argList)
If argList(i) = "" Then
Exit For
End If
If argList(i) = argList(j) Then
argList(j) = ""
End If
Next j
Next i
Count = 0
For Each arg In argList
If arg <> "" Then
Count = Count + 1
End If
Next arg
COUNT_NR = Count
End Function