簡體   English   中英

Excel VBA函數出現#VALUE錯誤

[英]#VALUE error with Excel VBA Function

在我的Excel電子表格中,我有兩列。

  • A包含值為“是”,“否”或“可能”的字符串。
  • B包含一年的字符串。

我需要一個函數來確定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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM