2014-02-20 459 views
6

我試圖在多個工作表中「計算」列I中的某個對象(在此實例中)的編號。列I中的值是公式的結果(如果有關係)。到目前爲止,我有:Excel - 在多個工作表/同一列中使用COUNTIF/COUNTIFS

=COUNTIF('Page M904'!I:I,A13)+COUNTIF('Page M905'!I:I,A13)+COUNTIF('Page M906'!I:I,A13)

其工作原理,但我將有20頁東西要掃描通過。我想避免有一個頁面長的公式。

我已經試過

=COUNTIFS('Page M904:Page M906'!I:I,A13)=COUNTIF('Page M904:Page M906'!I:I,A13)

但導致#VALUE

而且我覺得

=COUNTIFS('Page M904'!I:I,A14,'Page M905'!I:I,A14,'Page M906'!I:I,A14)

COUNTIFS的誤用,因爲我得到0當它應該是35

我試圖避免使用VBA這種應用。但如果必須,那麼它必須:)先謝謝你的時間和幫助。

+2

' '頁面M904:頁M906' 我:I' - 很好的嘗試,但可惜的是'Countif'不支持3-d參考.. –

+1

'我試圖避免使用VBA。但是,如果必須是,那麼它必須是:) - 你可以爲此寫一個非常簡單的用戶定義函數。 –

+1

'= COUNTIFS('Page M904'!I:I,A14,'Page M905'!I:I,A14,'Page M906'!I:I,A14)'返回0,因爲在該句中變成'IF'。 ..AND',而不是「IF ... OR」。 – nutsch

回答

4

我試圖避免使用VBA。 但是,如果有存在,那麼它必須是 :)

有相當簡單的UDF你:

Function myCountIf(rng As Range, criteria) As Long 
    Dim ws As Worksheet 

    For Each ws In ThisWorkbook.Worksheets 
     myCountIf = myCountIf + WorksheetFunction.CountIf(ws.Range(rng.Address), criteria) 
    Next ws 
End Function 

,並調用它像這樣:=myCountIf(I:I,A13)


PS如果你想排除一些表,您可以添加If聲明:

Function myCountIf(rng As Range, criteria) As Long 
    Dim ws As Worksheet 

    For Each ws In ThisWorkbook.Worksheets 
     If ws.name <> "Sheet1" And ws.name <> "Sheet2" Then 
      myCountIf = myCountIf + WorksheetFunction.CountIf(ws.Range(rng.Address), criteria) 
     End If 
    Next ws 
End Function 

UPD:

我有四個「參考」表,我需要從掃描排除/搜索。目前,他們在過去四年中的工作簿

Function myCountIf(rng As Range, criteria) As Long 
    Dim i As Integer 

    For i = 1 To ThisWorkbook.Worksheets.Count - 4 
     myCountIf = myCountIf + WorksheetFunction.CountIf(ThisWorkbook.Worksheets(i).Range(rng.Address), criteria) 
    Next i 
End Function 
+0

我有四個「參考」表,我需要從掃描/搜索中排除。他們目前是工作手冊中的最後四個,並將保留在那個地方。可以更改該代碼以排除這四張表嗎? –

+0

當然,看到我的更新部分 –

+0

愚蠢的問題......我如何讓UDF工作。我收到了一個'#NAME?'錯誤。宏已啓用。 –

11

這可能不VBA通過以下方法來解決。

在這個例子中我在張Page M904Page M905Page M906和的範圍A:A計數所有的三分(3)。

列出單個連續範圍內的所有圖紙名稱,如下例所示。這裏列出的範圍是D3:D5

enter image description here

然後通過在細胞B2查找值,其結果可以在細胞B4通過使用下面的公式得到:

=SUMPRODUCT(COUNTIF(INDIRECT("'"&D3:D5&"'!A:A"), B2)) 
+0

謝謝Søren,但我正在使用VBA/UDF方法。我不知道UDF,但現在我做了,似乎更簡單。我非常感謝幫助。 :D –

+1

沒問題:)這也是一個非常好的解決方案。 –

2

我的第一個交... UDF我管理快速編譯。 用法: 選擇3D的範圍內爲正常和封閉是到像下面引號...

= CountIf3D( 「 'StartSheet:蝴蝶頁' G16:G878!」; 「標準」)

值得推薦的片材以相鄰以避免無法預料的結果。

Public Function CountIf3D(SheetstoCount As String, CriteriaToUse As Variant) 

    Dim sStarSheet As String, sEndSheet As String, sAddress As String 
    Dim lColonPos As Long, lExclaPos As Long, cnt As Long 

    lColonPos = InStr(SheetstoCount, ":") 'Finding ':' separating sheets 
    lExclaPos = InStr(SheetstoCount, "!") 'Finding '!' separating address from the sheets 

    sStarSheet = Mid(SheetstoCount, 2, lColonPos - 2) 'Getting first sheet's name 
    sEndSheet = Mid(SheetstoCount, lColonPos + 1, lExclaPos - lColonPos - 2) 'Getting last sheet's name 

    sAddress = Mid(SheetstoCount, lExclaPos + 1, Len(SheetstoCount) - lExclaPos) 'Getting address 

     cnt = 0 
    For i = Sheets(sStarSheet).Index To Sheets(sEndSheet).Index 
     cnt = cnt + Application.CountIf(Sheets(i).Range(sAddress), CriteriaToUse) 
    Next 

    CountIf3D = cnt 

End Function 
相關問題