Eindeutige Werte in mehreren Spalten

Eindeutige Werte in mehreren Spalten

Ich habe eine Tabelle mit folgendem: -

Prod No     Store 1 $    Store 1 Qty    Store 2 Sale    Store 2 Qty  etc
A               4.00         1             7.50            2
B               0            0             15.00           1
C               4.00         2              -8             -1
D               5.00         1              5.00           1

Ich muss alle Einzelpreise für jede Teilenummer ermitteln und dann die Menge für jeden Preis addieren, z. B.

Prod No A has 4.00 1 unit and 7.50 2 units
Prod No B has 0.00 0 units and 15.00 1 unit
Prod No C has 4.00 2 units and -8 -1 unit
Prod No D has 5.00 2 units

Ich brauche außerdem eine Liste nur der Einzelpreise und der Gesamtmengen für jeden Preis

z.B,

4.00 3 units
7.50 2 units
0.00 0 units
-8 -1 unit
15.00 1 unit
5.00 2 units

Antwort1

Zunächst einmal glaube ich, dass Sie auf lange Sicht mehr Erfolg hätten, wenn Sie Ihre Daten in einer horizontaleren Form speichern würden, z. B.

Store      Product     Qty    Sales
Store 1    A           1      4.00
Store 1    B           0      0.00
Store 1    C           2      4.00
Store 1    D           0      0.00

Es ist viel einfacher, Nachschlagevorgänge in einer einzelnen Spalte durchzuführen als in Spaltenpaaren.

(Je nach Größe und Umfang ist eine Access-Datenbank mit separaten Tabellen für Geschäfte, Produkte und Verkäufe möglicherweise sogar noch besser.)

Wenn Sie jedoch mit dem, was Sie haben, nicht weiterkommen und ein VBA-Makro in Ihrem Arbeitsblatt vertragen, können Sie Folgendes versuchen:

  1. Fügen Sie Ihrem VBA-Projekt ein Klassenmodul mit dem Namen hinzu, das Folgendes Tupleenthält:

    Private szKey As String
    Private nValue As Double
    
    Public Property Get Key() As String
        Key = szKey
    End Property
    Public Property Let Key(newKey As String)
        szKey = newKey
    End Property
    
    Public Property Get Value() As Double
        Value = nValue
    End Property
    Public Property Let Value(newValue As Double)
        nValue = newValue
    End Property
    
  2. Module 1Fügen Sie Ihrem Projekt beispielsweise ein normales Modul hinzu, das Folgendes enthält:

    Public Function Summarize(ByRef rng As Range) As String
        If rng.Cells.Count Mod 2 = 1 Then Err.Raise 100, "", "Expected range of even cells"
    
        Dim coll As New Collection
    
        On Error Resume Next
        Dim flag As Boolean: flag = False
        Dim prevCel As Range, cel As Range: For Each cel In rng.Cells
            If flag Then
                Dim Key As String: Key = "" & prevCel.Value2
                coll(Key).Value = coll(Key).Value + cel.Value2
    
                If Err.Number <> 0 Then
                    Err.Clear
                    Dim t1 As New Tuple
                        t1.Key = "" & prevCel.Value2
                        t1.Value = cel.Value2
                        coll.Add t1, Key
                    Set t1 = Nothing
                End If
            End If
            Set prevCel = cel
            flag = Not flag
        Next cel
        On Error GoTo 0
    
        Dim t2 As Variant: For Each t2 In coll
            If Len(Summarize) Then Summarize = Summarize & ", "
            Summarize = Summarize & Format(t2.Key, "#0.00") & " @ " & t2.Value
        Next t2
    End Function
    
  3. Anschließend können Sie in das Arbeitsblatt eine Formel eingeben, beispielsweise:

    ="Product " & $A2 & " has " & Summarize($B2:$I2)
    

    Stellen Sie sicher, dass Sie den Bereich $B2:$I2 durch einen Bereich ersetzen, der groß genug ist, um alle möglichen Anzahlen von Geschäften abzudecken. Stellen Sie außerdem sicher, dass Sie einen Bereich mit gleichmäßiger Größe verwenden (da die Werte für Verkauf/Menge paarweise vorliegen), da Sie sonst eine #VALUEFehlermeldung erhalten.

verwandte Informationen