Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
416to420
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
416to420
416to420
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Lösung gesucht- Daten einsortieren und sammeln

Lösung gesucht- Daten einsortieren und sammeln
Ralf
Hallo Excel-Forum,
ich möchte eine Abfrage aus einer Excel-Dati gestalten, in welcher Daten mit folgendem Format aufgelistet sind.
12.Apr.04 511,78
13.Apr.04 515,24
14.Apr.04 506,25
15.Apr.04 503,12
16.Apr.04 488,76
Diese Datei wird fortlaufend aktualisiert, wobei die Daten zum Anfang jeweils wegfallen. Also bspw Daten zum 17. April kommen hinzu und die Daten zum 12. April fallen weg.
Diese alten Daten möchte ich jedoch in einer zweiten Excel-Datei sammeln.
12.Apr.04 511,78
13.Apr.04 515,24
14.Apr.04 506,25
15.Apr.04 503,12
16.Apr.04 488,76
17.Apr.04 Also falls diese Daten neu hinzukommen, sollen die Daten vom 12. bleiben.
Ich kann bisher die daten automatisch abrufen, jedoch nicht das Wegfallen der ersten Daten verhindern. Müsste ein Vergleich sein, bei welchem nach erfolgreichem einsortieren, die Formel deaktiviert/gelöscht wird.
Weis nicht ob es sowas in Excel gibt?
Danke im voraus.
Grüße
Ralf

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Lösungversuch als Makro
Uwe
Hallo, Ralf!
Vielleicht hilft Dir dieses Makro weiter.
Private Sub Collection_Click()
Dim wsQuell As Worksheet, wsZiel As Worksheet, c As Range
Dim r As Long, i As Long, such As Long
Set wsQuell = Worksheets("Tabelle1")
Set wsZiel = Worksheets("Tabelle2")
such = wsQuell.Cells(1, 1).Value2
r = 1
For Each c In wsZiel.Columns(1)
If (such = c.Value2(r, 1)) Or Len(c.Value(r, 1)) = 0 Then Exit For
r = r + 1
Next
If r > 0 Then
For i = 0 To 4
wsZiel.Cells(r + i, 1) = CDate(wsQuell.Cells(i + 1, 1))
wsZiel.Cells(r + i, 2) = wsQuell.Cells(i + 1, 2)
Next i
End If
End Sub

In der der Tabelle1 stehen immer die fünf letzten Werte aus der Datenserie. In der Tabelle2 sollen die gesammelten Daten stehen.
Über eine Schaltfläche (z.B. auf der Tabelle1) wird der Prozess ausgelöst, der in Tabelle2, dort in der Spalte1 nach dem Datum sucht, das in der Tabelle1, in der Spalte A1 steht. Wird es gefunden, werden alle fünf Wertepaare aus der Tabelle1 in die Tabelle2 ab der gefundenen Zeile übertragen. Wird kein übereinstimmender Eintrag gefunden, dann werden die fünf Wertepaare der Tabelle1 an das Ende der Zahlenkolonne angefügt.
Gruß!
Anzeige
AW: Lösungversuch als Makro
Ralf
Hallo Uwe,
ein problem taucht bei dem makro auf:
Leider ein Fehler beim Kompilieren (falsche Anzahl von Argumenten oder ungültige Zuweisung) in dieser zeile:
If (such = c.Value2(r, 1)) Or Len(c.Value(r, 1)) = 0 Then
das zweite "Value" ist blau markiert. mmh weis jetzt nicht ob an mir liegt, hab keine Ahnung von makros?
gruss ralf
AW: Lösungversuch als Makro
Ralf
Hallo Uwe,
danke schon mal, aber..
zuerst mal positiv, habe eine lösung erziehlt:
habe für "Value" erstzt mit "Value2". dann geht die Zuordnung mit F5 einmal.
Aber beim zweiten mal finde ich das Makro nicht mehr, unter makros? wie gesagt habe keine ahnung von makros. hab kompipiliert und gespeichert. wenn ich meine excel-datei wieder öffne, finde ich das makro nicht mehr. Wie gehe ich richtig vor ?
Gruss
Anzeige
AW: Korrektur und Hinweis...
Uwe
Hallo, Ralf!
Hier habe ich erst einmal eine abgespeckte Version der mittleren Abfrage-FOR-Schleife:

...
such = wsQuell.Cells(1, 1)
r = 1
For Each c In wsZiel.Range("A:A")
If (such = c) Or Len(c) = 0 Then Exit For
r = r + 1
Next
...

Leider komme ich jedoch mit Deinen weiteren Anmerkungen nicht klar, wo Du schreibst, "...geht die Zuordung mit F5 einmal". Wenn Du Dir einen CommandButton angelegt hast, so sollte dieser auf dem Arbeitsblat, auf dem Du diesen eingerichtet hast, immer zu sehen sein. Hast Du nur ein Makro angelegt, so sollte der Aufruf auch über ALT+F8 ereichbar sein.
Das Makro ist natürlici an die Arbeitsmappe gebunden, in der Du es wie beschrieben eingerichtet hast.
Gruß,
Uwe
Anzeige
AW: Korrektur und Hinweis...
Ralf
Hallo Uwe,
sorry das ich mich so spät wieder melde, werde es am wochenende probieren, ob ich es zum Laufen bringe, wie gesagt Makros sind nicht gerade meine Spezialdisziplin ... melde mich dann, ob es geklappt hat. Danke schon mal.
Grüße
Ralf
Folgefrage
Ralf
Hallo Uwe!
Habe mich durchgekämpft und viel gelernt, auch mit dem command Button klappt Dein Makro jetzt bei mir jetzt. Besten Dank an Dich schon mal.
Kannst Du mir noch zwei kleine Tips geben: Die Abfrage soll anstatt auf „Tabelle1“ auf die xls.-Datei [Webabfrage.xls] und darin das Tabellenblatt „CASH-Kal“ zielen. Was müsste ich ändern? Habe den Bezug nicht fehlerfrei hinbekommen (fehlermeldungen).
Müsste in dieser Zeile sein: Set wsQuell = Worksheets("Tabelle1")
Habe es so probiert und auch and. Möglichkeiten: Set wsQuell = Worksheets("[Webabfrage.xls]CASH-Kal'!") = funktioniert aber nicht (laufzeitfehler 9)... ;(
Als zweite Frage: Ist es möglich, die Einordnung so zu erweitern, dass man einen Bereich einsortiert? Also Beispielsweise: Ordne alle Daten seit dem Datum1 (was in Zelle A1 eingetragen werden kann, bis zum Datum 2, was in Zelle 2 B1 eingetragen werden kann, aus dem Tabellenblatt1 ein.
Beispielsweise: Ich trage in A1 und B1 folgendes ein:
A1 : 01.01.2003 und B1: 31.12.2003
Ergebnis ab A2 B2
01.01.2003 3400
02.01.2003 3405
usw
....
31.12.2003 3604
Wäre super, wenn das auch noch gänge.
Grüße und Danke für die Hilfe
Ralf
Anzeige
AW: Folgefrage und Antworten dazu
Uwe
Gratulation, Ralf!
Gern geschehen, Ralf, lerne ich doch in den meisten Fällen auch hier dazu, und so freut es mich, dass ich helfen konnte. .
Richtig, Ralf! Jedoch, wenn ich Dich recht bverstanden habe, so sollen die Daten vom Arbeitsblatt "CASH-Kal" in der Arbeitsmappe "Webabfrage" in das Tabellenblatt "Tabelle2" einer anderen Arbeitsmappe, die gerade "aktiv" ist.
Wenn dem so ist, also kein Übermittlungsfehler stattgefunden hat-, meinerseits kein Interpretierungsfehler vorliegt, alle Schreibweisen von Namen, wie "Webabfrage" und/oder "CASH-Kal" richtig sind und getrennte Mappen gewünscht sind, dann enpfehle ich Dir, der Übersichtlichkeit wegen, generell den vollständigen "Pfad"-Namen bei beiden Arbeitsblättern (wsQuell ="CASH-Kal" und wsZiel="Tabelle2") unterhalp der Applicationsebene:
Set wsQuell = Workbooks("Webabfrage").Worksheets("CASH-Kal")
Set wsZiel = Workbooks("Datenzeitreihen").Worksheets(wsQuell.Range("C1").Value)

oder aber mit Direkt-Tabellenblatnamen:
Set wsZiel = Workbooks("Datenzeitreihen").Worksheets("Tabelle2")
In meinem Beispiel lautet die Datei mit der Datensammlung "Datenzeitreihen" und der Name des Tabellenblattes, auf denen die Daten eingetragn werden, steht in der Zelle C1 auf dem wsQuell-Arbeitsblatt (Mappe "Webabfrage", Arbeitblatt: "CASH-Kal")
Ja, Ralf, das ist möglich, jedoch erfordert es ein paar mehr Programmzeilen, da verschiedenen Plausibilitätsabfragen und Eigenschaftsetzungen eingebaut werden müssen, um den ensprechenden Bereich einfügen zu können.
Bevor ich jedoch dazu komme, diesen Programmcode dahingehend zu ergänzen, meine Vorschlag: Versuh' einmal jeden Schritt per EXCEL-Umgebung durchzuführen, und dabei die solltest Du Makroaufzeichnung eingeschaltet haben.
1. Schritt: Selektiere den Bereich auf dem Quellarbeitsblatt
2. Schritt: Kopiere Selection in den Zwischenspeicher (Kopie-Befehl)
3. Schritt: Wechsle in Arbeitsblatt der Datensammlungstabelle (in Deinem Fall ander Arbeitsmappe(?=))
4. Suche nach dem letzen Datum in der Datumspalte, das direkt vor dem ersten Datum in der Selektion ist (oder gleich diesem)
5. füge die Zeilen der Selektion ein, wobei Du die Option wählt, wonach die bestehenden Zeilen nach unten geschoben werden sollen.
6. Makro-Aufzeichnung ausschalten und Ergebnis-Programmstück betrachten.
Sicher, sei nicht allzu entmutigt, wenn nun das anschliessende Umsetzen und Einarbeiten in Dein Programm, ob der vielen Direktbezüge, nicht auf Anhieb klappen wird (hat beri mir auch nicht so funktioniert), Doch mit den Hilfe-Anweisungen über Cells und Range wirst Du sicher hie und da erkennen, wie die Direktangaben durch Variable zzu ersetzen sind.
Vorerst, viel Erfolg
Uwe
P.S.
Falls zwishcenzeitlich kein Ergebnis vorliegen sollte, dann werd' ich meine Vorschläge für die Ergänzung ausarbeiten. Hilfreich ist immer eine Grundstruktur des Dateienaufbaues; vielleicht gelingt es Dir, soetwas hier Hochzuladen.
Anzeige
AW: Daten einsortieren und sammeln
Uwe
Hallo, Ralf!
Das folgende Listing für ein neues Makro, welches einen Zeitbereich in eine Datenzeitreihe einfügt, geht von folgender Umgebung aus:
- Arbeitsmappe "Webabfrage" ist geöffnet
-- Tabellenblatt "CASH-Kal" existiert
--- Spalte A: Datumsangaben, aufsteigend
--- Spalte B: Werte
--- Zelle D1 (Cells(1,4)): Name der Zieltabelle in der Arbeitsmappe "Datenzeitreihe" (s.u.)
--- Zelle D2 (Cells(2,4)): Startdatum des Übergabebereiches (ein Datum in der Spalte A)
--- Zelle D3 (Cwlls(3,4)): Enddatum des Übergabebereiches (ein Datum in der Spalte A)
- Arbeitsmappe "Datenzeitreihe" ist geöffnet
-- Tabellenblatt "Serie1" existiert
--- Spalte A: Datumsangaben, aufsteigend
--- Spalte B: Werte

Option Explicit
Sub InsertData()
Dim wsQuell As Worksheet, wsZiel As Worksheet, msg As String
Dim n As Long, gefunden As Boolean
Dim rngQuell As Range, maxR As Long
Dim Date0 As Date, r0 As Long
Dim Date1 As Date, r1 As Long
Set wsQuell = Workbooks("Webabfrage").Worksheets("CASH-Kal")
Set wsZiel = Workbooks("Datenzeitreihe").Worksheets(wsQuell.Cells(1, 4).Value)
If wsZiel Is Nothing Or wsQuell Is Nothing Then
If wsQuell Is Nothing Then
msg = "Quell"
Else
msg = "Ziel"
End If
MsgBox (msg + "Ziel nicht gefunden")
Exit Sub
End If
With wsQuell
maxR = .Cells(Rows.Count, 1).End(xlUp).Row
Date0 = .Cells(2, 4)
Date1 = .Cells(3, 4)
gefunden = False
For r0 = 1 To maxR
If .Cells(r0, 1) = Date0 Then
gefunden = True
Exit For
End If
Next
If Not (gefunden) Then
MsgBox ("Startdatum nicht gefunden")
Exit Sub
End If
gefunden = False
For r1 = r0 To maxR
If .Cells(r1, 1) = Date1 Then
gefunden = True
Exit For
End If
Next
If Not (gefunden) Then
MsgBox ("Enddatum nicht gefunden")
Exit Sub
End If
.Range("A" & r0 & ":B" & r1).Copy
n = r1 - r0 + 1
End With
With wsZiel
maxR = .Cells(Rows.Count, 1).End(xlUp).Row
gefunden = False
For r0 = 1 To maxR
If .Cells(r0, 1) > Date0 Then
'gefunden = True
Exit For
End If
Next
.Range("A" & r0).Insert Shift:=xlDown
Application.CutCopyMode = False
.Range("A" & r0 + n).Select
End With
End Sub


Gruß!

Anzeige
AW: Daten einsortieren und sammeln
26.04.2004 20:55:17
Ralf
Hallo Uwe,
das sieht nach einer Menge Arbeit aus, Vielen Dank, werde jetzt versuchen, dass ganze hier bei mir zum Laufen zu bringen. Melde mich, wenn es hier funktioniert, kann etwas dauern, vielleicht bin ich erst morgen soweit. Ich sage auf jeden Fall Bescheid.
Bis dahin
Viele Grüße
Ralf

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige