Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1832to1836
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

Zelleninhalt mit Bedingungen kopieren

Zelleninhalt mit Bedingungen kopieren
25.05.2021 11:54:46
Jakob
Hallo zusammen,
Ich benötige Hilfe bei einem Makro, gerne auch mit Erklärung dazu, damit ich verstehe wo es hakt.
Ausgangspunkt ist eine Tabelle, in der eine Variable in Spalte C steht (C3:C32), dann gibt es noch eine zweite Spalte I in der eine weitere Information steht (3 mögliche Werte), und eine dritte Spalte F, deren Inhalte ich kopieren möchte. Einträge in Spalte C können mehr als einmal vorkommen (also zB das Länderkürzel DE steht sowohl in Zeile 6 und 7).
Ziel ist eine neue Tabelle, nennen wir sie Overview 2, in der in Spalte A die 28 Länderkürzel stehen (A3:A30), die Spalten B, C und D bekommen die Überschrift der drei möglichen Werte aus Spalte I. In diesen Spalten B,C,D sollen dann die Einträge aus Spalte F (separiert mit Komma wenn mehr als ein Eintrag) stehen, für das jeweilige Land.
Mir würde schon ein Makro für eine Spalte reichen, dass ich dann für die Spalten C und D auch laufen lass (leicht abgeändert).
Mein bisheriger Versuch (funktioniert nicht richtig weil in der Ausgangstabelle nicht alle Länderkürzel stehen, und Werte nur kopiert werden wenn zufällig in Ausgangs- und Zieltabelle in derselben Ziel das selbe Länderkürzel steht).

Sub TF()
Dim i As Integer
Dim Quelle As Worksheet
Set Quelle = Sheets("(1) TF")
Set Ziel = Sheets("Overview 2")
For i = 3 To 32
If Quelle.Cells(i, 3) = Ziel.Cells(i, 1) Then
Sheets("Overview 2").Cells(i, 2).Value = Quelle.Cells(i, 6)
End If
Next
End Sub
Zweiter Versuch, da passiert aber nix:

Sub Kopieren()
Dim rng As Range
For Each rng In Sheets("(1) TF").Range(Cells(3, 3), Cells(Rows.Count, 3).End(xlUp))
If Sheets("(1) TF").Cells(rng.Row, 3) = Sheets("Overview 2").Cells(rng.Row, 1) And _
Sheets("(1) TF").Cells(rng.Row, 9) = Sheets("Overview 2").Cells(2, 2) Then
Sheets("(1) TF").Cells(rng.Row, 6).Copy _
Destination:=Sheets("Overview 2").Cells(rng.Row, 2)
End If
Next rng
End Sub

VIelen Dank für Deine Hilfe!
Liebe Grüße,
Jakob

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zelleninhalt mit Bedingungen kopieren
25.05.2021 12:02:21
Werner
Hallo,
Mir würde schon ein Makro für eine Spalte reichen
Und uns würde schon reichen, wenn du eine Beispielmappe hochladen würdest mit ein paar "händisch" eingetragenen Daten, wie dein Wunschergebnis aussehen soll. Im Aufbau muss die Beispielmappe exakt deinem Original entsprechen.
Gruß Werner
AW: Zelleninhalt mit Bedingungen kopieren
25.05.2021 13:05:33
Werner
Hallo,
z.B. so:

Option Explicit
Sub Schaltfläche1_Klicken()
Dim loLetzte As Long, i As Long, z As Long, strErgebnis As String
Application.ScreenUpdating = False
With Worksheets("Ausgangstabelle")
loLetzte = .Cells(.Rows.Count, "C").End(xlUp).Row
.Range("C3:C" & .Cells(.Rows.Count, "C").End(xlUp).Row).Copy
Worksheets("Ziel").Range("A3").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
With Worksheets("Ziel")
.Range("A3:A" & .Cells(.Rows.Count, "A").End(xlUp).Row).RemoveDuplicates Columns:=1, Header:=xlNo
For i = 3 To .Cells(.Rows.Count, "A").End(xlUp).Row
Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=1, Criteria1:=.Cells(i, "A")
Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=7, Criteria1:="Single instruments"
If Worksheets("Ausgangstabelle").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
For z = 3 To loLetzte
If Worksheets("Ausgangstabelle").Rows(z).Hidden = False Then
If Worksheets("Ausgangstabelle").Cells(z, "F")  "" Then
If strErgebnis = vbNullString Then
strErgebnis = "#" & Worksheets("Ausgangstabelle").Cells(z, "F")
Else
strErgebnis = strErgebnis & ", #" & Worksheets("Ausgangstabelle").Cells(z, "F")
End If
End If
End If
Next z
.Cells(i, "B") = strErgebnis
strErgebnis = ""
End If
Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=1, Criteria1:=.Cells(i, "A")
Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=7, Criteria1:="Group of instruments"
If Worksheets("Ausgangstabelle").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
For z = 3 To loLetzte
If Worksheets("Ausgangstabelle").Rows(z).Hidden = False Then
If Worksheets("Ausgangstabelle").Cells(z, "F")  "" Then
If strErgebnis = vbNullString Then
strErgebnis = "#" & Worksheets("Ausgangstabelle").Cells(z, "F")
Else
strErgebnis = strErgebnis & ", #" & Worksheets("Ausgangstabelle").Cells(z, "F")
End If
End If
End If
Next z
.Cells(i, "C") = strErgebnis
strErgebnis = ""
End If
Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=1, Criteria1:=.Cells(i, "A")
Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=7, Criteria1:="Example of group of instruments"
If Worksheets("Ausgangstabelle").AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count > 1 Then
For z = 3 To loLetzte
If Worksheets("Ausgangstabelle").Rows(z).Hidden = False Then
If Worksheets("Ausgangstabelle").Cells(z, "F")  "" Then
If strErgebnis = vbNullString Then
strErgebnis = "#" & Worksheets("Ausgangstabelle").Cells(z, "F")
Else
strErgebnis = strErgebnis & ", #" & Worksheets("Ausgangstabelle").Cells(z, "F")
End If
End If
End If
Next z
.Cells(i, "D") = strErgebnis
strErgebnis = ""
End If
Next i
End With
.Range("A3").AutoFilter
End With
End Sub
Gruß Werner
Anzeige
noch ein Hinweis
25.05.2021 13:48:09
Werner
Hallo,
du hast in deiner Ausgangstabelle teilweise ...instrument und teilweise ...insturments drin stehen.
Entweder sorgst du für eine einheitliche Schreibweise, also immer mit s am Ende oder aber ohne s am Ende (und dann das Filterkriterium im Code entsprechend anpassen.
Oder du änderst das Filterkriterium im Code jeweils um auf

Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=7, Criteria1:="Single*"
Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=7, Criteria1:="Group of*"
Worksheets("Ausgangstabelle").Range("C2:J" & loLetzte).AutoFilter Field:=7, Criteria1:="Example of group of*"
Gruß Werner
Anzeige
AW: noch ein Hinweis
25.05.2021 14:22:49
Jakob
Vielen, vielen Dank für diesen ausführlichen und perfekt funktionierenden Code, das funktioniert perfekt! @Werner
Liebe Grüße,
Jakob
Gerne u. Danke für die Rückmeldung. o.w.T.
25.05.2021 14:48:44
Werner

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige