2016-08-19 3 views
0

Hallo Ich habe den folgenden Datensatz in Excel. Nach jedem Produkt endet, wird die Summe in der nächsten Zeile gegeben und insgesamt ‚Reihe‚*“Zeichen werden vor der Gegenwart sein.‘Excel-Gruppendaten, Get-Modus und Gesamt

 Product Type Cost 
     A 1 10 
     A 1 20 
     A 2 10 
     A 1 20 
    * A  60 
     B 1 30 
     B 7 10 
     B 7 30 
     B 4 50 
    * B  120 
     C 3 10 
     C 4 50 
     C 4 30 
     C 4 25 
     C 4 20 
     C 4 15 
     C 3 10 
     C 4 5 
    * C  165 

Ich mag die MODE jeder Art für jedes Produkt erhalten. Und die Summe der Kosten für jedes Produkt. sein am besten, wenn sie nach Produktnamen aufgeführt werden können.

zum Beispiel sollte der Ausgang sein,

A 1 60 
B 7 120 
C 4 165 

Wie kann ich das erreichen? Entweder mit Excel-Formeln oder VBA ist in Ordnung. Bitte helfen. Vielen Dank Sie ...

+0

Haben Sie diese Zwischensummen manuell eingegeben oder sind sie das Ergebnis der Anwendung der integrierten Zwischensummenfunktion (Registerkarte Daten)? –

+0

Nein. Sie kommen auch mit dem Datensatz. Dies ist nur die Art, wie der Datensatz kommt. –

+0

Aber wenn Sie nur die Zeilen mit Summen wollen, können Sie Ihre Zeilen filtern mit Hilfe von Filter auf Spalte ("Type") nur leere Zellen. das wird zeigen, ist genau das, was Sie wollen. Ansonsten poste deine Frage mit mehr Details – Fabrizio

Antwort

0

Angenommen, die Quellentabelle, wie Sie es geben, ist in A1:D20 (mit Kopfzeilen in Zeile 1 und so dass Spalte A nur Sternchen (*) enthält) und die Ergebnistabelle wie Sie es geben in F2:H4 , dann gilt:

In G2, Matrixformel **:

=MODE(IF(B$2:B$20=F2,{1,1}*C$2:C$20))

bearbeiten: Wie pro Ihren Kommentar, wenn der Typ Spalte enthält möglicherweise nicht Numerik:

=INDEX(C$2:C$20,MODE(IF(B$2:B$20=F2,IF(C$2:C$20<>"",MATCH(C$2:C$20,C$2:C$20,{0,0})))))

In H2:

=SUMIF(B$2:B$20,F2,D$2:D$20)/2

Kopieren sowohl nach unten wie erforderlich.

Beachten Sie, dass, wenn mehr als ein Wert die höchste Frequenz hat (d. H. Es gibt technisch keinen einzelnen modalen Wert), der erste gefundene Wert zurückgegeben wird.

Grüße

** Matrixformeln sind nicht in der gleichen Weise wie 'Standard' Formeln eingegeben. Anstatt nur ENTER zu drücken, halten Sie zuerst STRG und SHIFT gedrückt und drücken erst dann ENTER. Wenn Sie es richtig gemacht haben, werden Sie bemerken, dass Excel geschweifte Klammern {} um die Formel legt (obwohl Sie nicht versuchen, diese selbst manuell einzufügen).

+0

Wow das funktioniert greeeaaat.Danke Alooooooooooot! :) Grüße! –

+0

Gern geschehen! –

+0

Hallo .. Das funktioniert gut, bis es nicht numerische Werte in der Spalte TYPE gibt. Was passiert, wenn ein Typ wie 1A 2A 1X kommt? Wie bekomme ich dann den MODE? Danke –

0

gegeben Ihre Daten "Struktur" ein möglicher VBA Ansatz der folgend sein:

Option Explicit 

Sub main() 
    Dim cell As Range, firstCell As Range 
    Dim iProduct As Long 

    With Worksheets("Dataset") '<--| change "Dataset" with your actual worksheet name 
     Set firstCell = .Range("A2") '<--| set first cell for the current "Product" range 
     For Each cell In .Columns(1).SpecialCells(XlCellType.xlCellTypeConstants).Offset(, 2) '<--| loop through "asterisks" in column "A" 
      iProduct = iProduct + 1 '<--| update "Product" counter 
      .Range("F1:H1").Offset(iProduct) = Array(cell.Offset(, -1).Value, _ 
                Application.WorksheetFunction.Mode(Range(firstCell, cell).Value), _ 
                cell.Offset(, 1).Value) 
      Set firstCell = cell.Offset(1) '<--| set first cell for the next "Product" range 
     Next cell 
    End With 
End Sub 

wo ich angenommen: - Daten sind in den Spalten "A: D", mit "Sternchen" in der Spalte " A " - Ausgabe in Spalte" F: H "von Zeile 1 abwärts