2016-04-11 11 views
0

Ich muss die Anzahl der Zeilen abhängig von der Woche und Art der Daten zählen. Ich habe die Excel-Formel, aber ich möchte es als VB-Code machen, aber ich habe nicht so viel Idee und es funktioniert nicht.Anzahl der Zeilen basierend auf Parameter zählen. (Excel VBA)

=IF(AND($N$4="All",$N$5="All"),SUM(('SD'!$I$2:$I$99538='Source'!$B6)*('SD'!$A$2:$A$99538='Source'!C$5)),IF(AND($N$4="All",$N$5<>"All"),SUM(('SD'!$I$2:$I$99538='Source'!$B6)*('SD'!$A$2:$A$99538='Source'!C$5)*('SD'!$B$2:$B$99538='Source'!$N$5)),IF(AND($N$4<>"All",$N$5="All"),SUM(('SD'!$I$2:$I$99538='Source'!$B6)*('SD'!$A$2:$A$99538='Source'!C$5)*('SD'!$K$2:$K$99538='Source'!$N$4)),IF(AND($N$4<>"All",$N$5<>"All"),SUM(('SD'!$I$2:$I$99538='Source'!$B6)*('SD'!$A$2:$A$99538='Source'!C$5)*('SD Raised'!$B$2:$B$99538='Source'!$N$5)*('SD'!$K$2:$K$1048576='Source'!$N$4)))))) 

Ich habe ein Blatt, auf dem in allen Daten erfasst werden (SD) und die zweite wird das Blatt (Quelle) sein, wo ich brauche die Anzahl der Zeilen auf der Basis der Parameter wie folgt zur Verfügung zu zählen; Die Woche, in der Daten gehören und die Kategorie der Daten.

Bearbeiten: Diese Formel * zählt nicht die Daten, die ich zählen musste. Und wenn möglich, möchte ich es als VBA-Code machen.

Hier sollten die gezählten Daten gehen. „Wochen verändern sich in Abhängigkeit von dem Drop-Down-iput (Max von 4 Wochen unter der ausgewählten Woche)“

Report

Dieses Bild zeigt die Daten, wo ich brauche zu erfassen und die Anzahl der Kategorie zählt auf der Grundlage der Woche und Kategorie. (Probe nur)

source

+0

was ist Ihre Frage jetzt? Was hast du probiert, was genau sollte es tun? Bitte geben Sie Ihre Frage an –

+0

@DoktorOSwaldo Sorry dafür, aber dieser Code funktioniert nicht. – Erkyy

+0

Ist es nur meine Webseite? Ich kann keinen Code sehen ... nur eine Excel-Formel. – Ambie

Antwort

0

so muss ich ein wenig erraten, was Sie wollen, aber wenn Sie bestimmte Zeilen in Excel VBA Count möchten, können Sie so etwas wie folgt verwenden:

Dim allRows As Variant 
Dim i As Long 

Dim count as Long 
count = 0 

allRows = Tabelle5.Range("A" & start_row, end_column & last_row) 

For i = 1 To UBound(allRows) 
    If allRows(i, 1) = *category* and allRows(i,2) = *week* Then 
     count = count + 1 
    End If 
Next 

zu Finde den richtigen Bereich, es gibt mehrere mögliche Lösungen. Ich benutze diese, vielleicht ist es nicht die beste, aber funktioniert gut für mich:

Private Function last_row() As Integer 
Dim rangeObj As Range 
Set rangeObj = Tabelle5.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious) 
If rangeObj Is Nothing Then 
    last_row = start_row 
Else 
    last_row = rangeObj.row 
End If 
End Function 

Public Function start_row() As Integer 
    start_row = 2 
End Function 
+0

Ich habe Bilder für weitere Referenz hinzugefügt. – Erkyy

+0

ja, das sollte möglich sein, mit dem, was ich geschrieben habe, nur eine Funktion aus, mit Kategorie und Woche als Parameter –

+0

Ich glaube, das wird funktionieren, aber ein paar mehr Frage, da ich die Reichweite einstellen muss, noch die Daten benötigt wie Woche und Kategorie sind in A2- und I2-, sollte Bereich maximiert werden, da jede Woche Daten hinzugefügt werden. – Erkyy

0

Ich denke, wenn es der richtige Punkt, den Sie DoktorOSwaldo treffen sind, besser nutzen die Range() Rows.Count Eigenschaft eher. als Scrollen durch allRows. Hoffe, das hilft.

Hadi

+0

Beiträge, die nicht direkt beantworten (oder versuchen, zu antworten) OP-Frage sollte als Kommentar zu dem Beitrag gepostet werden, auf den Sie antworten. – Vegard

+0

dann müsste er den Bereich filtern, und ein Bereich mit nicht kontinuierlichen Zellen, gibt nur Probleme mit der row.Count. Aber ich sehe deinen Point, sowieso Looping durch ein Array, wie es gemacht wird, ist ziemlich schnell. –

Verwandte Themen