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

Zellen verschmelzen

Zellen verschmelzen
amintire
Hallo alle zusammen,
würde gerne Zelle B2 und Zelle B10 verschmelzen,
das Ergebnis soll in Zelle E6 stehen.
https://www.herber.de/bbs/user/74324.xls
In B2 stehen Buchstaben drinnen, und in Zelle B10 stehen Zahlen (mit leerzeichen)
B2 = ABCDEFGHIJK usw
B10 = 1 2 3 4 5 678 9 10 11 12
In den leeren Plätzen bei B10 sollen jeweils immer nacheinander die Buchstaben von B2 reingeschrieben werden.
Also Ergebnis wäre dann z.B. in
E6 = 1A2B3C4D5E678F9G10H11I12J
Vielleicht mit einer Formel lösbar oder evtl doch VBA Code.
Lieben Gruß Amina

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Texte verschmelzen mit VBA
09.04.2011 11:19:56
Erich
Hi Amina,
hier eine VBA-Lösung:

Option Explicit
Sub Schmelz()
Dim strB As String, strZ As String, strE As String
Dim zz As Long, bb As Long
strB = Cells(2, 2)
strZ = Cells(10, 2)
For zz = 1 To Len(strZ)
If Mid(strZ, zz, 1) = " " Then
bb = bb + 1
If bb 
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Texte verschmelzen mit VBA - kürzer
09.04.2011 11:35:33
Erich
Hi Amina,
hier noch eine kürzere Variante:

Option Explicit
Sub Schmelz2()
Dim strB As String, strZ As String, zz As Long, bb As Long
strB = Cells(2, 2)
strZ = Cells(10, 2)
For zz = 1 To Len(strZ)
If Mid(strZ, zz, 1) = " " And bb 
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Texte verschmelzen mit VBA
09.04.2011 11:37:36
Gerd
Hallo A.!
Sub tire()
Dim strJoin As String, i As Integer
For i = 0 To UBound(Split(Trim$(Cells(10, 2))))
strJoin = strJoin & Split(Trim$(Cells(10, 2)))(i) & Mid$(Cells(2, 2), i + 1, 1)
Next
Cells(7, 5) = strJoin
End Sub
Gruß Gerd
kleiner eventueller Mangel
09.04.2011 11:47:17
Erich
Hi Gerd,
wenn B10 nicht mit einem Leerzeichen, sondern mit einer Ziffer endet,
hängt tire() trotzdem hinten einen Buchstaben an. Das soll wohl nicht sein.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
noch einer
09.04.2011 11:51:55
Erich
Hi Gerd,
wenn B10 mit einem Leerzeichen beginnt, löscht tire() dieses Leerzeichen,
ohne es durch einen Buchstaben zu ersetzen. Das soll wohl auch nicht sein.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: E6 = 1A2B3C4D5E678F9G10H11I12J
09.04.2011 12:10:42
Gerd
Hallo Erich,
Leerzeichen vorne u. hinten zu eleminieren, ist die Funktion von Trim.
Gruß Gerd
AW: ohne Leerzeichen?
09.04.2011 13:31:53
amintire
Hallo und vielen Dank für eure Hilfe.
Alle codes funktionieren super, wie kann ich jedoch folgende zwei Codes verschmelzen in einem Sub?
Also folgendermaßen:
B2: abcdefghij...
B8: abcdefghij...
Ergebnis:
E6: aabbccddeeffgghhiijj...
Sub tire()
Dim strJoin As String, i As Integer
For i = 0 To UBound(Split(Trim$(Cells(10, 2))))
strJoin = strJoin & Split(Trim$(Cells(10, 2)))(i) & Mid$(Cells(2, 2), i + 1, 1)
Next
Cells(6, 5) = strJoin
End Sub
Function Leer1(stext As String) As String
Dim iCounter As Integer
Dim sTxt As String
For iCounter = 1 To Len(stext) Step 1
sTxt = sTxt & Mid(stext, iCounter, 1) & " "
Next iCounter
Leer1 = Left(sTxt, Len(sTxt) - 1)
End Function

Gruß Amina
Anzeige
Frage unklar
09.04.2011 14:04:12
Erich
Hi Amina,
dass die beiden Quelltexte gleich sind und mit "..." (nicht) enden, verunklart die Frage.
Wie soll das Ergebnis in E6 aussehen bei
B2: KLMNO
B8: abcdefghij
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Frage unklar
09.04.2011 14:11:27
amintire
Hallo Erich,
das Ergebnis müsste hier dann so aussehen:
B2: KLMNO
B8: abcdefghij
Ergebnis: aKbLcMdNeOfghij
Gruß Amina
Vorschlag
09.04.2011 14:32:44
Erich
Hi Amina,
das ginge z. B. damit:

Public Function SchmelzB(strA As String, strB As String) As String
Dim zz As Long
For zz = 1 To Application.Max(Len(strA), Len(strB))
If zz 
In E6 schreibst du die Formel =SchmelzB(B8;B2)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort - Schönes Wochenende!
Anzeige
AW: Vorschlag
09.04.2011 14:36:27
amintire
Hallo Erich,
danke für deinen Vorschlag.
Funktioniert das ganze auch ohne eine Formel in der Tabelle also als Sub Code ?
Gruß Amina
als Prozedur
09.04.2011 14:45:43
Erich
Hi Amina,
da hätte ich nun gedacht, dass du das selbst hinbringst...
Aber ok, hier das Ganze als Prozdur:

Sub SchmelzB2()
Dim strA As String, strB As String, strE As String, zz As Long
strB = Cells(2, 2)
strA = Cells(8, 2)
For zz = 1 To Application.Max(Len(strA), Len(strB))
If zz 
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Vielen Dank
09.04.2011 15:14:04
amintire
Hallo Erich,
vielen lieben Dank für deine Zeit.
Gruß
Amina
Anzeige
AW: als Prozedur (umgekehrt)
09.04.2011 18:25:41
amintire
Hallo Erich,
danke nochmal für deine Hilfe.
Kannst du mir noch helfen den Code umzukehren?
Ich schreib dann in E6
AfBrC1DdEe
Und als Ergebnis soll dann das ganze umgekehrt werden, also:
B2 = fr1de
B8 = ABCDE

Sub SchmelzB2()
Dim strA As String, strB As String, strE As String, zz As Long
strB = Cells(2, 2)
strA = Cells(8, 2)
For zz = 1 To Application.Max(Len(strA), Len(strB))
If zz 

Ich schreib dann in Cells(6, 5) z.B.
AaBbCcDdEe
Und als Ergebnis soll dann das ganze umgekehrt werden, also:
Cells(2, 2)abcde
Cells(8, 2) ABCDE
Vielen Dank
Lieben Gruß
Amina
Anzeige
Prozedur umgekehrt
09.04.2011 19:08:51
Erich
Hi Amina,
probier mal:

Sub ZerlegB2()
Dim strE As String, strA As String, strB As String, zz As Long
strE = Cells(6, 5)
For zz = 1 To Len(strE) Step 2
strB = strB & Mid$(strE, zz, 1)
strA = strA & Mid$(strE, zz + 1, 1)
Next zz
Cells(2, 2) = strA
Cells(8, 2) = strB
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: umgekehrt nach Sorte
09.04.2011 19:17:58
Gerd
Hallo A.!
Sub retire()
Dim strA As String, strB As String, i As Integer
With Cells(6, 5)
For i = 1 To Len(.Text)
If Mid(.Text, i, 1) = LCase$(Mid(.Text, i, 1)) Then
strA = strA & Mid(.Text, i, 1)
Else
strB = strB & Mid(.Text, i, 1)
End If
Next
End With
Cells(2, 2) = strA
Cells(8, 2) = strB
End Sub
Gruß Gerd
Anzeige
AW: ***
12.04.2011 11:09:23
amintire
Hallo ihr beiden,
vielen Dank für eure Unterstützung, funktioniert alles.
Danke, Danke, Danke....
Lieben Gruß
Amina
Klärungsversuch
09.04.2011 13:58:11
Erich
Hi Gerd,
da haben wir uns wohl irgendwie missverstanden. Die Fkt. Trim() kannte ich schon. :-)
Was ich mit meinen beiden Beiträgen zu tire() meinte, erkläre ich vielleicht besser an diesen Beispielen:
 ABCD
1ABCDE tire()Schmelz()
21 21@21A2B1A2
3 1 2@1@21A2BA1B2
41 2 1@2@1A2B1A2B
5 1 2 @1@2@1A2BA1B2C
6 1 2  @1@2@@1A2BA1B2CD

Formeln der Tabelle
ZelleFormel
B2=WECHSELN(A2;" ";"@")
D2=Schmelz(A$1;A2)

In Spalte A stehen mehr oder weniger Leerzeichen in den Zahlenstrings, sichtbar gemacht in Spalte B.
In Zeile 2 verlängert tire() den String, hängt ein B an, wo kein Leerzeichen ist.
In Zeile 3 löscht tire() das erste Leefrzeichen ohne Ersetzung durch einen Buchstaben,
hängt hinter der 2 einen Buchstaben an, obwohl da kein Leerzeichen ist.
In Zeile 4 haben wir das selbe Ergebnis.
In den Zeilen 5:6 sind die Effekte kombiniert.
Das Ergebnis zum Betreff ("E6 = 1A2B3C4D5E678F9G10H11I12J") ist ok, Aminas Beispiel-Zahlenstring
beginnt mit einer Ziffer und endet mit einem Leerzeichen. Das entspricht hier der Zeile 4.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort - und:; Schönes Wochenende!
Anzeige
AW: Klärungsversuch
09.04.2011 14:36:15
Gerd
Hallo Erich,
ach so. :-)
Du testet auf andere Konstellationen. Ich hatte die Frage auf das gezeigte Muster der Beispieldatei bezogen.
Gruß Gerd
AW: Zellen verschmelzen
09.04.2011 11:39:44
fcs
Hallo AMina,
als Alternative Erich's Vorschlag umgewandelt in eine benutzerdefinierte Funktion.
'Allgemeines Modul in Datei
Option Explicit
Public Function Schmelz(sText As String, sZahlen As String) As String
Dim zz As Long, bb As Long
For zz = 1 To Len(sZahlen)
If Mid(sZahlen, zz, 1) = " " Then
bb = bb + 1
If bb 

In der Tabelle kannst du dann mit der Formel
=Schmelz(B2;B10)

das Ergebnis berechnen lassen.
Gruß
Franz
Anzeige
Zellen verschmelzen als VBA-Funktion
09.04.2011 11:59:45
Erich
Hi Franz,
hier noch eine Variante der UDF :

Public Function Schmelz(sText As String, sZahlen As String) As String
Dim zz As Long, bb As Long
Schmelz = sZahlen
For zz = 1 To Len(sZahlen)
If Mid$(sZahlen, zz, 1) = " " And bb 
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Analyse
09.04.2011 14:50:33
Luc:-?
Hi Leute (speziell Erich, Gerd & Franz);
ist euch schon mal in den Sinn gekommen, dass es sich bei Aminas Aufgabe um ein ganz allgemeines Textverkettungsproblem handelt? Dafür ist hier schon mal vor Zeiten die udFkt VERKETTEN.xyz (weiß nicht mehr was xyz war) bzw VERKETTEN2 vorgestellt worden, denn im Grunde handelt es sich um 3 Aufgaben:
1. Erzeuge Einzelzeichen-Datenfelder aus mehreren Zeichenfolgen!
2. Kombiniere diese Datenfelder elementweise!
3. Fasse das Ergebnisdatenfeld zu einer Zeichenfolge zusammen!
Das könnte man also auch ganz normal mit Textverarbeitungsfktt im TabBlatt erledigen (wie es ja auch die grdlegende Intention eines jeden KalkPgms ist), wenn es die entsprechenden Fktt denn gäbe! In Xl ist das nicht der Fall, aber in bzw mit VBA ist das möglich. Also wäre es doch viel angebrachter, 2-3 udFktt zu schreiben, die allgemein angewendet wdn können, und die dann in einer ZellFml zusammenzufassen, als die xte Insellösung für eine spezielle Problemausprägung zu liefern. Das ist kaum rationell und letztlich dann wohl doch für die Tonne…
Xl ist ein KalkPgm, das auf ZellFmln aufbaut, die auch Fktt enthalten können. Also muss ein HptAnliegen der VBA-Anwendung die Schaffung sinnvoller zusätzlicher Fktt sein; ein anderes bleibt natürlich die Gestaltung bzw Automatisierung komplexer Abläufe, wie es am Bsp der MS-Analyse-Tools auch gut zu sehen ist (ohne jetzt auf die oft diskutierten anderen, damit verbundenen Probleme eingehen zu wollen!).
Sieht man mal über den MS-Tellerrand hinaus, lassen sich in anderer Software oft viel mehr sinnvolle Textverarbeitungsfktt finden als MS uns in Xl zugestehen will. Dank des Wunsches, so etwas auch in Xl zV haben zu wollen, habe ich mal begonnen, mich für udFktt zu interessieren…
Aber zurück zum Thema →
1. erledigt die vbFkt Split, die man in einer udF so einsetzen kann, dass auch Zeichenfolgen ohne Trennzeichen auf verschiedene, zu parametrierende Weise zerlegt wdn können.
2. erledigt die xlFkt VERKETTEN.
3. erledigt die o.g. spezielle VERKETTEN-Variante oder eine udF auf der Basis der vbFkt Join, die ebenfalls durch spezielle Parameter erweitert wdn kann. Bei Join muss allerdings beachtet wdn, dass nur horizontale (1dimensionale) Vektoren verarbeitet wdn können. Also muss uU MTRANS zusätzlich eingesetzt wdn.
Damit gäbe es dann eine FmlLösung aus xl- u. udFktt, die flexibel und allgemein einsetzbar ist.
Gruß+schöWE, Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige