Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1284to1288
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
Inhaltsverzeichnis

Daten im Bereich zusammenführen

Daten im Bereich zusammenführen
20.11.2012 11:35:52
Gisela
Hallo,
ich soll in einem Bereich bestimmte Daten zusammenführen.
Das ganze habe ich mal in einer Testdatei im Anhang.
In der Spalte A stehen verschiedene Einträge in unbestimmter Anzahl.
Die Einträge in der Spalten B bis AR haben einen Wert oder einen Text in der jeweiligen Zeile bezogen auf das Datum in der ersten Zeile.
Wie das Ergebnis aussehen soll, habe ich mal in der Testdatei dargestellt. Kann mir bitte jemand helfen, wie ich das am besten umsetzen kann. Das ganze beinhaltet insgesamt über 200 Zeilen.
https://www.herber.de/bbs/user/82698.xls
Vielen Dank und liebe Grüße
Gisela

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Bereich zusammenführen-Kor.Testdatei
20.11.2012 11:45:02
Gisela
Hallo,
sorry,
in der Ergebnisdarstellung waren noch Fehler.
Hier die berichtigte Testdatei.
https://www.herber.de/bbs/user/82699.xls
Vielen Dank
Gisela

AW: Bereich zusammenführen-Kor.Testdatei
20.11.2012 12:55:47
Klaus
Hi Gisela,
mach mit ALT+F11 den VBA-Editor auf, doppelclicke im Explorer (der ist links) auf Tabelle1 und kopiere diesen Code in das weiße Fenster.
Um das Makro auszuführen, clicke mit der Maus innerhalb des Codes (also unter Sub Zusammenfuehren() und über End Sub) und drücke F5.
Ich habe den Code kommentiert, so dass du ihn selbst an deine größere Originaltabelle anpassen kannst.
Option Explicit
Sub Zusammenfuehren()
Dim rInput As Range
Dim lOutputRow As Long
Dim iOutputCol As Integer
Dim wksInput As Worksheet
Dim wksOutput As Worksheet
Dim iColInput As Integer
Dim lRowInput As Long
'im Original heisst die Tabelle bestimmt nicht "Tabelle1"? Hier anpassen!
Set wksInput = Sheets("Tabelle1")
'ich bin mir fast sicher, im Original werden die Daten in eine andere Tabelle geschrieben?
'falls ich richtig liege, Tabellenname hier anpassen! Wenns im gleichen Blatt liegt, hier und  _
bei wksInput halt das gleiche Blatt angeben
Set wksOutput = Sheets("Tabelle1")
'Der absoulte Bereich des Inputs wird hier angebeben, im Beispiel B2:K42 ohne Überschriften /  _
Seitenschriften!
'Auf deine Version anpassen!
Set rInput = wksInput.Range("B2:K42")
'in dieser Spalte stehen deine Suchbegriffe (A,AB,AH usw.... Spalte A = 1, B = 2 usw)
iColInput = 1
'in dieser Zeile stehen deine Datums
lRowInput = 1
'Hier den Zellenbezug angeben, AB dem der Output stattfindet. Mit Überschriften!
'Im Beispiel ist die Zelle dazu M1, als Zeile (lOutputRow) = 1 und Spalte (lOutputCol) = 13
'Die Systematik ist einfach Spalte A = 1, B = 2 und so weiter.
'Hier anpassen!
lOutputRow = 1
iOutputCol = 13
'* Ab hier geht das Makro los, da musst du nichts mehr anpassen!
'* eleganter wäre es, alle Zeilen die mit DIM anfangen an den Makroanfang zu stellen.
'* habe ich mit Absicht nicht gemacht, damit es für dich übersichtlicher bleibt.
'* Den Code hier kommentiere ich trotzdem noch durch
Dim rMyCheck As Range
Dim lRowOut As Long
Dim iColOut As Integer
Dim sMatchRow As String
Dim rMatchRow As Range
Dim sMatchCol As String
Dim rMatchCol As Range
For Each rMyCheck In rInput         'prüfe alles im rInput-Bereich (B2:K42 momentan)
If rMyCheck.Value = "" Then     'überspringe leere Zellen
Else                            'wenn Zelle NICHT leer, dann:
'finde die ZEILE, in der im Output geschrieben werden muss.
'Dafür nutze ich die Funktion =VERLGEICH (hier: application.match), die mir die Zeile  _
zurück gibt (vergleicht Seiten-Überschrift im Input und im Output)
sMatchRow = wksInput.Cells(rMyCheck.Row, iColInput).Value
Set rMatchRow = wksOutput.Range(wksOutput.Cells(lOutputRow, iOutputCol), wksOutput. _
Cells(wksOutput.Rows.Count, iOutputCol))
lRowOut = Application.Match(sMatchRow, rMatchRow.Value, False)
'finde die SPALTE, in der im Output geschrieben werden muss.
'Dafür nutze ich die Funktion =VERLGEICH (hier: application.match), die mir die Zeile  _
zurück gibt (vergleicht Überschriften im Input und im Output)
sMatchCol = wksInput.Cells(lRowInput, rMyCheck.Column)
Set rMatchCol = wksOutput.Range(wksOutput.Cells(lOutputRow, iOutputCol), wksOutput. _
Cells(lOutputRow, wksOutput.Columns.Count))
iColOut = Application.Match(sMatchCol, rMatchCol.Value, False)
'SCHREIBE in das Output Blatt, und zwar:
'Zeile: die per Vergleich gefundene Zeile (lRowOut) PLUS die Startzeile (lOutputRow)  _
MINUS eins für die Überschrift
'Spalte: die per Vergleich gefundene Spalte (iCOlOut) PLUS die Startspalte (iOutputCol)  _
MINUS eins für die Seiten-Überschrift
wksOutput.Cells(lRowOut + lOutputRow - 1, iColOut + iOutputCol - 1).Value = rMyCheck. _
Value
End If
Next rMyCheck
End Sub
Grüße,
Klaus M.vdT.

Anzeige
Bereich zusammenführen-Kor.Testdatei
20.11.2012 14:13:06
Gisela
Hallo Klaus M.vdT.,
vielen Dank für deine Hilfe.
Ich erhalte hier (ist gelb markiert):
lRowOut = Application.Match(sMatchRow, rMatchRow.Value, False)
die Fehlermeldung "Typen unverträglich"
was muss ich da ändern?
Liebe Grüße
Gisela

AW: Bereich zusammenführen-Kor.Testdatei
20.11.2012 14:20:49
Klaus
Hallo Gisela,
bei mir läuft der Code. Ein "Typen unverträglich" lässt mich vermuten, dass du einen Fehlerwert in der Datei hast (#NV oder sowas?). ODER dass ein Eintrag nicht gefunden wird.
Bitte überprüfe, ob wirklich alle Seiten-Überschriften (A,AB,AG usw) auch im Output-Feld vorkommen UND ob alle Datümer auch im Output-Feld als Überschrift vorkommen.
Bei den Datümern bitte auch auf die Formatierung achten! So ist zB der 01.05.2012 etwas ganz anderes als der 01.05.2013 , aber bei entsprechender Zellformatierung (TT.MM.) sehen sie gleich aus.
Wenn das alles nicht hilft, lad bitte deine Datei mit Code hoch.
Was anderes ist natürlich, wenn du absichtlich Datümer weggelassen hast (kann ja sein, dass dich zB Ergebnisse an Sonntagen nicht interessieren oder so). Dann müssen wir eine Ausnameregelung einbauen.
Grüße,
Klaus M.vdT.

Anzeige
Oh achso, ....
20.11.2012 14:23:35
Klaus
.... die ganzen Variablen hast du gewissenhaft angepasst, ja? Wenn zB die variable "iColInput" auf eine andere Zeile zeigt als die tatsächlich richtige, müsste auch das den o.g. Fehler generieren.
Grüße,
Klaus M.vdT.

AW: Oh achso, ....
20.11.2012 15:52:45
Gisela
Hallo Klaus M.vdT,
ich habe jetzt mal den Code in die Beipieldatei gesetzt. Hoffentlich an der richtigen Stelle?
Die Fehlermeldung kommt immer noch.
https://www.herber.de/bbs/user/82704.xls
Kannst du mir bitte noch mal helfen? Was habe ich falsch gemacht?
Liebe Grüße
Gisela

Anzeige
AW: Oh achso, ....
21.11.2012 08:07:06
Klaus
Hallo Gisela,
ich bin ein bisschen beleidigt :-) Aufgrund deines niedrigen Levels habe ich mir extra Mühe gegeben und den Code akribisch durchkommentiert sowie sehr übersichtlich gehalten (das ganze ginge auch in 5 Zeilen insgesamt, aber dann blickt niemand mehr durch). Aber offensichtlich hasst du meine Kommentare im Code ignoriert. Einmal zur Klarstellung: Alles im Code was grün angezeigt wird, ist Klartext auf deutsch und wird vom Computer ignoriert.
Aaaaaalso (Codeausschnitte):
   'ich bin mir fast sicher, im Original werden die Daten in eine andere Tabelle geschrieben?
'falls ich richtig liege, Tabellenname hier anpassen! Wenns im gleichen Blatt liegt, hier  _
und _
bei wksInput halt das gleiche Blatt angeben
Set wksOutput = Sheets("Tabelle2")

In der Beispieldatei ist die Ausgabe in Tabelle2. Das musst du dem Code an dieser Stelle mitteilen! Wenn du die Tabelle in "Gnaargh" umbenennst, muss an dieser Stelle eben stehen:
   Set wksOutput = Sheets("Gnaargh")

Du hast dort "Tabelle1" stehen gelassen.

'Hier den Zellenbezug angeben, AB dem der Output stattfindet. Mit Überschriften!
'Im Beispiel ist die Zelle dazu M1, als Zeile (lOutputRow) = 1 und Spalte (lOutputCol) = 13
'Die Systematik ist einfach Spalte A = 1, B = 2 und so weiter.
'Hier anpassen!
lOutputRow = 1
   iOutputCol = 1

Auch was da steht: die ZEILE und SPALTE des Ziel-Codes angeben. Das ist in deiner Beispieldatei Spalte 1, du hast dort aber die 13 stehen gelassen.
Keine Angst, trau dich! Der Computer explodiert nur selten, wenn du etwas falsches änderst.
Grüße,
Klaus M.vdT.
PS: Vergiss nicht: für dein Original muss dieser Code auch angepasst werden:
   'Der absoulte Bereich des Inputs wird hier angebeben, im Beispiel B2:K42 ohne Überschriften / _
_
Seitenschriften!
'Auf deine Version anpassen!
Set rInput = wksInput.Range("B2:K42")

ich nehme mal an, aus B2:K42 wird dann B2:Z2000 oder sowas, je nachdem wie groß dein Bereich ist!
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige