Wie zähle ich die Anzahl der nicht-Nullen in excel?
Ich versuche ein makro machen, das wird gehen durch eine gesamte Arbeitsmappe, und die Anzahl der Tage, die ein Mitarbeiter gearbeitet hat. Die Blätter haben die Arbeit aufgeteilt in Tage, so dass alle T zu finden ist, die Tage, die nicht null sind. Ich habe versucht, zu verwenden COUNTIF(A11:A12,">0")
und ich bekomme die Fehlermeldung Expected : list separator or )
. Ich bin mit einem For Each
Schleife über die Blätter. Ich würde gerne alle Informationen, die auf ein neues Tabellenblatt am Ende der Arbeitsmappe mit den Namen der Mitarbeiter und die geleisteten Arbeitstage. Ich bin sehr neu in visual basic, bin aber ganz gut mit c#.
Ich jetzt so weit gekommen,
Option Explicit
Sub WorksheetLoop2()
' Declare Current as a worksheet object variable.
Dim Current As Worksheet
Dim LastColumn As Integer
If WorksheetFunction.CountA(Cells) > 0 Then
' Search for any entry, by searching backwards by Columns.
LastColumn = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End If
' Loop through all of the worksheets in the active workbook.
For Each Current In Worksheets
Current.Range("A27") = Application.WorksheetFunction.CountIf(Current.Range(Cells(11, LastColumn), Cells(16, LastColumn)), ">0")
Current.Range("A28") = Application.WorksheetFunction.CountIf(Current.Range("Al17:Al22"), ">0")
Next
End Sub
Wenn ich diese ausführe bekomme ich eine Fehlermeldung method range of object'_worksheet' failed
. Ich habe auch noch nicht in der Lage, einen Weg zu finden, um die Informationen bekommen, die alle auf die Zusammenfassung.
- Wenn Sie brauchen, VBA, Ort
Application.WorksheetFunction.
vor ZÄHLENWENN. Wenn Sie nicht möchten, VBA ist es möglich, daraus eine Lösung nur mit Formeln. - nehmen, was Scott schlug vor, 1 Schritt nach vorne.. verwenden Sie diese
Application.WorksheetFunction.CountIf(Range("A11:A12"), ">0")
- Ich bin mit diesem und es nicht werfen nicht alle Fehler, aber es spielt nicht die Anzahl der zahlen in der a27, wie es sollte "Sub WorksheetLoop2()' Deklarieren der Aktuellen als Arbeitsblatt-Objekt-variable. Dim Strom As Worksheet ' Schleife durch alle Arbeitsblätter in der aktiven Arbeitsmappe. Für Die Jeweils Aktuellen Arbeitsblätter In A27 = Anwendung.WorksheetFunction.CountIf(Range("A11:A12"), ">0") Next End Sub'
- siehe änderungen unten meine Antwort, basierend auf dieser kommentierte Sie zuletzt gebucht
Du musst angemeldet sein, um einen Kommentar abzugeben.
VBA-Lösung, in Anbetracht Ihres letzten Kommentar oben.
Gute VBA-Programmierung-Praxis beinhaltet, immer mit Option Explicit mit Ihrem code, so dass Sie wissen, wenn Sie nicht von Variablen korrekt deklariert, oder, manchmal, wenn der code schlecht ist! In diesem Fall würden Sie abgeholt haben, schreiben A27 bedeutet nicht, das Sie wieder den Wert in Zelle A27, sondern nur die Einstellung der Wert, den Sie bekommen, um variable A27. Oder vielleicht würden Sie nicht wissen, dass genau, aber Sie würde herausfinden, wo dein problem ist echt schnell!
Diesem code sollte es reparieren für Sie:
Falls es hilft, Non-VBA-Lösung:
Vorausgesetzt, Sie haben eine Zusammenfassung und jeder Mitarbeiter auf einem separaten Blatt, mit der Tage in Spalte A und Arbeitsstunden in Spalte B, geben Sie die Formel in die Formel bar in B1 der Zusammenfassung und führen Sie unten in der Liste mit den Namen in Spalte A.
=mySheet1!A1
womySheet
ist das Blatt Namen undA1
ist der Zellbezug. Sie können auch indirekte, wie ich oben, und sagen, geben Sie mySheet in Zelle A1, und geben Sie= Indirect(A1 & "!A1")
in B1 den Namen.