2017-09-28 4 views
0

Ich versuche, eine nicht-vba Excel-Funktion zu entwickeln, die jede Zelle in mehreren Bereichen für verschiedene Parameter überprüft und dann die Anzahl der zutreffenden Vorkommen zurückgibt. Mein spezifisches Problem tritt auf, wenn die HOUR-Funktion auf eine Reihe von Datumszellen angewendet wird und gezählt wird, wie viele dieser Zellen einer bestimmten Stunde entsprechen.Excel: Wenden Sie Funktion auf jede Zelle in Formel

Um zu klären, in VBA würde ich (diese Spalte A enthält Termine übernehmen bitte) schreiben so etwas wie:

Sub tester33() 
Dim r As Range 
Dim c 
Dim a As Integer 
Set r = Range("A1:A10") 
a = 0 
For Each c In r 
    If (Hour(c) = 5) Then 'time is 5 am, other if conditions are omitted 
     a = a + 1 
    End If 
Next c 
MsgBox (a) 
End Sub 

Was würde ich Arbeits

=COUNTIF(HOUR(A:A);"=5") 

Meine Suche ist bisher haben möchte erwiderte Nada. Bitte beachten Sie, dass ich auf diese Frage here und here Antworten gefunden habe, die leider nicht für nicht mathematische Excel-Funktionen funktionieren. Ich hoffe, das ist kein ganz triviales Problem, da ich neu in den In-Blatt-Formeln bin.

Antwort

0

Eine alternative (nicht-Array) Formel

=SUMPRODUCT(--(HOUR(A:A)=5))

zu verwenden, die nicht die Formel Ctrl + Umschalt + eingeben Verwendung begehen erfordert. Es ist letztlich eine Frage der Präferenz.

Wenn Ihre Daten nicht die gesamte Länge von Spalte A umfassen, sollten Sie nur den von Daten belegten Bereich verwenden (z. B. A1:A50 anstelle von A:A), da Excel dann nicht durch leere Zellen iterieren muss kann Dinge zusammenklopfen.

+0

TotsieMae und @Mrig lösten beide mein Problem. Danke an beide. Die Einschränkung der Reichweite ist ebenfalls ein guter Vorschlag, der immer dann empfohlen werden kann, wenn Probleme mit mehreren Zellen auftreten. – NN314

+0

stimme ich absolut zu. Ich neige dazu, die absolute Mehrheit der Referenzen zu verwenden, außer wenn relative Referenzen benötigt werden. Es ist normalerweise einfacher, ein Problem zu verhindern, bevor es passiert, als es zu versuchen, herauszufinden, wie es im Nachhinein behoben werden kann. – TotsieMae

0

Verwenden

=SUM((HOUR(A1:A50)=5)*1) 

oder

=SUM(--(HOUR(A1:A50)=5)) 

Beide sind Matrixformeln es so begehen, indem Ctrl + Umschalt + Enter. Ändern Sie A1:A50 in Ihren Datenbereich.