Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
992to996
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
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA

VBA
16.07.2008 10:33:07
Konrad
Hallo zusammen!
Nachdem ich ein blutiger Anfänger bin was VBA-Programmierung anbelangt, bitte ich um dringende Hilfe an irgend einen der verschiedenen Experten im Forum, was folgendes Problem anbelangt:
Ausgangspunkt:
Innerhalb einer Arbeitsmappe habe ich 2 Arbeitsblätter mit der Bezeichnung: "Freizeit" und "Arbeit" die Datenbanken enthalten.
Meine Aufgabe lautet:
Für jeden Datensatz (enthalten in den verschiedenen Zeilen) im Arbeitsblatt "Freizeit" soll Folgendes durchgeführt werden:
Wähle für jede Zeile des Arbeitsblattes "Freizeit" die entsprechene Information aus den Spalten "D" und "F" und suche im Arbeitsblatt "Arbeit" nach Zeilen, in denen dieselben Informationen in den Spalten "T" und "U" vorzufinden ist.
Falls Übereinstimmungen vorgefunden werden, mache Folgendes:
kopiere aus Arbeitsblatt "Arbeit" den Zelleninhalt aus Spalte "Z" und füge ihn im Arbeitsblatt "Freizeit" in die entsprechende Zelle in der Spalte "H" ein.
Bin bisher leider gescheitert...
wäre super, wenn mir irgend jemand weiterhelfen könnte
Vielen Dank im Voraus!
Konrad

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachfrage
16.07.2008 10:38:00
mpb
Hallo Konrad,
wieviele Zeilen enthalten die beiden Tabellen (in etwa)?
Gruß
Martin

AW: Nachfrage
16.07.2008 10:44:15
Konrad
Hallo Martin,
die Anzahl der Zeilen ändert sich täglich, ich schätze mal dass die maximale Anzahl in beiden Arbeitsblättern jeweils 700 Zeilen nicht überschreiten wird.
Gruß Konrad

Noch eine Nachfrage
16.07.2008 10:48:00
mpb
Hallo Konrad,
vorhin vergessen: gibt es immer entweder keine oder genau eine Übereinstimmung? Was soll passieren, wenn es mehr als eine Zeile mit übereinstimmenden Werten gibt?
Hintergrund der Fragen: Ich denke an eine Schleifenlösung, deren Performance optimiert werden soll.
Gruß
Martin

Anzeige
AW: Noch eine Nachfrage
16.07.2008 10:54:19
Konrad
Hallo Martin,
es gibt nur eine oder keine Übereinstimmung - also keine Fälle mit mehreren Lösungen
Gruß Konrad

AW: Noch eine Nachfrage
16.07.2008 11:16:00
mpb
Hallo Konrad,
versuche mal

Sub Uebernehmen()
Set wsF = Worksheets("Freizeit")
Set wsA = Worksheets("Arbeit")
lzF = wsF.Range("D65536").End(xlUp).Row
lzA = wsA.Range("T65536").End(xlUp).Row
Application.ScreenUpdating = False
For i = 1 To lzF
For j = 1 To lzA
If wsF.Cells(i, 4) = wsA.Cells(j, 20) And wsF.Cells(i, 6) = wsA.Cells(j, 21) Then
wsF.Cells(i, 8) = wsA.Cells(j, 26)
Exit For
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub


Rückmeldung, ob es funktioniert und die Performance ausreicht, wäre nett.
Gruß
Martin

Anzeige
AW: Noch eine Nachfrage
16.07.2008 11:42:38
Konrad
Hallo Martin,
habe deine Lösung probiert. Funktioniert prima! Muss ich dabei immer darauf achten, dass die in Spalte D und F enthaltenen Infos in derselben Reihenfolge stehen wie jene in Spalte T und U des Arbeitsblattes "Arbeit"?. Wäre es auch möglich es so zu gestalten, dass ich diese Einschränkung nicht habe? (Mein Ziel wäre es gewesen nachzusehen ob ich die gewünschten Infos in irgendeiner Anordnung (also unabhängig von der Reihenfolge) wiederfinde).
Danke!
Gruß Konrad

AW: Noch eine Nachfrage
16.07.2008 12:03:00
mpb
Hallo Konrad,
ich bin nicht sicher, ob ich Dich richtig verstehe. Die Spalten D und F sind fix. Für jede Zeile werden aus diesen Spalten die beiden Werte ausgelesen. Nun soll geprüft werden, ob es im Blatt Arbeit eine Zeile gibt in der diese beiden Werte in zwei beliebigen Spalten vorkommen. Falls ja, soll der Wert aus Z nach H übernommen werden. Ist das so richtig?
Falls ja:
1. In welchen Spalten können die Werte denn prinzipiell stehen (z.B. A bis U)? M.aW.: Welcher Bereich im Blatt Arbeit muss durchsucht werden?
2. Können die betreffenden Spalten im Blatt Arbeit von Zeile zu Zeile variieren? Oder ist klar, wenn die erste Übereinstimmung z.B. in den Spalten C und E gefunden wurde, dass für alle folgenden Zeilen auch nur diese Spalten berücksichtigt werden müssen.
Gruß
Martin

Anzeige
AW: Noch eine Nachfrage
16.07.2008 12:23:00
Konrad
Hallo Martin,
die gesuchten Informationen kommen im Arbeitsblatt "Arbeit" nur in den Spalten "T" oder "U" vor. Es kann allerdings sein, dass sie in vertauschter Reihenfolge zu finden sind (d.h. nicht immer findet sich die Info aus Spalte "D" im Arbeitsblatt "Freizeit" auch in der Spalte "T" des Arbeitsblattes "Arbeit". Sie könnte auch in der Spalte "U" vorkommen). Ich habe bei deiner Lösung probiert, diese Vertauschung durchzuführen. Mir scheint aber dass dieser Schritt derzeit noch nicht funktioniert.
Gruß
Konrad

2 Lösungen
16.07.2008 13:05:00
mpb
Hallo Konrad,

Sub Uebernehmen2()
Set wsF = Worksheets("Freizeit")
Set wsA = Worksheets("Arbeit")
lzF = wsF.Range("D65536").End(xlUp).Row
lzA = wsA.Range("T65536").End(xlUp).Row
Application.ScreenUpdating = False
For i = 1 To lzF
For j = 1 To lzA
If (wsF.Cells(i, 4) = wsA.Cells(j, 20) Or wsF.Cells(i, 4) = wsA.Cells(j, 21)) And (wsF. _
Cells(i, 6) = wsA.Cells(j, 21) Or wsF.Cells(i, 6) = wsA.Cells(j, 20)) Then
wsF.Cells(i, 8) = wsA.Cells(j, 26)
Exit For
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub



Sub Uebernehmen3()
Set wsF = Worksheets("Freizeit")
Set wsA = Worksheets("Arbeit")
lzF = wsF.Range("D65536").End(xlUp).Row
lzA = wsA.Range("T65536").End(xlUp).Row
Application.ScreenUpdating = False
For i = 1 To lzF
For j = 1 To lzA
If wsF.Cells(i, 4) = wsA.Cells(j, 20) And wsF.Cells(i, 6) = wsA.Cells(j, 21) Then
wsF.Cells(i, 8) = wsA.Cells(j, 26)
Exit For
End If
If wsF.Cells(i, 4) = wsA.Cells(j, 21) And wsF.Cells(i, 6) = wsA.Cells(j, 20) Then
wsF.Cells(i, 8) = wsA.Cells(j, 26)
Exit For
End If
Next j
Next i
Application.ScreenUpdating = True
End Sub


Je nach den Gegebenheiten in Deiner Datei kann die Performance unterschiedlich sein, probier's mal aus.
Gruß
Martin

Anzeige
AW: 2 Lösungen
17.07.2008 17:16:00
Konrad
Hallo Martin!
bin unter unglaublichem Zeitdruck und würde dich noch einmal um deine wertvolle Hilfe bitten
Ich müsste deine Lösung in abgewandelter Form noch auf ein anderes Problem anwenden, das ich mit den einfachen Excel-Funktionen nicht in den Griff bekomme...
Angenommen ich hätte bei dem gerade geschilderten Problem einen leicht abgeänderten Bedarf:
Anstelle den gesamten Inhalts der Felder der Spalte "D" (Arbeitsblatt "Freizeit") möchte ich nur die ersten 22 Zeichen des Zelleninhaltes mit jenem der ersten 22 Zeichen in der Spalte "T" des Arbeitsblattes "Arbeit" vergleichen.
Wäre auch dies machbar?
Konrad (etwas beschämt und unglaublich dankbar für einen Hinweis...)

Anzeige
AW: Noch eine Nachfrage
16.07.2008 15:21:00
Konrad
Hallo Martin,
vielen vielen Dank für Deine Bemühungen!!!
Weiß nicht was ich ohne Deine Lösungen welchen Blödsinn veranstaltet hätte....
Gruß Konrad

AW: Noch eine Nachfrage
17.07.2008 17:41:36
Konrad
Hallo Martin!
bin unter unglaublichem Zeitdruck und würde dich noch einmal um deine wertvolle Hilfe bitten
Ich müsste deine Lösung in abgewandelter Form noch auf ein anderes Problem anwenden, das ich mit den einfachen Excel-Funktionen nicht in den Griff bekomme...
Angenommen ich hätte bei dem gerade geschilderten Problem einen leicht abgeänderten Bedarf:
Anstelle den gesamten Inhalts der Felder der Spalte "D" (Arbeitsblatt "Freizeit") möchte ich nur die ersten 22 Zeichen des Zelleninhaltes mit jenem der ersten 22 Zeichen in der Spalte "T" des Arbeitsblattes "Arbeit" vergleichen.
Wäre auch dies machbar?
Konrad (etwas beschämt und unglaublich dankbar für einen Hinweis...)

Anzeige
AW: VBA
16.07.2008 10:50:00
yusuf
Hi,
ungetestet, also am besten einen Sicherheitskopie erstellen.

Sub Suchen_Eintragen()
Dim i As integer
Dim j As integer
Dim Inhalt_von_D_und_F As String
For i = 1 To Sheets("Freizeit").UsedRange.Rows.Count
Inhalt_von_D_und_F = CStr(Cells(i, 4)) & CStr(Cells(i, 6))
For j = 1 To Sheets("Arbeit").UsedRange.Rows.Count
If CStr(Cells(j, 20) & Cells(j, 21)) = Inhalt_von_D_und_F Then
Sheets("Freizeit").Cells(i, 8) = Cells(j, 26)
End If
Next j
Next i
End Sub


Gruß
Yusuf

AW: VBA
16.07.2008 10:55:00
yusuf
Hi,
gute Frage von mpb.
Hab das Makro mal angepasst. Falls es mehrere Uebereinstimmungen geben sollte werden diese in der Spalte H alle aufgelistet mit | als Trennzeichen.
Immernoch ungetestet.

Sub Suchen_Eintragen()
Dim i As integer
Dim j As integer
Dim Inhalt_von_D_und_F As String
For i = 1 To Sheets("Freizeit").UsedRange.Rows.Count
Inhalt_von_D_und_F = CStr(Cells(i, 4)) & CStr(Cells(i, 6))
For j = 1 To Sheets("Arbeit").UsedRange.Rows.Count
If CStr(Cells(j, 20) & Cells(j, 21)) = Inhalt_von_D_und_F Then
Sheets("Freizeit").Cells(i, 8) = Sheets("Freizeit").Cells(i, 8) & "|" & Cells(j, _
26)
End If
Next j
Next i
End Sub


Gruß
Yusuf

Anzeige
AW: VBA
16.07.2008 11:11:35
yusuf
Hi,
hier noch eine die etwas schneller durchlaufen sollte, wenn einmal oder keinmal vorkommt.
Immernoch ungetestet:

Sub Suchen_Eintragen()
Dim i As integer
Dim j As integer
Dim Inhalt_von_D_und_F As String
For i = 1 To Sheets("Freizeit").UsedRange.Rows.Count
Inhalt_von_D_und_F = CStr(Cells(i, 4)) & CStr(Cells(i, 6))
For j = 1 To Sheets("Arbeit").UsedRange.Rows.Count
If CStr(Cells(j, 20) & Cells(j, 21)) = Inhalt_von_D_und_F Then
Sheets("Freizeit").Cells(i, 8) = Cells(j, 26)
goto nZeile
End If
Next j
nZeile:
Next i
End Sub


Anzeige
AW: VBA
16.07.2008 11:34:57
Konrad
Hallo Yusuf,
Vielen Dank für deine zahlreichen Lösungsvorschläge. Habe gerade dein makro getestet, aber aus irgendeinem Grund werden mir dabei keine Werte in die Spalte "H" geschrieben. Könntest du eventuell noch mal einen Blick darauf werfen? wahrscheinlich war ich wieder mal etwas unklar in meiner Fragestellung. Zum besseren Verständnis habe ich die Datei hochgeladen auf der ich das Makro getestet habe.
Gruß Konrad
https://www.herber.de/bbs/user/53854.xls

AW: VBA
16.07.2008 11:50:32
yusuf
Hi,
die Verknuepfung zum String durch das & hat anscheinend nicht so funktioniert wie ich es gerne gehabt haette.
Hier eine Version die in deiner Beispiel Mappe funktioniert.

Sub Suchen_Eintragen()
Dim i As Integer
Dim j As Integer
Dim Inhalt_von_D_und_F As String
Sheets("Arbeit").Activate
For i = 1 To Sheets("Freizeit").UsedRange.Rows.Count
For j = 1 To Sheets("Arbeit").UsedRange.Rows.Count
If Sheets("Freizeit").Cells(i, 4) = Cells(j, 20) And _
Sheets("Freizeit").Cells(i, 6) = Cells(j, 21) Then
Sheets("Freizeit").Cells(i, 8) = Cells(j, 26)
GoTo nZeile
End If
Next j
nZeile:
Next i
End Sub


Gruß
Yusuf

Anzeige
AW: VBA
16.07.2008 12:42:00
yusuf
Hi,
ungetestet.

Sub Suchen_Eintragen()
Dim i As Integer
Dim j As Integer
Dim Inhalt_von_D_und_F As String
Sheets("Arbeit").Activate
For i = 1 To Sheets("Freizeit").UsedRange.Rows.Count
For j = 1 To Sheets("Arbeit").UsedRange.Rows.Count
If Sheets("Freizeit").Cells(i, 4) = Cells(j, 20) And _
Sheets("Freizeit").Cells(i, 6) = Cells(j, 21) Or _
Sheets("Freizeit").Cells(i, 4) = Cells(j, 21) And _
Sheets("Freizeit").Cells(i, 6) = Cells(j, 20) Then
Sheets("Freizeit").Cells(i, 8) = Cells(j, 26)
Exit For
End If
Next j
Next i
End Sub


Gruß
Yusuf

AW: VBA
16.07.2008 12:31:43
Konrad
Hallo Yusuf,
dein Makro funktioniert prima, ich war aber nicht präzise genug in der Formulierung meines Problems, sorry! Deshalb gilt dasselbe was ich schon vorhin Martin geantwortet hatte:
die gesuchten Informationen aus dem Arbeitsblatt "Freizeit" kommen im Arbeitsblatt "Arbeit" nur in den Spalten "T" oder "U" vor. Es kann allerdings sein, dass sie in vertauschter Reihenfolge zu finden sind (d.h. nicht immer findet sich die Info aus Spalte "D" im Arbeitsblatt "Freizeit" auch in der Spalte "T" des Arbeitsblattes "Arbeit". Sie könnte auch in der Spalte "U" vorkommen). Ich habe bei deiner Lösung probiert, diese Vertauschung durchzuführen. Mir scheint aber dass dieser Schritt derzeit noch nicht funktioniert.
Gruß
Konrad

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige