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

Mehrere Inhalte in einer Zelle kopieren

Mehrere Inhalte in einer Zelle kopieren
17.11.2016 09:36:46
Weber
Hallo VBA Experten,
bisher habe ich immer professionelle Hilfe im Forum gefunden,
mit der ich Probleme im VBA gelöst habe.
Bei meinem aktuellen Problem finde ich leider keine Lösung und
hoffe auf eure Hilfe!
Ich möchte aus Datei 1 mit der If-Bedingung mehrere Zelleinhalte kopieren und
in EINER Zelle in der Datei 2 einfügen.
Kurze Darstellung zum Verständnis:
Spalte A hat 1 und
Spate B hat "Fester Text" dann
Inhalt C kopieren.
und das ganze sollte in der Schleife die restlichen Zelle mit der gleichen If Bedingung überprüfen und anschließend zusammengefasst
in der Datei 2 Spalte A Zeile 1 eingefügt werden.
Nun kommt die Herausforderung:
Die Suche bzw. If-Bedingung soll wiederholt nach
Spalte A = 2 und
Spalte B = "Fester Text" dann
Inhalt C kopieren
weiterlaufen.
Die Zahl in der Spalte A geht bis 90.
Besten Dank schon Mal für eure Antwort!

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nachgefragt...
17.11.2016 15:45:28
Michael
Hallo!
Prinzipiell wollte ich Dir schon vorschlagen: Prüfe in einer Hilfsspalte den Zellwert aus A und den Text aus B, setze dann in einer Schleife einen Autofilter auf die Hilfsspalte, und kopiere vom entsprechenden Filterbereich Spalte C in das Zielblatt.
Aber...
Was heißt in EINER Zelle in der Datei 2 einfügen? Willst Du wirklich den gesamten Inhalt aller Zellen aus Spalte C in eine Zelle unterbringen? Es gibt ein Maximum für Zellinhalte (ca. 32000 Zeichen mE)
Was meinst Du mit anschließend zusammengefasst in der Datei 2 Spalte A Zeile 1 eingefügt werden? Sollen die Inhalte der Spalte C:C nun in einer Zeile, also transponiert, ausgegeben werden?
D.h. die [A=1 und B = "Text"]-Werte kommen in die erste Zeile, die [A=2 und B = "Text"]-Werte kommen dann in die zweite Zeile usw.?
Evtl. wär eine Bsp-Datei nicht schlecht!
LG
Michael
Anzeige
AW: Nachgefragt...
18.11.2016 08:20:54
Weber
Hallo Michael,
Danke für die Antwort!
ich habe die Datei angehängt und habe folgende Code geschrieben.
Ich versuche Mal meine Idee noch Mal einfacher zu erklären.
Spalte A Spalte B Spalte C
1 Festwert Hallo
1 Festwert Tschüss
2 Festwert Hi
2 Festwert Ciao
Hier sollen ein Mal für 1 und Festwert Hallo und Tschüss kopiert werden+
und zusammen in der Datei 2 in der selben Zelle A1 eingefügt werden.
Anschließend weiter für 2 und Festwert Hi und Ciao kopieren und
wieder zusammen in der Datei 2 in der selben Zelle A2 eingefügt werden u.s.w..
Kopieren und Einfügen funktioniert soweit,
aber die Variable i zählt nach 1 nicht mehr weiter,
so dass nur die ersten beiden Zeilen kopiert und eingefügt werden...
Anzeige
AW: Nachgefragt...
18.11.2016 08:21:37
Weber
Das ist mein Code dazu:
Sub Test()
Dim zz As Long
Dim sAdr As String
Dim i As Long
Dim x As Long
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
Workbooks.Open Filename:="C:\Users\weber\Desktop\Datei2.xlsx"
Windows("Datei1.xlsm").Activate
Sheets("Test").Select
i = 0
Do Until i = 6
i = i + 1
For zz = 1 To 10
x = i
If Cells(zz, 1) = x And _
Cells(zz, 2) = "Festwert" Then
sAdr = sAdr & "; " & Cells(zz, 3)
End If
Next zz
Windows("Datei2.xlsx").Activate
Sheets("Tabelle1").Select
Cells(1, i) = Mid(sAdr, 3)
Loop
End Sub

Die Bsp-Datei fehlt noch...
18.11.2016 08:48:33
Michael
Morgen,
... Du musst den entsprechenden Upload-Link auch in den Beitragstext einfügen, nur hochladen hilft da leider nicht.
Lg Michael
Anzeige
AW: Die Bsp-Datei fehlt noch...
18.11.2016 08:52:38
Weber
sorry,
die Datei 1 und Datei 2 habe ich im Link beigefügt.
Bitte im Desktop abspeichern, oder Pfad im VBA ggf. ändern.
Danke.
https://www.herber.de/bbs/user/109530.xlsx
Diese Datei ist leer...
18.11.2016 09:59:24
Michael
...das hilft bei der Klärung der Aufgabenstellung natürlich nur bedingt weiter...
Habe in der Zwischenzeit Deinen Code angesehen, und auch hier gilt: Es wäre besser Deine Ausgangslage (Tabelle1) zu kennen, sowie Dein gewünschtes Ziel, also wie es nach dem Makrodurchlauf in Tabelle2 (oder Mappe2...) aussehen soll.
LG
Michael
AW: Diese Datei ist leer...
18.11.2016 10:17:35
Weber
Hallo Michael,
ich habe nun einfach Mal Bild hochgeladen mit der Ausgangslage (Links) und
Ziel (Rechts).
Userbild
Der aktuellen Stand mit meinem Code:
Sub Test()
Dim zz As Long
Dim sAdr As String
Dim i As Long
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
Workbooks.Open Filename:="C:\Users\weber\Desktop\Datei2.xlsx"
Windows("Datei1.xlsm").Activate
Sheets("Test").Select
i = 0
Do Until i = 6
i = i + 1
For zz = 1 To 10
If Cells(zz, 1) = i And _
Cells(zz, 2) = "Festwert" Then
sAdr = sAdr & "; " & Cells(zz, 3)
End If
Next zz
Windows("Datei2.xlsx").Activate
Sheets("Tabelle1").Select
Cells(1, i) = Mid(sAdr, 3)
Loop
End Sub
Die Variable i in der Zeile "IF Cells(zz, 1) = i And _" wird einfach nicht weitergezählt,
so dass immer wieder "Hallo" und "Tschüss" kopiert und in Datei 2 eingefügt wird...
Anzeige
Ein Ansatz für Dich zum Testen...
18.11.2016 10:58:02
Michael
Weber,
...kann so ausschauen:
Sub a()
Const TRENN As String = ";"
Dim WbQ As Workbook: Set WbQ = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = WbQ.Worksheets("Tabelle1")
Dim WbZ As Workbook, WsZ As Worksheet
Dim Daten As Range
Dim aD, aId, DicId As Object, j
Dim i As Long, k As Long, Sp As Long, t As String
Application.ScreenUpdating = False
With WsQ
Set Daten = .Range(.Cells(1, 1), .Cells(.Rows.Count, 3).End(xlUp))
aD = Daten
With Daten
aId = Application.Transpose(.Resize(.Rows.Count, 1))
End With
End With
Set DicId = CreateObject("Scripting.Dictionary")
For i = LBound(aId) To UBound(aId)
If Not DicId.exists(aId(i)) Then DicId.Add (aId(i)), 0
Next i
Set WbZ = Workbooks.Add
Set WsZ = WbZ.Worksheets(1)
For Each j In DicId.keys
For k = LBound(aD) To UBound(aD)
If aD(k, 1) = j Then t = t & aD(k, 3) & TRENN
Next k
t = Left(t, Len(t) - 1)
With WsZ
Sp = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
.Cells(1, Sp) = t
End With
t = vbNullString
Next j
With WsZ
.Columns.EntireColumn.AutoFit
.Columns(1).Delete
End With
Application.ScreenUpdating = False
End Sub
Ist auf Basis Deines letzten Bsp-Bildes und enthält schon ein paar Annahmen, um das ganze evtl. universeller zu gestalten. Beachte meinen ersten Hinweis: Es gibt ein Limit an Zeichen, den eine Zelle aufnehmen kann, das wird aktuell im Code noch nicht abgefangen; je nachdem wie lange Deine Ausgangsliste bzw. die Zelltexte sind, kann das evtl. Fehler werfen!
Gib Bescheid!
LG
Michael
Anzeige
AW: Ein Ansatz für Dich zum Testen...
18.11.2016 11:26:59
Weber
Hallo Michael,
vielen Dank, das funktioniert schon mal ganz gut!
Aber die kopierten Inhalte sollen ganz bestimmt in der Datei2 eingefügt werden.
Im Moment wird für das Einfügen neue Datei erstellt.
Das geht mit einer bestimmten Datei genaus...
18.11.2016 11:30:34
Michael
Weber,
...mit minimaler Änderung
wenn die Datei2 noch nicht geöffnet ist
    Set WbZ = Workbooks.Open("C:\DeinPfad\Datei2.xlsx")
Set WsZ = WbZ.Worksheets(1)
oder wenn sie schon geöffnet ist
    Set WbZ = Workbooks("Datei2.xlsx")
Set WsZ = WbZ.Worksheets(1)
Passt? ;-)
LG
Michael
Anzeige
AW: Das geht mit einer bestimmten Datei genaus...
21.11.2016 08:33:32
Weber
ja passt! Aber ich habe am Freitag noch einige Änderungen bekommen und
komme mit dem Code nicht mehr weiter..
ich werde neues Topic hierfür aufmachen, wenn ich wirklich nicht mehr weiter komme..
danke noch mal!!

373 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige