Makro zum suchen und hinzufügen
#1
Ich benötige Hilfe. 
Ich möchte eine Auswertung starten. Dazu sollen die jeweligen Mengen in die Tabelle "Auswertung" Automatisch zusortiert werden. Am Anfang sind nur die Zellen A-C in Kopie vorhanden die ich in meiner Auswertung schon mit einem Bestimmen Text versehen habe, der nicht verändert werden darf. Ich benötige ein Makro das in der Tabelle "Kopie" nach neuen Namen sucht, den Namen und die jeweilige Menge in "Auswertung" einfügt.

Vielen Dank


Angehängte Dateien
.xlsx   Test.xlsx (Größe: 9,3 KB / Downloads: 6)
Antworten Top
#2
Hallo Xenon

So zum Beispiel:
Code:
Sub testxenon()
lzk = Sheets("Kopie").Cells(Rows.Count, 1).End(xlUp).Row
lza = Sheets("Auswertung").Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Kopie")
For ik = 6 To lzk
    vk = .Cells(ik, 1).Value
    With Sheets("Auswertung")
        zahler = 1
        For ia = 5 To lza
            va = Sheets("Auswertung").Cells(ia, 1).Value
            If va = vk Then zahler = 0
        Next ia
        If zahler = 1 Then
            Sheets("Kopie").Select
                Rows(ik).Select
                Selection.Copy
            Sheets("Auswertung").Select
                Cells(ia, 1).Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
            lza = lza + 1
        End If
    End With
Next ik
End With
End Sub

Zeilen, die in "Auswertung" nicht vorhanden sind, werden von "Kopie" dorthin übertragen.
Es geht sicher auch eleganter.
Grüsse Niclaus
[-] Folgende(r) 1 Nutzer sagt Danke an Niclaus für diesen Beitrag:
  • Xenon85
Antworten Top
#3
Mega, das funktioniert.

Vielen Dank

Kannst du mir das noch so erweitern, dass wenn A, B bzw C nochmals in Kopie auftauchen, die jeweils auch hinzugefügt werden ( unten drunter oder am besten in die jeweilige Zeile). 


Vielen Dank schonmal.


Angehängte Dateien
.xlsx   Test.xlsx (Größe: 12,11 KB / Downloads: 2)
Antworten Top
#4
Hallo Xenon

So könnte es klappen:

Code:
Sub xenon1()
' stimmt die Namen in den beiden Tabellen ab
lzk = Sheets("Kopie").Cells(Rows.Count, 1).End(xlUp).Row
lza = Sheets("Auswertung").Cells(Rows.Count, 1).End(xlUp).Row

With Sheets("Kopie")
    For ik = 2 To lzk
        vk = .Cells(ik, 1).Value
        With Sheets("Auswertung")
            zahler = 1
            For ia = 2 To lza
                va = .Cells(ia, 1).Value
                If va = vk Then zahler = 0
            Next ia
            If zahler = 1 Then
                Sheets("Kopie").Cells(ik, 1).Copy
                .Cells(ia, 1).PasteSpecial xlPasteValues
                    Application.CutCopyMode = False
                lza = lza + 1
            End If
        End With
    Next ik
End With
Call xenon2
End Sub

Sub xenon2()
' überträgt die Werte von Tab. Kopie in die Tab. Auswertung
lzk = Sheets("Kopie").Cells(Rows.Count, 1).End(xlUp).Row    ' letzte Zeile in Sp. A
lsk = Sheets("Kopie").Cells(1, Columns.Count).End(xlToLeft).Column  ' letzte Spalte in Zeile 1
lza = Sheets("Auswertung").Cells(Rows.Count, 1).End(xlUp).Row

With Sheets("Kopie")
    For ik = 1 To lzk
        vk = .Cells(ik, 1).Value
        With Sheets("Auswertung")
            For ia = 1 To lza
                va = .Cells(ia, 1).Value
                If va = vk Then
                    For ikk = 2 To lsk
                        If Not IsEmpty(Sheets("Kopie").Cells(ik, ikk)) Then
                            .Cells(ia, ikk) = Sheets("Kopie").Cells(ik, ikk)
                        End If
                    Next ikk
                End If
            Next
        End With
    Next ik
End With
End Sub

Mit dem ersten Makro werden alle Namen von Tabelle "Kopie" in die Tabelle Auswertung übertragen. Für jeden Namen gibt es in "Auswertung" eine Zeile, auch wenn dieser Name in "Kopie" mehr als einmal aufgeführt ist.
Das zweite Makro wird am Ende des ersten Makros aufgerufen. Dieses zweite Makro macht folgendes:
Es überträgt zu jedem Namen die Werte aus den einzelnen Spalten der Tabelle "Kopie" in die Tabelle "Auswertung".

Ich gehe davon aus, dass in "Kopie" zu jedem Namen in den einzelnen Spalten jeweils nur ein Wert vorkommt.  -  Also z. B. für den Namen B:
Es gibt in Spalte "Menge1" für B nur einen Eintrag, auch in den Spalten "usw." und "Menge3" gibt es für B jeweils nur einen Eintrag.
Wenn in B9 auch ein Wert stehen würde, würde dieser Wert in die Tabelle "Auswertung" übergeben. Der Wert aus B3 würde dabei überschrieben.

Ich hoffe, so etwas hättest Du gern.
Viele Grüsse
Niclaus
[-] Folgende(r) 1 Nutzer sagt Danke an Niclaus für diesen Beitrag:
  • Xenon85
Antworten Top
#5
Mega. Vielen Dank Niclaus. 

Genau das was ich gesucht habe.
Antworten Top
#6
Mahlzeit.

Eine Ergänzung hätte ich noch gern. 
Der Code funktioniert super so wie er ist. Ich habe ihn jetzt in meinem Datensatz laufen lassen, ohne Probleme. Nur habe ich bei ca 2000 Einträgen den Überblick verloren was neu ist. 
Kann man das Makro so anpassen, dass nur Zellen markiert werden die neu hinzu gefügt werden. (Hier in meiner Tabelle also nur (neu; 4563, C10=5 und F10=8)).

Die bisherigen Markierungscodes markieren mir immer die komplette Tabelle in "Auswertung". Im Anhang hab ich die Angepasste Datei.


Vielen lieben Dank für eure / deine Hilfe.


Angehängte Dateien
.xlsm   Test - Kopie.xlsm (Größe: 27,37 KB / Downloads: 5)
Antworten Top
#7
Hallo Xenon

Es soll nur noch ab "neu" getestet werden.
Wie ist es denn, wenn in A11 wieder "X" aufgeführt wird oder in in A12 "Z". Sollen die entsprechenden Werte in der Tabelle "Auswertung" ganz neu behandelt und aufgelistet werden? 

Oder sollen deren Werte dort in den Zeilen 6 bzw. 8 aktualisiert werden? - In diesem Fall sehe ich nicht ein, warum der Ablauf geändert werden soll.

Grüsse Niclaus
Antworten Top
#8
Danke für deine Rückmeldung,

vielleicht habe ich mich falsch ausgedrückt.

Es wäre super wenn neue Einträge farblich markiert werden.

Als Beispiel:

Wenn ich nun das Makro ausführe würde es mir die folgenden Zeilen in die Tabelle "Auswertung" hinzufügen.

"neu // 4563 // 5 // leer // leer // 8"

Das lässt sich ja noch super nachvollziehen.

Wenn nun aber in der "Kopie" Tabelle erneut ein Wert bei zB. Name: C, Menge 5: 8 stehen würden würde ja in der Tabelle "Auswertung" nur bei "Menge 5" der Wert 8 nachgetragen. Was auch super funktioniert und auch so bleiben soll. 

Aber kann er diese Zelle mit der neu hinzugefügten "8" auch farblich markieren?

Oder ist das zu viel umzuprogramieren?

Danke
Antworten Top
#9
Hallo Xenon

Als allererstes: Du hast ja die Makros leicht angepasst. Dabei ist mir aufgefallen:
In der Datei, die Du hochgeladen hast: Test - Kopie.xlsm
Wenn Du dort in "Auswertung" A3:F9 alle Zellinhalte löschst und dann das Makro startest, wird aus der Tabelle "Kopie" die Zeile 2 (mit dem Namen A) nicht in die "Auswertung" übernommen. Ist das Absicht? – Wenn nicht müsstest Du im Makro xenon1 und xenon2 anpassen.

Code:
With Sheets("Kopie")
    For ik = 3 To lzk 'In welcher Zeile beginnt der Abgleich'

Es müsste dann heissen:
    For ik = 2 To lzk 'In welcher Zeile beginnt der Abgleich'

Ich habe diese Aenderung in der Datei, die ich jetzt hochlade, gemacht. Ich hoffe, es ist in Deinem Sinn.

Dann: Ich habe ein neues Makro geschaffen: xenon3 in Modul3. Dazu waren in xenon1 verschiedene Aenderungen nötig. Die Aenderung in xenon2 habe ich oben erwähnt. – Neu machen die Makros meiner Meinung nach das, was Du möchtest:
«Wenn nun aber in der "Kopie" Tabelle erneut ein Wert bei zB. Name: C, Menge 5: 8 stehen würde, würde ja in der Tabelle "Auswertung" nur bei "Menge 5" der Wert 8 nachgetragen. Was auch super funktioniert und auch so bleiben soll. Aber kann er diese Zelle mit der neu hinzugefügten "8" auch farblich markieren?»

Grüsse Niclaus


.xlsm   TestXENON_V3.xlsm (Größe: 30,6 KB / Downloads: 3)
[-] Folgende(r) 1 Nutzer sagt Danke an Niclaus für diesen Beitrag:
  • Xenon85
Antworten Top
#10
Vielen Dank. Genau so wollte ich das haben. 

Nochmals Danke
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste