1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

EXCEL Makro; Doppelte Einträge mit spezieller Bedingung löschen

Discussion in 'Office-Programme' started by slimer, Sep 26, 2007.

Thread Status:
Not open for further replies.
  1. slimer

    slimer Byte

    Guten Morgen @ ALL,

    ich habe mal wieder ein Programmieraufgabe für Euch, die sich für mich als Laie auf diesem Gebiet zu schwierig gestaltet.
    Es handelt sich um eine Splate B in der z.B. Artikelnummern stehen und eine Spalte C in der die Häufigkeit dieses Artikels steht.

    BSP:
    Spalte A
    012255
    012336
    012255
    012255
    012889

    Spalte C
    12
    6
    5
    3
    10

    Spalte M
    2
    5
    1
    0
    5

    Ich benötige ein Makro, dass mir in der kompletten Splate B nach doppelten Einträgen sucht. (soweit habe ich das auch)

    Die Bedingungen:
    *Suche nur nach einträgen die keine Hintergrundfarbe haben, bzw. weiß als Hintergrundfarbe haben.
    *Suche zudem in Spalte C, bei den doppelten Eintragen nach der Zahl und addiere diese alle zusammen
    *lösche die doppelten Einträge, bei denen in Spalte M die kleinere Zahl steht.
    *Trage die Summe der Zahlen aus Spalte C bei dem NICHT gelöschtem Eintrag ein.

    D.h. hier im Beispiel:
    Spalte A
    012255
    012336
    012889

    Spalte C
    20
    6
    10

    Spalte M
    2
    5
    5


    Ich hoffe es kann mir zumindest einer hier im Forum helfen
     
  2. brum

    brum Kbyte

    Ich würde wie folgt vorgehen:

    1. Daten nach Spalte C sortieren.

    2. Nun ab der zweiten Zeile der Liste jeweils die Zelle mit der darüberliegenden vergleichen. Wenn "gleich" dann Zeile löschen, sonst zur nächsten Zeile gehen.

    Gruss
    Bruno
     
  3. slimer

    slimer Byte

    Ich habe jetzt ein Makro, das eigentlich auch alles macht was ich mir vorstelle.

    Ich würde aber gerne noch die Summe der Duplikate in Spalte M durch 2 dividieren.

    ich habe das auch schon versucht, doch das ergebnis stimmt nicht.
    vielleicht hat jemand eine Idee ?

    Ich habe die entsprechende Stelle im Code grün eingefärbt

    Code:
    Sub Mog()
    Dim OjDicOrg As Object, OjDicDub As Object
    Dim Bereich As Range, Zelle As Range, HilfsArray() As Variant
    Dim I As Long
    
    Set OjDicOrg = CreateObject("Scripting.Dictionary")
    Set OjDicDub = CreateObject("Scripting.Dictionary")
    
    Set Bereich = Range("B1:B" & Range("B500").End(xlUp).Row)
    
    For Each Zelle In Bereich
        If OjDicOrg.Exists(Zelle.Text) = False Then
            OjDicOrg.Add Zelle.Text, Zelle.Row
        Else
            OjDicDub.Add Zelle.Row, OjDicOrg(Zelle.Text)
        End If
    Next Zelle
    
    
    '2 Bereiche:
    'OjDicOrg enthält alle einmaligen Zeilen und
    'OjDicDub enthält alle Dubletten
    ' das Ergebnis kann man auswerten
    
    
    HilfsArray = OjDicDub.Keys
    For I = UBound(HilfsArray) To 0 Step -1
        
        'alle Dubletten werden markiert
        Rows(HilfsArray(I)).Interior.ColorIndex = 3
        
        'die Addition durchgeführt
        Range("C" & OjDicDub.Item(HilfsArray(I))).Value = _
        Range("C" & OjDicDub.Item(HilfsArray(I))).Value + _
        Range("C" & HilfsArray(I)).Value
        
    [COLOR="SeaGreen"]
        Range("M" & OjDicDub.Item(HilfsArray(I))).Value = _
        Range("M" & OjDicDub.Item(HilfsArray(I))).Value + _
        Range("M" & HilfsArray(I)).Value[COLOR="Red"] / 2[/COLOR] [/COLOR]
        
        'Hier werden alle Dubletten gelöscht
        Rows(HilfsArray(I)).Delete
    Next I
    
    End Sub
     
  4. brum

    brum Kbyte

    Wahrscheinlich musst Du eine Klammer () um die beiden Summanden machen... ;-)

    Gruss
    Bruno
     
  5. slimer

    slimer Byte

    ich habe da schon sämtliche variationen versucht ;-)

    gruß zurück ;)
     
  6. brum

    brum Kbyte

    Welche Zahlen hast Du, die zusammengezählt werden sollen? Welches Resultat gibt es zurück und welches sollte zurückgegeben werden?

    Gruss
    Bruno
     
  7. slimer

    slimer Byte

    also ich habe ein Bsp mit 4 gleichen Zahlen in Spalte A

    in Splate M befindet sich
    2
    8
    6
    12
    = 28 / 2 = 14 für Spalte M

    ich habe dann das Makro so wie gepostet ausgeführt und erhalte dann in Spalte A einmal die Zahl und in Spalte M eine 15. das wäre nur 1 zu viel.

    Dann habe ich im Makro die ".../ 2" in "..../2 -1" geändert. da punkt vor strich müsste eigentlich 14 rauskommen. es kommt aber 12 raus.

    und so ging es mir mit allen variationen :-(

    Gruß
     
  8. brum

    brum Kbyte

    Code:
        Range("M" & OjDicDub.Item(HilfsArray(I))).Value = _
        [COLOR="SeaGreen"]([/COLOR]Range("M" & OjDicDub.Item(HilfsArray(I))).Value + _
        Range("M" & HilfsArray(I)).Value[COLOR="seagreen"])[/COLOR] / 2 
    
    Du hast zwar gesagt, Du hättest es schon mit Klammern versucht. Aber wahrscheinlich nicht mit dieser Variante...

    Gruss
    Bruno
     
  9. slimer

    slimer Byte

    Danke erstmal für deinen Einsatz :-)

    Du hast recht, die Variante habe ich noch nicht versucht!

    Ich bekomme jetzt aber als Ergebnis "7", es sollte aber 14 rauskommen.
    hänge ich an die /2 noch *2, dann bekomme ich 28.

    ???

    Gruß
     
  10. brum

    brum Kbyte

    Oh ja, stimmt! Wir rechnen nicht die Hälfte von allen. Der bisherige Wert wird immer wieder durch 2 geteilt...

    Du kannst aber einfach den Wert, der in der Addition vorher berechnet wird, durch 2 teilen.

    Gruss
    Bruno

    PS: Müsstest Du nicht den Durchschnitt aller Zahlen berechen? Also durch die Anzahl Zahlen?
     
  11. slimer

    slimer Byte

    Nein der Mittelwert bringt mir in der Spalte M nichts, da er für das Ergebnis wofür die Spalte später bestimmt ist nichts bringt.

    Wie meinst du das, in der addition davor?

    Gruß
     
  12. brum

    brum Kbyte

    Das!

    Gruss
    Bruno
     
  13. slimer

    slimer Byte

    ja ok...aber in spalte C möchte ich dir Werte nicht teilen.
     
  14. brum

    brum Kbyte

    Aber es handelt sich bei diesem Total um die "28", die Du für die Spalte M durch 2 teilen willst, oder?

    Gruss
    Bruno
     
  15. slimer

    slimer Byte

    ja...es handelt sich um die 28.

    gruß
     
Thread Status:
Not open for further replies.

Share This Page