[英]#VALUE error with Excel VBA Function
在我的Excel電子表格中,我有兩列。
我需要一個函數來確定B列中一年的出現次數,其中A列的等效值是“是”。
我目前有以下代碼:
Function CountIfYearAndValue(Rng As Range, YNM As String, Year As String) As Integer
Dim count As Integer
count = 0
For Each c In Rng.Cells
If (StrComp(Abs(c.Value), Year, vbTextCompare) = 0) And (StrComp(Cells(c.Row, A), YMN, vbTextCompare) = 0) Then count = count + 1
Next
CountIfYearAndValue = count
End Function
此代碼的想法是,我們遍歷給定范圍內(B列上的范圍)中的每個單元格,並檢查year是否等於Year
參數。 並且,如果列A上的等效單元格等於YNM
參數,我們將增加count
變量。
由於某些原因,當我使用以下參數時,此代碼不起作用:
=CountIfYearAndValue('Years'!B1:B7,"Yes","Year 7")
它只會發生#VALUE
錯誤,並拒絕顯示任何結果。
任何幫助將非常感激。
編輯:兩個單元格中的所有值都處於未格式化的數據類型(“常規”)上,並且沒有單元格為空。
聽起來好像您正在重新發明輪子……已經有一個內置功能( 優點:比UDF快得多 )可以完全滿足您的要求。 它稱為COUNTIFS()
1至10行中Year 7
年的所有YES
。
=COUNTIFS(B1:B10, "Year 7",A1:A10, "Yes")
我只是快速瀏覽了一下您的代碼,我認為您的原始代碼無法按預期工作的原因可能有幾個。
YNM
是有效的列名,因此不應將其用作變量名。 您應該避免這樣命名變量-給它起一個更有意義的名稱
YNM
!= YMN
就像在代碼中一樣( 請參見函數定義,然后查看StrComp()
函數中的拼寫錯誤的版本 )
Year
是有效的VBA內置函數,因此,在將自己暴露在命名沖突中時,應再次避免將其用作變量名。
在模塊頂部添加Option Explicit
。 這要求您將所有變量Dim
。 出於多種原因,總是建議使用它。
rng
變量是Range
類型,因此您無需顯式添加.Cells
屬性。 即使在某些情況下可能會有所幫助-在更高的級別上,您可能還會遇到一些運行時類型兼容性問題。 ( 運行時可能會將您的rng
Range變量轉換為2D數組等 )
在第二個StrComp()
函數中,在c.Offset(0, -1)
周圍添加了顯式轉換,因為您不希望運行時( 很少但仍然可能 )將Yes
轉換為Boolean
數據類型。 顯式轉換為String
只會為您提供額外的保護 ; p(lol)
因此,類似這樣的返回正確的值
Function CountIfYearAndValue(rng As Range, choice As String, myYear As String) As Long
Dim count As Long
count = 0
Dim c As Range
For Each c In rng
If (StrComp(c, myYear, vbTextCompare) = 0) And (StrComp(CStr(c.Offset(0, -1)), choice, vbTextCompare) = 0) Then
count = count + 1
End If
Next c
CountIfYearAndValue = count
End Function
是的,我希望這可以幫助您理解點點滴滴:)如有任何問題,請發表評論
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.