Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Abgleich von Zellen/einfügen falls anders

VBA Abgleich von Zellen/einfügen falls anders
09.07.2013 10:28:57
Zellen/einfügen
Hallo liebe Helfer,
ich bin leider noch ein rechter Makro Neuling und stehe vor der Aufgabe ein fortlaufende Tabelle von Aktienschlusskursen zu erstellen.
Um es genauer zu beschreiben, hat das Exceldokument zwei Sheets. Auf dem Zweiten werden die jeweils lettzen 20 Aktienschlusskurse automatisch aus dem Internet geladen und eingefügt. Auf dem ersten Sheet sollen nun die historischen Schlusskurse untereinander aufgelistet werden. Dazu bräuchte ich ein VBA Code, der prüft, ob die Schlusskurse aus dem 2. Sheet schon an das Ende des ersten Sheet kopiert wurden. Falls nicht sollen diese dorthin kopiert werden, falls sie schon kopiert wurden, soll nicht geschehen.
Ich wäre sehr dankbar, wenn mir jemand auf die Sprünge helfen könnte, wie ich den Vergleich schreiben kann und das kopieren, falls die Daten nocht nicht da sind.
Vielen, vielen Dank im Vorraus,
Max

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Abgleich von Zellen/einfügen falls anders
09.07.2013 10:40:35
Zellen/einfügen
Hallo Max,
woher weiss es denn, ob die Schlusskurse neu oder alt sind? Gibt es ein Datumsfeld?
Ohne Musterdatei wird dir niemand ein Makro schreiben können. Und wenn doch, wirst du als Neuling es nicht an deine Datei angepasst bekommen.
Grüße,
Klaus M.vdT.

AW: VBA Abgleich von Zellen/einfügen falls anders
09.07.2013 10:52:29
Zellen/einfügen
Guten Morgen Klaus,
vielen Dank für deine schnelle Antwort.
Ja klar ein Datumsfeld ist dabei. Ich habe mir das so vorgestellt, dass wenn das Datum schon auf dem ersten Sheet ist, dass nichts passiert und wenn es noch nicht drauf ist, die ganze Zeile kopiert wird. Nur scheitert es an der Umsetzung mit der wenn Formel.
Vielleicht habe ich etwas untertrieben, ich bin kein Absoluter Neuling, aber ich bin noch sehr weit von einem Profi entfernt.
Musterdatei: https://www.herber.de/bbs/user/86269.xlsm
Viele Grüße
Max

Anzeige
AW: VBA Abgleich von Zellen/einfügen falls anders
09.07.2013 11:13:56
Zellen/einfügen
Hi Max,
ich würd es so machen. Durch die Verwendung von Formel + Hilfsspalte ist es auch bei riesigen Datenmengen noch rasend schnell.
Sub HoleNeue()
On Error GoTo hell   'Error, falls keine neuen gefunden wurden!
'BLattnamen variabel
Const BlattQuelle As String = "Übersicht"
Const BlattNeu As String = "NV Neu 2010-2011"
Dim lRow As Long
With Sheets(BlattQuelle)
'letzte Zeile
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Range("F2:F" & lRow)
'Trick 17: Diese Formel verursacht #DIV/0 !
.FormulaR1C1 = "=1/COUNTIF('" & BlattNeu & "'!C1,RC1)"
'Alle Zeilen mit #DIV/0 abgreifen (das erspart die langsame Schleife!)
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Copy
End With
End With
With Sheets(BlattNeu)
'letzte Zeile
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'einfügen
.Range("A" & lRow).PasteSpecial xlPasteValues
'Hilfsspalten löschen
.Columns(6).ClearContents
Sheets(BlattQuelle).Columns(6).ClearContents
End With
hell:
End Sub
Bezüglich deiner Einschätzung deines VBA-Levels kann ich nur sagen:
Damen aufgepasst, auf einer Skala vom Elefantenmensch bis hin zu Brad Pitt betrachtet, bin ich näher an Brad Pitt!
Grüße,
Klaus M.vdT.

Anzeige
AW: VBA Abgleich von Zellen/einfügen falls anders
09.07.2013 11:35:56
Zellen/einfügen
Vielen Dank für deine Mühen.
Das klingt alles logisch und halbwegs nachvollziehbar, aber irgendwie scheine ich dann doch noch näher an dem Elefantenmenschen dran zu sein, weil er mir den gestrigen Schlusskurse trotzdem nicht kopieren will.
Das einzige was er macht, ist mir die Hilfsspalte zu erstellen, von der ich den Sinn nicht so richtig verstehe glaube ich.
https://www.herber.de/bbs/user/86270.xlsm

AW: VBA Abgleich von Zellen/einfügen falls anders
09.07.2013 11:39:54
Zellen/einfügen
Hallo Max,
das stimmt so nicht. Das Makro macht exakt was es soll - nichts. Denn es gibt keine NEUEN Einträge die kopiert werden könnten!
Allerdings ist der Bug, die Hilfsspalten hätten wieder gelöscht werden sollen. leichte Änderung:
Sub HoleNeue()
On Error GoTo hell   'Error, falls keine neuen gefunden wurden!
'BLattnamen variabel
Const BlattQuelle As String = "Übersicht"
Const BlattNeu As String = "NV Neu 2010-2011"
Dim lRow As Long
With Sheets(BlattQuelle)
'letzte Zeile
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
With .Range("F2:F" & lRow)
'Trick 17: Diese Formel verursacht #DIV/0 !
.FormulaR1C1 = "=1/COUNTIF('" & BlattNeu & "'!C1,RC1)"
'Alle Zeilen mit #DIV/0 abgreifen (das erspart die langsame Schleife!)
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Copy
End With
End With
With Sheets(BlattNeu)
'letzte Zeile
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
'einfügen
.Range("A" & lRow).PasteSpecial xlPasteValues
'Hilfsspalten löschen
End With
GoTo heaven:
hell:
MsgBox ("Keine neuen Einträge gefunden!")
heaven:
Sheets(BlattNeu).Columns(6).ClearContents
Sheets(BlattQuelle).Columns(6).ClearContents
End Sub
Grüße,
Klaus M.vdT.

Anzeige
Nachtrag: Der 08.07.2013
09.07.2013 11:42:23
Klaus
Hall Max,
du glaubst warscheinlich, das Makro hätte den 08.07.2013 übertragen sollen. Das hat es aber korrekterweise nicht getan, da dieser Eintrag in "NV-Neu" Zeile 2 (!!!) bereits vorkommt (statt in Zeile 900). Ich nahm an dies war Absicht um mich zu testen und darauf hinzuweisen, dass die Liste nicht sortiert vorliegt.
Grüße,
Klaus M.vdT.

AW: Nachtrag: Der 08.07.2013
09.07.2013 11:45:37
Max
Hi Klaus,
genau da hast du mich erwischt, das hatte ich übersehen.
Vielen, vielen Dank. Ich bin wirklich sehr dankbar! Du hast mir sehr viel Arbeit und Zeit gespart.
Viele Grüße
Max

Danke für die Rückmeldung! owT.
09.07.2013 11:50:18
Klaus
.

Anzeige
AW: Nachtrag: Der 08.07.2013
12.07.2013 16:38:29
Max
Hallo ihr Lieben,
ich würde gerne nochmals eure Hilfe in Anspruch nehmen. Der Code, den mir Klaus freundlicherweise geschrieben hat, funktioniert traumhaft, aber ich habe mich umentschieden und müsste eine kleine Änderung vornehmen. Ich weiß jedoch nicht genau, wie ich das umsetzen kann.
Explizit geht es um diese Zeile
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Copy
Wie müsste ich das denn schreiben, dass nicht die gesamte Reihe, sondern sagen wir nur die ersten 5 Zellen einer Zeile kopiert werden müssten?
Grüße und vielen Dank im Vorraus
Max

Anzeige
fürs Archiv: der Sinn der Hilfsspalte
09.07.2013 12:01:04
Klaus
Hallo Max und Archiv,
die Hilfsspalte zählt mit "ZÄHLENWENN" die Anzahl der Einträge, und teilt danach eins durch diesen.
Ist ein Eintrag einmal vorhanden, ergibt die Hilfsspalte =1/1 (also 1). Ist ein Beitrag jedoch noch nicht vorhanden, ergibt die Hilfsspalte =1/0 und das ist ein Fehler!
Schreib mal in ein leeres Blatt in die Zellen A1, A3 und A5 die Formel =1/0 und in A2 un A4 "Hallo Welt". Jetzt markiere Spalte A, drücke STRG+G, dann "Spezial", dann wähle "Formeln" und dort nur "Fehler" und drücke OK. Du siehst, es sind nur noch die Zellen A1 A3 A5 markiert!
Diesen Kniff nutze ich, um aus einer Spalte alle relevanten Einträge auf einmal zu greifen. Jeder relevante Eintrag wird mit "DIV!0" markiert und dadurch gegriffen.
Die traditionelle Lösung wäre, die Spalte A per Schleife durchzulaufen. Etwa so:
for i = 2 to LastRow
if worksheetfunction.countif(AndereTabelle, range("A"&i).value) = 0 then
Kopiervorgang
end if
next i

Aber grad bei langen Listen wird das kriechend Langsam, da für jede Zeile ein eigener Kopiervorgang gestartet wird (und auch jede Zeile einmal "angefasst" und geprüft werden muss).
Grüße,
Klaus M.vdT.
Anzeige

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige