2017-03-17 46 views
3

我試圖讓3個總額。 批准,拒絕和等待計數總計在不同範圍內的所有表

每個片在工作簿具有相同的列此信息。

我有什麼到目前爲止已經試過低於,各種調整,但似乎算錯了,我似乎無法掌握我怎麼得到它的權利。

Sub test() 
Dim WS As Worksheet, rng1 As Range, rng2 As Range, rng3 As Range, T1 As Integer, T2 As Integer, T3 As Integer 
Dim Lastrow As Long 
On Error Resume Next 

Set rng1 = Range(("B1"), Range("B" & Rows.Count).End(xlUp)) 
Set rng2 = Range(("C1"), Range("C" & Rows.Count).End(xlUp)) 
Set rng3 = Range(("D1"), Range("D" & Rows.Count).End(xlUp)) 


T1 = 0 
T2 = 0 
T3 = 0 

For Each WS In ActiveWorkbook.Worksheets 
    With WS 
     For Each cell In rng1 
      If cell.Value = "1" Then T1 = T1 + 1 
     Next 
     For Each cell In rng2 
      If Cells.Value = "1" Then T2 = T2 + 1 
     Next 
     For Each cell In rng3 
      If Cells.Value = "1" Then T3 = T3 + 1 
     Next 
    End With 
Next 

MsgBox "Godkendte: " & T1 & "--- Afviste: " & T2 & "--- Afventer: " & T3 

End Sub 
+0

你正在計算範圍內有多少個1?你的範圍只包含1和0嗎? – CallumDA

+1

你可以用一個公式來做到這一點 - 你有使用VBA的原因嗎? –

+0

@CallumDA - 是的,只計算1,因爲這是他們在需要輸入的內容。 – Thiil

回答

2

您的代碼可以簡化公平一點。如果你發現自己在最後寫上帶有數字的變量名,你可能更適合使用數組

Sub test() 
    Dim ws As Worksheet 
    Dim v(1 To 3) As Variant 

    For Each ws In ActiveWorkbook.Worksheets 
     With ws 
      v(1) = v(1) + Application.WorksheetFunction.CountIf(.Range(.Range("B1"), .Range("B" & .Rows.Count).End(xlUp)), 1) 
      v(2) = v(2) + Application.WorksheetFunction.CountIf(.Range(.Range("C1"), .Range("C" & .Rows.Count).End(xlUp)), 1) 
      v(3) = v(3) + Application.WorksheetFunction.CountIf(.Range(.Range("D1"), .Range("D" & .Rows.Count).End(xlUp)), 1) 
     End With 
    Next 

    MsgBox "Godkendte: " & v(1) & "--- Afviste: " & v(2) & "--- Afventer: " & v(3) 
End Sub 
+1

工作就像一個魅力非常感謝! 需要它是VBA的用戶被提示選擇需要的計數文件。再次感謝 – Thiil

2

你的問題是,您要定義範圍內的循環之外,如此:

  • 那些範圍在ActiveSheet定義,當你運行你的程序
  • 它總是相同的範圍是你一遍又一遍地循環內

你也有Cells.Value而不是Cell.Value,我改變了變量更多的二stinct!


更正代碼:

Sub test() 
Dim wS As Worksheet 
Dim rng1 As Range, rng2 As Range, rng3 As Range 
Dim RgCell As Range 
Dim T1 As Integer, T2 As Integer, T3 As Integer 
Dim LastRow As Long 
Dim NumberToCount As Integer 
Dim StringToCount As String 

NumberToCount = 1 
StringToCount = CStr(NumberToCount) 

T1 = 0 
T2 = 0 
T3 = 0 

For Each wS In ActiveWorkbook.Worksheets 
    With wS 
     Set rng1 = .Range(("B1"), .Range("B" & .Rows.Count).End(xlUp)) 
     Set rng2 = .Range(("C1"), .Range("C" & .Rows.Count).End(xlUp)) 
     Set rng3 = .Range(("D1"), .Range("D" & .Rows.Count).End(xlUp)) 
    End With 'wS 

    For Each RgCell In rng1 
     If RgCell.Value = NumberToCount Or RgCell.Value = StringToCount Then T1 = T1 + 1 
    Next RgCell 
    For Each RgCell In rng2 
     If RgCell.Value = NumberToCount Or RgCell.Value = StringToCount Then T2 = T2 + 1 
    Next RgCell 
    For Each RgCell In rng3 
     If RgCell.Value = NumberToCount Or RgCell.Value = StringToCount Then T3 = T3 + 1 
    Next RgCell 
Next wS 

MsgBox "Godkendte: " & T1 & "--- Afviste: " & T2 & "--- Afventer: " & T3 

End Sub 
+1

爲什麼這是最好的完全限定範圍的一個很好的例子! +1 –

+0

乾杯,這似乎有幫助,但計數仍然關閉。 它似乎只依賴活動工作表並將其乘以4 ...我試着調整了數值,並且爲了測試目的使整個工作簿變得更加苗條 – Thiil

+0

@Thiil:你確定你的'1'是所有在Excel中存儲爲文本? – R3uK