Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
564to568
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
564to568
564to568
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Join-Befehl

Join-Befehl
11.02.2005 18:14:58
Reinhard
Hallo Wissende,
wie benutze ich denn den Join Befehl in VBA?

Sub ttt()
Dim Bereich As Variant
Bereich = [A1:I1]
'MsgBox Join(Bereich, "")
Zeile = Join(Bereich, "")
End Sub

klappt nicht an der Join-Zeile (ungült. Prozeduraufruf bzw ungültig. Argument)
Wie schreibe ich einen Rangebereich mit Join verknüpft in eine einzige Variable?
Gruß
Reinhard
AW: Join-Befehl
Kurt
hi,
sieh dir mal "union" an
...und Tschüss Kurt
Danke, aber leider
Reinhard
Hi Kurt,
Set Bereich = Application.Union(Range("A1"), Range("B1:I1"))
anstelle von
Bereich = [A1:I1]
nutzt mir m.A.n nix, oder ich übersehe da was.
Ich habe folgendes:
A1:= "K"
B1:= "u"
C1:= "r"
D1:= "t"
und ich möchte mittels Join erreichen, dass die Variable "Zeile" den Wert "Kurt" hat.
Und mein Ansatz funktioniertt halt nicht :-(

Sub ttt()
Dim Bereich As Variant
Bereich = [A1:D1]
'MsgBox Join(Bereich, "")
Zeile = Join(Bereich, "")
End Sub

Gruß
Reinhard
Anzeige
AW: Danke, aber leider - Lösung
Luc
Hallo Reinhard & Kurt,
die VBA-Funktion Join(bereich, trennzeichen) vereint die Inhalte der Zellen von bereich miteinander und setzt zwischen die einzelnen Werte trennzeichen, wenn angegeben. Es entsteht ein String, der einer passend deklarierten Variablen zugewiesen wdn kann. Die Umkehrung von Join() ist übrigens Split(string, trennzeichen). Die Funktion Union() vereint dagegen verschiedene Zellbereiche zu einem multiplen Auswahlbereich, wenn die Einzelbereiche voneinander getrennt liegen. Das Ergebnis verfügt also i.d.R. über mehrere Areas. Reinhard geht's hier aber offensichtl um Join(). Deshalb folgende Korrekturen:

Sub ttt()
Dim Bereich As Range, Zeile As String
Set Bereich = Range("A1:D1")
Zeile = Join(Bereich, "")
MsgBox Zeile
End Sub

Und wenn jetzt nicht in der MsgBox Kurt erscheint...
(zur Bezugsschreibweise vgl Thread "riesen Problem mit Formel in Excel - Sebastian 09.02.2005 13:18:37" mit "AW: Riesenproblem - Lösung - von Luc am 10.02.2005 22:13:18")
Schönen Abend noch
Luc
Anzeige
AW: Danke, aber leider - Lösung
Kurt
hallo Luc,
es ist schön, dass du dich hier zum Oberlehrer aufschwingst aber vielleicht solltest du deinen Code mal ausprobieren
...und versuch doch mal als erster zu antworten damit auch du das Vergnügen hast von anderen für Verständnisfehler gemassregelt zu werden *nichtsoengsehenabermalnachdenken*
und jetzt mal für dich:
Join(sourcearray [, delimiter])
sourcearray Erforderlich. Eindimensionales Datenfeld, das die zu kombinierenden, untergeordneten Zeichenfolgen enthält.
und dein Array ist leider nicht eindimensional sodern hat leider deren zwei
das kann man leicht nachvollziehen wenn man das Ding als Überwachungsausdruck definiert aber das hast du ja leider nicht getan
wir harren jetzt deinen weiteren Einfällen (aber ohne Schleife bitte (das kann ja jeder)) viel Spass
...und Tschüss Kurt
Anzeige
kommt Fehlermeldung
Reinhard
Dir auch einen schönen Abend Luc,
danke für deine Erläuterungen, habe auch den Thread mit Sebastian gelesen, muss den nochmal lesen um zu verstehen was mein join mit Formulalocal zu tun haben könnte, anscheinend ist heute nicht der Tag an dem mir dir Gedanken zufliegen *gg) aber wie auch immer,es bringt mich leider auch nicht zum Ziel :(

Sub ttt()
Dim Bereich As Range, Zeile As String
Set Bereich = Range("A1:D1")
Zeile = Join(Bereich, "")
MsgBox Zeile
End Sub

bringt Fehler 13, Typenunvrträglichkeit in der Join-Zeile.
Weitere Tipps, Ideen? *hoff*
Gruß
Reinhard
Anzeige
AW: kommt Fehlermeldung
Kurt
hi,
um dir erstmal weiterzuhelfen von luc kommt ja nix als heiss Luft

Sub ttt()
Dim zelle As Range
Dim zFolge As String
For Each zelle In Range("A1:D1")
zFolge = zFolge & zelle.Value
Next
MsgBox zFolge
End Sub

...und Tschüss Kurt
AW: kommt Fehlermeldung
Luc
Hallo Reinhard,
wollte schon weg sein, aber zur Strafe dafür, das ich das nicht getestet hatte, musste ich das ja jetzt wohl klären. Also nicht die Dimensionalität ist schuld an der Fehlermeldung, sondern, dass es sich um einen Range handelt. Join verarbeitet offensichtlich nur 1dimens. Datenfelder in Variablen (z.B. vom Typ Variant), was ich bisher auch stets getan, hier aber offensichtlich vergessen habe. Also müssen die Inhalte erst mal in eine solche Variable, weshalb du bereich wohl als Variant deklariert hast. Im folgenden geht es dann allerdings nicht ohne eine For- bzw For-Each-Schleife, da hat Kurt recht (s.u.):

Sub ttt()
Dim Bereich() As Variant, Zeile As String, i As Integer, n As Integer, x As Range
n = Range("A1:D1").Cells.Count - 1
ReDim Bereich(n)
For Each x In Range("A1:D1")
Bereich(i) = x.Value
i = i + 1
Next x
Zeile = Join(Bereich, "")
MsgBox Zeile
End Sub

Natürlich kannst du die einzelnen Werte in einer For-Schleife auch direkt miteinander verknüpfen, aber Join() ist schon recht hilfreich, vor allem, wenn man aus solchen Feldern Zeichenketten macht, um sie irgendwo zwischenzuspeichern und später wieder in Felder zurückzuverwandeln.
Mein Hinweis auf den anderen Thread bezog sich in 1.Linie auf die Notation von Zellbezügen. Hier verwendet der Recorder eine Methode, die von der OnLine-Hilfe nicht gerade in den Vordergrund gerückt wird.
Also hat etwas gedauert, meine Frau wird sauer sein, denn ich wollte schon weg sein.
Schönen Abend und tut mir leid (gut dass ich mir das mit dem Besen verkniffen habe).
Luc
PS: hat gedauert, inzwischen war hier wohl einiges los, schau ich gleich mal.
Anzeige
AW: kommt Fehlermeldung
Kurt
hi Luc,
kein problem
ich hab wohl auch ein wenig überreagiert
*shakehandanbiet*
...und Tschüss Kurt
p.s. nächstes mal geht bitte die Frau vor !! (ist sicherer) *grins*
OK, akzept, aber sag ihr's selber (smiling) owT
Luc
AW: kommt Fehlermeldung
Reinhard
Hallo Luc,
dank für deine Ausführlichkeit. Schleifen will ich erstmal vermeiden, ansonsten backe ich sie mir aus euren Anregungen und meinem bescheidenen Wissen schon zusammen.
Mal schauen ob K.Rola noch ein Wunderjoin o.ä. kennt :-)
Habe es noch nicht komplett geschrieben aber versuche jetzt eine Lösung über Datei-Export.
Letzlich geht es ja um die Problematik von
https://www.herber.de/forum/messages/566515.html (Anfragetext siehe unten)
Also wie vergleiche ich A1:I1 mit M1:U1 ohne in einer Schleife erst A1 bis I1 einzulesen usw.
Dadurch kam ich auf Join, was wohl nicht geht :-(
Meine neue Idee mit Dateiexport ist folgende, ich speichere A1:Ix sowie M1:U1 in jeweils einer eigenen Txtdatei ab, mal schauen, wenn möglich mit Leerzeichenspaltentrenner,
dann lese ich sie Satzweise (=ganzer zeilenbereich) in Variablen ein und vergleiche dann diese Variablen.
Mal schauen wie lange das dauert usw. und ob es überhaupt so realisiert werden kann, aber das teste ich nachher oder morgen mal aus.
Gruß
Reinhard
Text: in Tabelle1 habe ich zwei Bereiche: Bereich1="A1:I85" und Bereich2="M1:U13". Ich möchte aus Bereich2 erste Zeile ("M1:U1") in Bereich1 ("A1:I85") suchen und bei Übereinstimmung farblich markieren. Dann aus Bereich2 zweite Zeile ("M2:U2") nehmen und in Bereich1 ("A1: I85") suchen und bei Übereinstimmung farblich markieren und so weiter. In jeder Zeile sind 6 (sechs) unterschiedliche Spalten mit einem x1 bis x9 belegt.
Bereich1 kann bis 55000 Zeilen groß werden.
Bereich2 kann bis 1500 Zeilen groß werden.
Alle meine versuche waren ohne Erfolg. Wer kann mir dabei helfen eine VGA Lösung zu finden?
Anzeige
AW: Join-Befehl
K.Rola
Hallo,
ich hab jetzt nicht alle Antworten gelesen.
Gehts dir darum, die Zeichen zu verketten oder willst du unbedingt join verwenden?
Gruß K.Rola
AW: Join-Befehl
Reinhard
Hallo K.Rola,
lohnt sich nicht wirklich alle Antworten zu lesen, da tobt wohl ein Kleinkrieg :-(
Ja, ich will die Zellen einer Zeile verketten, aber ohne Schleife und mir fiel da nur der Join-Befehl ein bzw auf, jetzt grübel ich halt warum er nicht funktioniert.
Bereich = Array("H", "e", "l", "l", "o")
msgbox Join(Bereich, " ")
klappt ja,
Bereich=[A1:E1]
msgbox Join(Bereich, " ")
leider nicht.
Also wie gesagt, suche eine Lösung , ohne Schleife.
Danke für deine Mühe :-)
Gruß
Reinhard
Anzeige
OT. Nachtrag
Reinhard
Hallo K.Rola,
ich kam auf das Problem bei Anfrage: https://www.herber.de/forum/messages/566515.html
Anfagetext siehe unten.
Ich wollte da ein temporäres Tabellenblatt erstellen, in die dortige Spalte A dann Join(A1:Ix) rein und in Spalte B dann Join(M1:Ux) reinschreiben.
Dann den Vergleich starten und dann im Originalblatt die entsprechenden Zeilen markieren.
Anshcliessend das temporäre Baltt löschen.
Gruß
Reinhard
Text: n Tabelle1 habe ich zwei Bereiche: Bereich1="A1:I85" und Bereich2="M1:U13". Ich möchte aus Bereich2 erste Zeile ("M1:U1") in Bereich1 ("A1:I85") suchen und bei Übereinstimmung farblich markieren. Dann aus Bereich2 zweite Zeile ("M2:U2") nehmen und in Bereich1 ("A1: I85") suchen und bei Übereinstimmung farblich markieren und so weiter. In jeder Zeile sind 6 (sechs) unterschiedliche Spalten mit einem x1 bis x9 belegt.
Bereich1 kann bis 55000 Zeilen groß werden.
Bereich2 kann bis 1500 Zeilen groß werden.
Alle meine versuche waren ohne Erfolg. Wer kann mir dabei helfen eine VGA Lösung zu finden?
Anzeige
AW: Join-Befehl
Kurt
hi,
das ist schön, dass du das als Kleinkrieg bezeichnest wenn man mal ein paar fachliche Argumente austauscht und es dann nicht für nötig empfindest zu antworten
da du ja scheinbar über den Dingen stehst bin ich ab hier raus
...und Tschüss Kurt
Ui, erlitt wohl grad nen Kollateralsachaden :-)
Reinhard
Hallo Kurt,
um Forumsaufblähungen zu drosseln, sehe ich es als sehr korrekt an, wenn ein Frager erst alle reinpurzelnden Antworten auswertet, testet usw und dann eine einzige Rückmeldung mit Feedback für jeden Antworter schreibt.
Gilt natürlich nicht wenn die Antwort direkt beantwortet werden muss um den Fortgang des Threads zu ermöglichen.
Schade für deine Reaktion.
Gruß
Reinhard
Anzeige
AW: Ui, erlitt wohl grad nen Kollateralsachaden :-)
Kurt
pech gehabt ;-)
Solch ein „Kollateralschaden“ gilt nur dann nicht als Kriegsverbrechen, wenn er bei einem Angriff auf ein militärisches Ziel als „Nebenwirkung“ entstanden ist und nicht beabsichtigt war.
*grins*
...und Tschüss Kurt
AW: Join-Befehl
K.Rola
Hallo,
join kann ja nur eindimensionalen Array. Einen solchen kannst du aber nicht auf
einen Rutsch füllen, also irgenwie brauchst du eine Schleife.
Nimmst du ein Variant- Datenfeld, ist es nicht eindimensional.
Gruß K.Rola
Ende - seh ich das richtig...
Luc
...na, das tut mir jetzt aber leid. Hatte bis zu meiner soeben erfolgten Antwort abgeschaltet. Das Problem ist ja wohl jetzt geklärt. Du hast ne Lösung, Reinhard, und weißt außerdem, was man mit Join anfangen kann.
Naja, und das andere, das kommt schon mal vor. Hab auch schon sauer reagiert, wenn ich das Gefühl hatte, jemand wertet meine Arbeit ab (vor allemm, wenn der dann wirklich keine Ahnung hat), aber hier wussten ja alle was, und so muss es sein.
Gute Nacht, dann
Luc
Jepp, beendet, Danke an Alle :-) o.w.T.
Reinhard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige