MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 17.10.2017, 22:31   #1
gagag
MOF User
MOF User
Standard Excel2010 - Ganze Zeile kopieren aber keine Duplikate

Guten Abend,

ich habe hier im Forum einen Code gefunden, den ich schon an meine Arbeitsmappe anpassen konnte. Es werden die Zeilen aus Blatt A über einen Button in das Archiv kopiert.
Code:

Sub Uebertrag()
    Dim lngZielZeile As Long
    With Sheets("Archiv")
    
        lngZielZeile = .Cells(Rows.Count, "A").End(xlUp).Row
        If lngZielZeile < 3 Then lngZielZeile = 3
        Range("A4:Z200").Copy
        .Cells(lngZielZeile + 1, 1).PasteSpecial Paste:=xlPasteFormulas
        .Cells(lngZielZeile + 1, 1).PasteSpecial Paste:=xlPasteFormats
    End With
    Application.CutCopyMode = False
End Sub
Ich benötige aber noch eine Anpassung.
Es sollen nur Zeilen kopiert werden, die noch nicht im Archiv enthalten sind. Die Prüfung soll sich auf die ganze Zeile beziehen. Bei exakt gleichen Daten soll nichts kopiert werden. Falls die Werte in der Zeile in den Spalten A und E-O gleich sind, aber Werte in den noch übrigen Spalten geändert wurden, sollen nur die geänderten Werte an die gleiche Stelle im Archiv kopiert werden, wo der Original Datensatz steht. Sind alle Werte neu, also A - Z dann soll die komplette Zeile in die nächste freie Zeile des Archivs kopiert werden.

Ich hoffe jemand kann mir bei der Umsetzung auf die Sprünge helfen.
L.G. gagag
gagag ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.10.2017, 15:34   #2
aloys78
MOF Meister
MOF Meister
Standard

Hallo Gagag,

Zitat:

Es sollen nur Zeilen kopiert werden, die noch nicht im Archiv enthalten sind.

Du kopierst im Moment alle Zeilen in einem Block.

Um Vorschläge zu machen, wäre eine Beispieldatei hilfreich.

Gruß
Aloys
aloys78 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.10.2017, 21:01   #3
gagag
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Aloys,

vielen Dank für den Hinweis. Ich hab mal eine eingekürzte Datei erstellt und hoffe, das es nun verständlicher wird, was ich erreichen möchte.
Angehängte Dateien
Dateityp: xlsm Zeilen von A nach Archiv kopieren.xlsm (24,2 KB, 11x aufgerufen)
gagag ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.10.2017, 22:14   #4
aloys78
MOF Meister
MOF Meister
Standard

Hallo Gagag,

verstehe ich das richtig, dass der Schlüsselbegriff sich aus den Werten der Spalten A, B und C zusammensetzt ?
a) ist A&B&C neu, dann ist auch die Zeile neu ?
b) ist A&B&C schon vorhanden, dann sind die die Werte in den übrigen Spalten auf Veränderung zu überprüfen ?
c) wenn mehrere Zeilen mit dem Schlüssel A&B&C auftreten und sich im Inhalt unterscheiden, dann sind Änderungen in der Reihenfolge dieser Zeilen zu übernehmen ?

Gruß
Aloys
aloys78 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 18.10.2017, 22:51   #5
gagag
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Aloys,

Zitat:

verstehe ich das richtig, dass der Schlüsselbegriff sich aus den Werten der Spalten A, B und C zusammensetzt ?
a) ist A&B&C neu, dann ist auch die Zeile neu ?
b) ist A&B&C schon vorhanden, dann sind die die Werte in den übrigen Spalten auf Veränderung zu überprüfen ?
c) wenn mehrere Zeilen mit dem Schlüssel A&B&C auftreten und sich im Inhalt unterscheiden, dann sind Änderungen in der Reihenfolge dieser Zeilen zu übernehmen ?

Das kommt fast hin. In Spalte A wiederholen sich allerdings die Nummern und fangen bei einem neuen Kunden von vorne an. Spalte B und C sind aber immer gleich. Demnach ist die Zeile neu, wenn es in A eine neue laufende Nummer gibt und B und C gleich sind. Der Rest passt so, wie von Dir beschrieben.

Gruß
Gagag
gagag ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.10.2017, 06:50   #6
aloys78
MOF Meister
MOF Meister
Standard

Hallo Gaga,

Zitat:

Demnach ist die Zeile neu, wenn es in A eine neue laufende Nummer gibt und B und C gleich sind.

Ich nenne mal A&B den Key der Zeile.

Im abgebildeten Beispiel beschreibst Du nachvollziehbar, wie zu verfahren ist. Das Ergebnis zeigt, wie eine schon archivierte Zeile zu aktualisieren ist; das ist so weit klar.

Aber

Zitat:

Demnach ist die Zeile neu, wenn es in A eine neue laufende Nummer gibt und der Key gleich ist.

Wenn in Deinem Beispiel für diesen Key noch eine Zeile mit lfd Nr 5 wäre, würde diese eigenständig ins Archiv übernommen und nicht die Zeile mit lfd Nr 4 aktualisieren ?

Gruß
Aloys
Arbeitsblatt mit dem Namen 'A'
*ABCDEFGHIJK
74Testkunde 1Ort 401.01.201631.12.20164000Tarif 401.01.2018*17.10.2017*
84Testkunde 1Ort 401.01.201631.12.20164000Tarif 401.01.2018*17.10.2017diese Zeile soll nicht neu kopiert werden, da keine Daten geändert wurden
94Testkunde 1Ort 401.01.201631.12.20164000Tarif 401.03.201830.09.201818.10.2017jetzt sollen nur die geänderten Werte der Zeile im Archiv ersetzt werden
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
aloys78 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.10.2017, 18:54   #7
gagag
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Aloys,

ja genau. Eine neue Filiale für den Testkunde 1, würde in Spalte A die laufende Nummer 5 erhalten und wäre als neue Zeile in das Archiv zu kopieren. Genauso wäre es, wenn jemand eine neue Zeile für den Testkunde 2 mit der laufenden Nr. 2 eingeben würde.
Gruß Gagag
gagag ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.10.2017, 19:43   #8
Fennek11
MOF User
MOF User
Standard

Hallo,

als Vorschlag und zum Testen.

Der Code erstellt eine Liste der Unikate aus Sheets("A") und kann sie an jede gewünschte Stelle abspeichern.

PHP-Code:

Sub iFen()
Dim Tx As String
With CreateObject
("scripting.dictionary")
    
Ar Sheets("A").Range("A3").CurrentRegion
    
For 2 To UBound(Ar)
        
Tx Join(Application.Index(Ari0), "|")
        If 
Not .exists(TxThen y = .Item(Tx)
    
Next i
    Sheets
("A").Range("A15").Resize(.Count) = Application.Transpose(.keys)
End With
End Sub 
Ein paar kleine Änderungen sind noch zu machen.

mfg
Fennek11 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.10.2017, 20:08   #9
gagag
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Aloys,

vielen lieben Dank vorab. Ich mach mich dann mal auf zum Testen und melde mich dann zurück.

Schönen Abend
Gagag
gagag ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 19.10.2017, 21:02   #10
gagag
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Aloys,

also der Code an sich tut mit den Zeilen und den Änderungen genau was er soll. Nur mit der Ausgabe als String/Text komme ich nicht klar. Ich bräuchte das Ganze wieder in den gleichen Zellen mit Formeln und Werten und Formatierung. Gibt es dazu auch eine Lösung?
gagag ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 09:11   #11
aloys78
MOF Meister
MOF Meister
Standard

Hallo Gagag,

Zitat:

Gibt es dazu auch eine Lösung?

Sorry - der Vorschlag stammt nicht von mir sondern vom Kollegen Fennek !

Ich würde einen anderen Lösungsansatz wählen, allerdings habe ich dazu noch folgende Fragen:

1) Ist es richtig, dass die Daten mit dem gleichen Ausdruck A&B&C im Blatt "A" immer zusammen liegen ?
Siehe Zeilen 7 - 9 in 'A'.
Der Update-Vorgang würde dann wie folgt laufen:
Zeile 8 ändert Zeile 7, wenn Abweichungen vorliegen
Zeile 9 ändert dann ebenfalls Zeile 7.
Zeilen 8 und 9 werden gelöscht und Zeile 7 wird archiviert bzw ersetzt eine ggf schon vorliegende Archierung.

2) Wenn ich es richtig verstehe, dürfte dann in 'Archiv' für jeden Ausdruck nur einmal ein bestimmter Ausdruck A&B&C enthalten sein.
In Deiner Beispieldatei kommt er allerdings 2x vor (Zeilen 8 - 9).

Und Testkunde1-Ort5 dürfte in Archiv auch nur einmal sein.

Kannst Du noch mal kurz erläutern, wie Archiv-Zeilen zu bilden sind !

Gruß
Aloys

Geändert von aloys78 (20.10.2017 um 09:56 Uhr).
aloys78 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 10:24   #12
Fennek11
MOF User
MOF User
Standard

Hallo,

falls sich die Antwort auf meinen Code bezieht (war mir nicht so klar):

die Spalten lassen sich einfach mit "Text-in-Spalten", Trennzeichen "|" wieder herstellen. Falls Formeln erhalten bleiben sollen ist dieser Ansatz entweder ungeeignet oder müßte wesentlich modifiziert werden.

mfg
Fennek11 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 22:20   #13
gagag
Threadstarter Threadstarter
MOF User
MOF User
Standard

Guten Abend Aloys, guten Abend Fennek,

Danke für Eure Rückmeldung. Also Text in Spalten hab ich auch schon in Erwägung gezogen, das geht, wäre aber umständlich.

Zitat:

Ist es richtig, dass die Daten mit dem gleichen Ausdruck A&B&C im Blatt "A" immer zusammen liegen ?
Siehe Zeilen 7 - 9 in 'A'.

Nein, leider ist das in der Original Datei nicht der Fall. Es liegen dort noch mehrere Spalten zwischen den eindeutigen Bereichen. Was in der Musterdatei A, B und C ist, wäre im Original A, F, und I-L. Die restlichen Aussagen treffen zu.
Ich hatte zwischenzeitlich auch noch mit dem nachfolgenden Code experimentiert. Stolpere jedoch auch hier da ich nicht in der Lage bin, den so umzubauen, dass er mehr als nur eine bestimmte Spalte kopiert anpasst und auch nur auf eine Spalte prüft. Ich benötige das Ganze ja jeweils bezogen auf einen Bereich aus mehren Spalten für die Prüfung und natürlich die ganze Zeile zum kopieren, bzw, ersetzten von Änderungen an dieser.
Code:

Sub inArchiv_Click()

Dim Eingang As Worksheet, AR As Worksheet
Dim y As Long, rngGefunden As Range, bolGefunden As Boolean
Dim Letzte As Long, strErste As String

Set Eingang = Worksheets("A")
Set AR = Worksheets("Archiv")
Letzte = AR.UsedRange.SpecialCells(xlCellTypeLastCell).Row

For y = 2 To Eingang.Range("A65536").End(xlUp).Row
    bolGefunden = False
    Set rngGefunden = AR.Range("B:B").Find(Eingang.Cells(y, 3).Value, , _
        xlValues, xlWhole, xlByRows, xlNext)
    If Not rngGefunden Is Nothing Then
        strErste = rngGefunden.Address
        Do
            If AR.Cells(rngGefunden.Row, 3) = Eingang.Cells(y, 7) Then 'And .....
                bolGefunden = True
                Exit Do
            End If
            Set rngGefunden = AR.Range("B:B").FindNext(rngGefunden)
        Loop While rngGefunden.Address <> strErste
    End If
    If bolGefunden = False Then
        AR.Cells(Letzte + 1, 2) = Eingang.Cells(y, 3)
        AR.Cells(Letzte + 1, 3) = Eingang.Cells(y, 7)
        Letzte = Letzte + 1
    End If
Next y
End Sub
Meist schaffe ich es irgendwann Codeschnipsel so anzupassen, dass das raus kommt was ich möchte. Aber im Moment klappt grad nichts.
Aber ich hab noch Hoffnung!

Gruß Gagag
gagag ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 22:26   #14
aloys78
MOF Meister
MOF Meister
Standard

Hallo Gagag,

Zitat:

Was in der Musterdatei A, B und C ist, wäre im Original A, F, und I-L

Dann stell doch mal eine Beispieldatei mit dieser Struktur und ein paar mehr Daten mit den typischen Fällen zur Verfügung: Ausgangsdaten und Archiv vorher / nachher.

Gruß
Aloys
aloys78 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 20.10.2017, 23:50   #15
gagag
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Aloys,

nächster Versuch...

Gruß Gagag
Angehängte Dateien
Dateityp: xlsm 2_Kopie von Zeilen von A nach Archiv kopieren.xlsm (33,9 KB, 9x aufgerufen)
gagag ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.