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

Zellinhalte verbinden @ Rudi Maintaire

Zellinhalte verbinden @ Rudi Maintaire
Stef@n
Hallo in die Runde,
ein besonderes Hallo an Rudi,
in dem Thread
https://www.herber.de/forum/archiv/1196to1200/t1198641.htm#1198828
hat du mir besonders geholfen !
Jetzt habe ich noch eine kleine Nachfrage:
In der Spalte L sind ebenfalls noch einzelne Zellen, die miteinander verbunden werden sollen
Fast immer sind es 5 Zellen untereinander - in der ersten Zelle steht ein Text und in der 5. Zelle
Der Inhalte der Zellen 2 - 5 sollten alle in die erste Zelle "verschoben" werden.
Wie müsste ich den Code ergänzen, dass das ebenfalls passiert.
Wenn gewünscht, lade ich gern noch einmal die Datei hoch !
Mit bestem Dank
Gruß
Stef@n

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

Betreff
Benutzer
Anzeige
AW: Zellinhalte verbinden @ Rudi Maintaire
03.03.2011 17:16:33
Stef@n
Hallo Rudi
eine Ergänzung / Hinweis:
letztlich soll das gleiche passieren, was der Code in der Spalte B macht !
Soweit :)
Gruß
Stef@n
dann lad die Datei mal hoch. owT
04.03.2011 09:04:32
Rudi
Datei geschickt
04.03.2011 10:02:16
Stef@n
Hallo Rudi,
vielen Dank vorab für deine Unterstützung.
Ich hab die die Datei mal separat zur Verfügung gestellt w der vertr. Daten (so wie beim ersten Mal)
Dein "alter" Code funktioniert einwandfrei für die Tabelle1
Jetzt geht es um die Inhalte der Tabelle2 - in Spalte M sind noch einzelne Zellen vorhanden,
die mit dem alten Code nicht zusammengeführt werden.
Mit bestem Gruß
Stef@n
AW: Datei geschickt
04.03.2011 10:47:22
Rudi
Hallo,
du meinst M statt L, oder?
Sub VerbundeneZellen_Loeschen()
Dim rngC As Range, arrTmpB, rngDel As Range, i As Integer, sTmpB As String, arrTmpM, sTmpM
Const sDelim As String = " | "
Application.ScreenUpdating = False
prcMergeCells
For Each rngC In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
If rngC.MergeArea.Cells.Count > 1 Then
If rngC.Address = rngC.MergeArea.Cells(1).Address Then
sTmpB = ""
sTmpM = ""
arrTmpB = rngC.MergeArea.Offset(, 1).Resize(rngC.MergeArea.Cells.Count)
arrTmpM = rngC.MergeArea.Offset(, 12).Resize(rngC.MergeArea.Cells.Count)
For i = 1 To UBound(arrTmpB) - 1
If arrTmpB(i, 1)  "" Then sTmpB = sTmpB & arrTmpB(i, 1) & sDelim
If arrTmpM(i, 1)  "" Then sTmpM = sTmpM & arrTmpM(i, 1) & sDelim
Next
sTmpB = sTmpB & arrTmpB(i, 1)
sTmpM = sTmpB & arrTmpM(i, 1)
rngC.Offset(, 1) = sTmpB
rngC.Offset(, 12) = sTmpM
If rngDel Is Nothing Then
Set rngDel = rngC.Cells(2).Resize(rngC.MergeArea.Cells.Count - 1)
Else
Set rngDel = Union(rngDel, rngC.Cells(2).Resize(rngC.MergeArea.Cells.Count - 1))
End If
End If
End If
Next
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
'Text in Spalten für Spalten C bis E  aufgrund Fehler in Zelle (Text statt Zahl formatiert)
TextInSpalten
End Sub

TextInSpalten ohne Select und mit Schleife:
Private Sub TextInSpalten()
Dim i As Long
For i = 3 To 5
Columns(i).TextToColumns Destination:=Cells(1, i), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Next i
End Sub

Gruß
Rudi
Traurig, dass es in so 'ner großen Bude niemanden gibt, der das kann.
Anzeige
AW: Rückfrage ...
04.03.2011 11:19:17
Stef@n
Hallo Rudi,
erst einmal vielen Dank ... und auch für die Vereinfachung des anderen Code
Ja, du hast Recht - meine natürlich Spalte M
Nur nach dem Ausführen schreibt er Informationen auf Spalte B mit in die Spalte M
Irgendwie sind die Werte "miteinander vermengt" ..
Kannst Du nochmal schauen ?
Thx
Stef@n
ps: zu deinem kleinen Nachsatz: ich erhalte die Daten aus unserer IT - und die stellt die Rohdaten
leider nur so zur Verfügung ... irgendwie traurig - Recht hast Du !
Aber es gibt ja so tolle Foren die Herber ... und es gibt Rudi :)))
hier der code, den ich genutzt habe
Sub VerbundeneZellen_Loeschen()
Dim rngC As Range, arrTmpB, rngDel As Range, i As Integer, sTmpB As String, arrTmpM, sTmpM
Const sDelim As String = " | "
Application.ScreenUpdating = False
prcMergeCells
For Each rngC In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
If rngC.MergeArea.Cells.Count > 1 Then
If rngC.Address = rngC.MergeArea.Cells(1).Address Then
sTmpB = ""
sTmpM = ""
arrTmpB = rngC.MergeArea.Offset(, 1).Resize(rngC.MergeArea.Cells.Count)
arrTmpM = rngC.MergeArea.Offset(, 12).Resize(rngC.MergeArea.Cells.Count)
For i = 1 To UBound(arrTmpB) - 1
If arrTmpB(i, 1) "" Then sTmpB = sTmpB & arrTmpB(i, 1) & sDelim
If arrTmpM(i, 1) "" Then sTmpM = sTmpM & arrTmpM(i, 1) & sDelim
Next
sTmpB = sTmpB & arrTmpB(i, 1)
sTmpM = sTmpB & arrTmpM(i, 1)
rngC.Offset(, 1) = sTmpB
rngC.Offset(, 12) = sTmpM
If rngDel Is Nothing Then
Set rngDel = rngC.Cells(2).Resize(rngC.MergeArea.Cells.Count - 1)
Else
Set rngDel = Union(rngDel, rngC.Cells(2).Resize(rngC.MergeArea.Cells.Count - 1))
End If
End If
End If
Next
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
'Text in Spalten für Spalten C bis E aufgrund Fehler in Zelle (Text statt Zahl formatiert)
TextInSpalten
End Sub 'TextInSpalten ohne Select und mit Schleife:
Private Sub TextInSpalten()
Dim i As Long
For i = 3 To 5
Columns(i).TextToColumns Destination:=Cells(1, i), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Next i
End Sub

' nicht verbundene Zellen in Spalte A verbinden (ist nach Export erforderlich)
Private Sub prcMergeCells()
Dim rngC As Range
For Each rngC In Range(Cells(2, 2), Cells(Rows.Count, 2).End(xlUp)).Offset(, -1)
If rngC.Offset(1) = "" Then rngC.Resize(2).Merge
Next
End Sub

Anzeige
AW: Rückfrage ...
04.03.2011 11:46:28
Rudi
Hallo,
kommt durch die Kopiererei.
....
For i = 1 To UBound(arrTmpB) - 1
If arrTmpB(i, 1) "" Then sTmpB = sTmpB & arrTmpB(i, 1) & sDelim
If arrTmpM(i, 1) "" Then sTmpM = sTmpM & arrTmpM(i, 1) & sDelim
Next
sTmpB = sTmpB & arrTmpB(i, 1)
sTmpM = sTmpM & arrTmpM(i, 1) 'hier korrigieren
rngC.Offset(, 1) = sTmpB
rngC.Offset(, 12) = sTmpM
.....
Gruß
Rudi
AW: Rückfrage ...
04.03.2011 13:54:51
Stef@n
Hallo Rudi
allerbesten Dank ! Es funktioniert einwandfrei.
Jetzt versuche ich gerade, aus deinem Code "schlau zu werden"
Eines weiss ich schon: Werde mich mal mit VBA ein klein wenig mehr auseinandersetzen !
Du hast den Code so aufgebaut, dass jetzt in der Spalte M die einzelnen Zellen miteinander
"ge-mergt" werden.
Wie müsste denn der Code aufgebaut sein, daß es für eine andere Spalte funktioniert.
Falls ich in der Zukunft (das wird vermutlich so sein) eine Datei bekomme, in der die relevante Spalte z.B. die Spalte O
ist - also zwei weiter rechts.
Vielleicht kannst du mir nochmal den Hinweis geben - dadurch lerne ich auch
und ich kann es das nächste Mail bestimmt allein :)
Freu mich auf eine Antwort
Gruß
Stef@n
Sub VerbundeneZellen_Loeschen()
Dim rngC As Range, arrTmpB, rngDel As Range, i As Integer, sTmpB As String, arrTmpM, sTmpM
Const sDelim As String = " | "
Application.ScreenUpdating = False
prcMergeCells
For Each rngC In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
If rngC.MergeArea.Cells.Count > 1 Then
If rngC.Address = rngC.MergeArea.Cells(1).Address Then
sTmpB = ""
sTmpM = ""
arrTmpB = rngC.MergeArea.Offset(, 1).Resize(rngC.MergeArea.Cells.Count)
arrTmpM = rngC.MergeArea.Offset(, 12).Resize(rngC.MergeArea.Cells.Count)
For i = 1 To UBound(arrTmpB) - 1
If arrTmpB(i, 1) "" Then sTmpB = sTmpB & arrTmpB(i, 1) & sDelim
If arrTmpM(i, 1) "" Then sTmpM = sTmpM & arrTmpM(i, 1) & sDelim
Next
sTmpB = sTmpB & arrTmpB(i, 1)
sTmpM = sTmpM & arrTmpM(i, 1)
rngC.Offset(, 1) = sTmpB
rngC.Offset(, 12) = sTmpM
If rngDel Is Nothing Then
Set rngDel = rngC.Cells(2).Resize(rngC.MergeArea.Cells.Count - 1)
Else
Set rngDel = Union(rngDel, rngC.Cells(2).Resize(rngC.MergeArea.Cells.Count - 1))
End If
End If
End If
Next
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
'Text in Spalten für Spalten C bis E aufgrund Fehler in Zelle (Text statt Zahl formatiert)
TextInSpalten
End Sub 'TextInSpalten ohne Select und mit Schleife:
Private Sub TextInSpalten()
Dim i As Long
For i = 3 To 5
Columns(i).TextToColumns Destination:=Cells(1, i), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Next i
End Sub
' nicht verbundene Zellen in Spalte A verbinden (ist nach Export erforderlich)
Private Sub prcMergeCells()
Dim rngC As Range
For Each rngC In Range(Cells(2, 2), Cells(Rows.Count, 2).End(xlUp)).Offset(, -1)
If rngC.Offset(1) = "" Then rngC.Resize(2).Merge
Next
End Sub

Anzeige
Antwort
04.03.2011 14:28:28
Rudi
Hallo,
Du hast den Code so aufgebaut, dass jetzt in der Spalte M die einzelnen Zellen miteinander
"ge-mergt" werden.

Nein.
Es werden zuerst in A Zellen mit Inhalt mit den folgenden Zellen ohne Inhalt verbunden (prcMergeCells).
Dann wird A durchlaufen und geprüft, ob es sich um einen verbundenen Bereich handelt.
For Each rngC In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
If rngC.MergeArea.Cells.Count > 1 Then

Wenn es sich bei rngC um die erste Zelle des verbundenen Bereichs handelt, werden die entsprechend großen Bereiche aus B und M in Datenfelder (Arrays) eingelesen
If rngC.Address = rngC.MergeArea.Cells(1).Address Then
sTmpB = ""
sTmpM = ""
arrTmpB = rngC.MergeArea.Offset(, 1).Resize(rngC.MergeArea.Cells.Count)
arrTmpM = rngC.MergeArea.Offset(, 12).Resize(rngC.MergeArea.Cells.Count)

Dann werden die Inhalte der Datenfelder, falls nicht leer, zu einem String verkettet.
For i = 1 To UBound(arrTmpB) - 1
If arrTmpB(i, 1) "" Then sTmpB = sTmpB & arrTmpB(i, 1) & sDelim
If arrTmpM(i, 1) "" Then sTmpM = sTmpM & arrTmpM(i, 1) & sDelim
Next
sTmpB = sTmpB & arrTmpB(i, 1)
sTmpM = sTmpM & arrTmpM(i, 1)

und nach B und M geschrieben
rngC.Offset(, 1) = sTmpB
rngC.Offset(, 12) = sTmpM

Anschließend wird noch die 2. bis letzte Zelle des verbundenen Bereichs gemerkt
If rngDel Is Nothing Then
Set rngDel = rngC.Cells(2).Resize(rngC.MergeArea.Cells.Count - 1)
Else
Set rngDel = Union(rngDel, rngC.Cells(2).Resize(rngC.MergeArea.Cells.Count - 1))
End If

und ganz zum Schluss die ganzen Zeilen gelöscht
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
Gruß
Rudi
Anzeige
AW: Antwort
04.03.2011 15:14:31
Stef@n
Hallo Rudi
bin baff ! Danke für die ausführliche Erläuterung !
Je tiefer ich in die Thematik weiter einsteige, desto mehr macht es Spass !!
Dank dir sehr für dein Hilfe
und wünsche Dir ein schönes Wochenende
Besten Gruß
Stef@n

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige