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

Zusammenführen

Zusammenführen
21.05.2014 17:47:04
Markus
Guten Abend zusammen,
ich habe ein kleines Problem und bräuchte Eure Hilfe:
Ich habe mehrere Liste mit Namen untereinander:
A1: Daniel
A2:Stefan
A3:Markus
.
.
.
Diese Namen will ich nun markieren (Anzahl kann variieren) und in der letzten Zeile, in der der letzte Name steht, in eine Zelle kopieren . Die Namen sollten mit einem Backslash getrennt sein. BSP: In der Zeile B3 sollte dann Daniel/Stefan/Markus stehen.
Danke für Eure Hilfe und schönen Feierabend!
Gruß Markus

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

Betreff
Datum
Anwender
Anzeige
hier (m)ein Vorschlag ...
21.05.2014 18:22:41
Matthias
Hallo Markus
Du kannst es mal so probieren ...
Dim rng As Range, MyAddy$
Dim MyTxt$
For Each rng In Selection
MyTxt$ = MyTxt$ & "/" & rng.Value
MyAddy = rng.Address
Next
Range(MyAddy) = Right(MyTxt, Len(MyTxt) - 1)
Wichtig!
Das funktioniert so aber nur wenn Du alle Namen als einen Bereich komplett markierst!
Also ohne Einzelmarkierungen.
Gruß Matthias

AW: hier (m)ein Vorschlag ...
22.05.2014 11:01:11
Markus
Hi Matthias,
vielen Dank für deine Hilfe.
Funktioniert sehr gut.
Nur noch eine Frage:
- Kann man auch noch einstellen, dass Zellen in denen kein Wert vorhanden ist ausgelassen wird?
- Die Namen waren eig nur Dummies, eigentlich werden Größen damit zusammengefügt.Da ich eine
Datei mit 5000 Artikel hab wird markieren langfristig schwierig. Kann man das auch irgendwie automatisieren?
Danke und Gruß Daniel

Anzeige
neuer Vorschlag ...
22.05.2014 16:00:31
Matthias
Hallo Daniel/Markus oder doch Stefan? ;-)
Dim rng As Range, MyAddy$
Dim MyTxt$
For Each rng In Selection
If rng.Value  "" Then MyTxt$ = MyTxt$ & "/" & rng.Value
MyAddy = rng.Address
Next
If Len(MyTxt) > 0 Then Range(MyAddy) = Right(MyTxt, Len(MyTxt) - 1)
Gruß Matthias

AW: Zusammenführen
23.05.2014 11:00:37
Markus
Hi Matthias,
sry aber mein Freund und ich benutzen denselben Account,da wir gemeinsam immer an den gleichen Sachen arbeiten. Daher die unterschiedlichen Namen :-) Mit einem Stefan können wir aber leider noch nicht dienen :-)
So noch eine kleine Ergänzung:
Dim rng As Range, MyAddy$
Dim MyTxt$
Dim Bereich As Range
Set Bereich = Range("A1:ZZ5000")
For Each rng In Bereich
If rng.Value <> "" Then MyTxt$ = MyTxt$ & "/" & rng.Value
MyAddy = rng.Address
Next
If Len(MyTxt) > 0 Then Range(MyAddy) = Right(MyTxt, Len(MyTxt) - 1)
Ich habe "versucht" das Makro nun so anzupassen, dass es jede Zeile in der Range durchläuft aber
das will irgendwie nicht so klappen. Hast du noch einen letzten Tipp für mich?
Danke!
Gruß Daniel

Anzeige
3.510.000 Zellinhalte + je ein Slash ?
23.05.2014 19:32:25
Matthias
Hallo
Da wird aus einer Spalte(Ursprungsfrage!) mit 3 Namen die Du/Ihr mit Slash trennen wolltet plötzlich 3.510.100 Zellen
Und auch wenn da überall nur ein Zeichen drinsteht kommt dann nochmal pro Zelleintrag ein Slash dazu.
Nee, das ist mir echt zu krass, sorry.
Viel Erfolg ...
Gruß Matthias

AW: Zusammenführen
23.05.2014 20:13:30
Daniel
Hi
prinzipell funktioniert dein Code schon.
er dauert halt bei der Zellenzahl ein kleines bisschen länger.
desweitern hast du das Problem, dass eine Excelcells maximal c.a. 32.000 Zeichen fassen kann. (dh wenn nur 1 Zeichen pro Zelle steht, dann kannst du in einer Zelle maximal die Werte von 3 Spalten darstellen).
dh du solltest erstmal tacheles reden und beschreiben, worum es tatsächlich geht und wie gross die Datenmengen wirklich sind (Anzahl belegte Zellen, wieviel Text steht in einer Zelle) und dir nochmal Gedanken darüber machen, wie das Ergebnis dargstellt werden soll unter der Prämisse, dass in eine Zelle maximal 32.000 Zeichen passen.
probiere mal diesen Code, dass ist etwas schneller und an deine Datenmenge angepasst:
Sub test()
Dim rng As Range, MyAddy As String
Dim MyTxt
Dim Bereich As Range
Dim arr, a
Dim i As Long
Set Bereich = Range("A1:ZZ5000")
arr = Bereich.Value
ReDim MyTxt(1 To 1, 1 To 1)
i = 1
For Each a In arr
If a  "" Then
If (1 + Len(a) + Len(MyTxt(1, i))) > 32767 Then
i = i + 1
ReDim Preserve MyTxt(1 To 1, 1 To i)
End If
MyTxt(1, i) = MyTxt(1, i) & "/" & a
End If
Next
ReDim arr(1 To UBound(MyTxt, 2), 1 To 1)
For i = 1 To UBound(MyTxt, 2)
arr(i, 1) = MyTxt(1, i)
Next
With Bereich
With .Cells(.Rows.Count, .Columns.Count)
.Offset(1, 0).Resize(UBound(arr, 1), 1).Value = arr
End With
End With
End Sub
Gruß Daniel
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige