2016-08-22 4 views
0

Ich brauche Hilfe in dieser Abfrage.Excel VBA Sumifs sortieren und setzen

So habe ich diese Daten:

| A | B | C | D | 
---------------------------------- 
Date  int001 int002 int003 
2/1/2016  10  11  12 
2/2/2016  5  5  -5 
2/3/2016 -4  -4  4 
2/4/2016  5  5  -5 
2/1/2016  2  -2  2 
2/2/2016 -3  -2  -1 
2/3/2016  1  1  1 
2/4/2016  2  -1  3 
2/1/2016 -4  -5  6 
2/2/2016 -2  -2  2 
2/3/2016 -1  1  -1 
2/4/2016 -5  -3  1 

Mit diesen Daten Ich brauche eine Summe zu berechnen, basierend auf einzigartige Daten und pozitive Werten.

Für erstes unique_date ich brauche:

  • Summe der Spalte B, wo die Werte> 0 und in H2
  • Summe der Spalte C eingestellt, wobei die Werte> 0 und eingestellt in H3
  • Summe von Spalte D, wo die Werte> 0 und setzen in H4

Für zweite unique_date ich brauche:

  • Summe der Spalte B, wo die Werte> 0 und in H5
  • Summe der Spalte C, wo die Werte> 0 und eingestellt in H6 gesetzt
  • Summe der Spalte D, wo die Werte> 0 und eingestellt in H7

Für dritte unique_date ich brauche:

  • Summe der Spalte B, wo die Werte> 0 und in H8
  • Summe der Spalte C eingestellt, wobei die Werte> 0 und eingestellt in H9
  • Summe der Spalte D, wo die Werte> 0 und

Forth unique_date i müssen in H10 gesetzt:

  • Summe der Spalte B, wo die Werte> 0 und gesetzt in H11
  • sum die Spalte C, wo die Werte> 0 und in H12
  • Summe der Spalte D, wo die Werte> 0 und gesetzt in H13

Die Spalte "F" mit uniqu gesetzt Die Daten aus der Spalte "A" sind Arbeit. Aber die Spalte "H" funktioniert immer noch nicht.

Die Ergebnisse ich brauche, ist:

| F  | H | 
--------------------- 
Uniq Dates Results: 
2/1/2016  12 
2/2/2016  11 
2/3/2016  20 
2/4/2016  5 
      5 
      2 
      1 
      2 
      5 
      7 
      5 
      4 

Dies ist der Code, den ich schreiben:

Sub Tsum() 

Dim int001 As Range 
Dim int002 As Range 
Dim int003 As Range 
Dim data1 As Date 
Dim data2 As Date 
Dim data3 As Date 
Dim nr_rows As Integer 
Dim dates As Range 
Dim nr_unique_dates As Integer 
Dim unique_dates As Range 

'-------------------------------------------------------------- 
nr_rows = Cells(Rows.Count, "A").End(xlUp).Row 
Set int001 = Range("B2:B" & nr_rows) 
Set int002 = Range("C2:C" & nr_rows) 
Set int003 = Range("D2:D" & nr_rows) 
Set dates = Range("A2:A" & nr_rows) 
'-------------------------------------------------------------- 
Range("A1:A" & nr_rows).AdvancedFilter Action:=xlFilterCopy,   CopyToRange:=Range("F1"), Unique:=True 
nr_unique_dates = Cells(Rows.Count, "F").End(xlUp).Row 
Set unique_dates = Range("F2:F" & nr_unique_dates) 

Range("H2:H" & nr_rows) = Application.WorksheetFunction.SumIfs(dates, int001, int002, int003, unique_dates, int001, int002, int003, ">0") 

End Sub 

---- Das Problem irgendwo unten ist, weil ich weiß nicht, wie man loop es

Range("H2:H" & nr_rows) = Application.WorksheetFunction.SumIfs(dates, int001, int002, int003, unique_dates, int001, int002, int003, ">0") 

Antwort

1

nach OP Präzisierungen bearbeitet:

Ersatz:

Range("H2:H" & nr_rows) = Application.WorksheetFunction.SumIfs(dates, int001, int002, int003, unique_dates, int001, int002, int003, ">0") 

mit:

Dim iDate As Long 
    With Range("H1") 
     For iDate = 1 To nr_unique_dates - 1 
     .Offset((iDate - 1) * 3 + 1) = Application.WorksheetFunction.SumIfs(int001, dates, unique_dates(iDate), int001, ">0") 
     .Offset((iDate - 1) * 3 + 2) = Application.WorksheetFunction.SumIfs(int002, dates, unique_dates(iDate), int002, ">0") 
     .Offset((iDate - 1) * 3 + 3) = Application.WorksheetFunction.SumIfs(int003, dates, unique_dates(iDate), int003, ">0") 
     Next iDate 
    End With 
+0

Vielen Dank und sorry für meine erste Erklärung. Ich bearbeite den Post mit den richtigen Informationen. Ihr Code macht die Summe für Spalten (B + C + D), und ich möchte separat. Kannst du mir damit helfen? – BOB

+0

siehe bearbeitete Antwort. Wenn ich Ihre Frage erfüllt habe, markieren Sie diese als akzeptiert. danke – user3598756

+0

Wenn ich ein anderes Datum (2/4/2016) mit Werten für int001, int002 und int003 einführe, werden die Ergebnisse um 1 Leerzeichen verschoben, das leer oder 0 ist. Wie kann ich dieses Problem lösen? – BOB