Join-Befehl

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Join-Befehl von: Reinhard
Geschrieben am: 11.02.2005 18:14:58

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
Bild


Betrifft: AW: Join-Befehl von: Kurt
Geschrieben am: 11.02.2005 18:19:33

hi,
sieh dir mal "union" an
...und Tschüss Kurt


Bild


Betrifft: Danke, aber leider von: Reinhard
Geschrieben am: 11.02.2005 19:08:33

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


Bild


Betrifft: AW: Danke, aber leider - Lösung von: Luc
Geschrieben am: 11.02.2005 19:55:27

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


Bild


Betrifft: AW: Danke, aber leider - Lösung von: Kurt
Geschrieben am: 11.02.2005 20:15:20

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


Bild


Betrifft: @Kurt: mit Verlaub... von: Luc
Geschrieben am: 11.02.2005 20:31:39

Hi, hatte nicht vor, dich zu belehren, sollte bloß Info sein, olle Mimose. Aber wieso ist A1:D1 nicht eindimensional, bloß weil der Vektor senkrecht steht und nicht waagerecht? Ich habe diesen Befehl schon oft genug und in wesentlich komplizierteren Zusammenhängen als diesen eingesetzt. Ich weiß ja nicht, seit wieviel Jahren du VBA-Pgm schreibst oder welche Sprachen du sonst noch so drauf hast, aber da du ja offensichtlich einige meiner Beiträge gelesen hast, bitte... Außerdem solltest du wissen, dass ob einer wann jemandem antwortet rein zufällig ist... ich kann ja grad an einem anderen Thread sein, kann auch als Erster eine Antwort schreiben und bin es doch nicht, weil eine andere Antwort 10 sec eher einging. Also, was soll das... hilft den Fragern doch nicht.

Luc


Bild


Betrifft: AW: @Luc: mit Verlaub... von: Kurt
Geschrieben am: 11.02.2005 20:50:12

hi Luc,
wenn du dann mal wieder zum Thema kommen würdest: nur Leistung überzeugt !
dein Code funktioniert nicht !!
und das mit dem waagerecht und senkrecht würde ich mir noch mal ansehen ;-)
ich warte dann mal auf deine Ideen
...und Tschüss Kurt


Bild


Betrifft: wie du siehst... aber hat etwas gedauert... von: Luc
Geschrieben am: 11.02.2005 21:40:28

...inzwischen ist mir eingefallen, dass ich mich mit diesem dämlichen Unverträglichkeitsproblem schon früher rumgeärgert habe. Habe für solche Zwecke allerdings eigene kleine Function geschrieben, die sowas ähnliches wie Join macht.
Ciao Luc


Bild


Betrifft: kommt Fehlermeldung von: Reinhard
Geschrieben am: 11.02.2005 20:19:15

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


Bild


Betrifft: AW: kommt Fehlermeldung von: Kurt
Geschrieben am: 11.02.2005 20:45:42

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


Bild


Betrifft: AW: kommt Fehlermeldung von: Luc
Geschrieben am: 11.02.2005 21:36:09

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.


Bild


Betrifft: AW: kommt Fehlermeldung von: Kurt
Geschrieben am: 11.02.2005 21:46:11

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*


Bild


Betrifft: OK, akzept, aber sag ihr's selber (smiling) owT von: Luc
Geschrieben am: 11.02.2005 21:51:51




Bild


Betrifft: AW: kommt Fehlermeldung von: Reinhard
Geschrieben am: 11.02.2005 21:56:11

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?


Bild


Betrifft: AW: Join-Befehl von: K.Rola
Geschrieben am: 11.02.2005 21:05:39

Hallo,

ich hab jetzt nicht alle Antworten gelesen.
Gehts dir darum, die Zeichen zu verketten oder willst du unbedingt join verwenden?

Gruß K.Rola


Bild


Betrifft: AW: Join-Befehl von: Reinhard
Geschrieben am: 11.02.2005 21:15:27

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


Bild


Betrifft: OT. Nachtrag von: Reinhard
Geschrieben am: 11.02.2005 21:27:06

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?


Bild


Betrifft: AW: Join-Befehl von: Kurt
Geschrieben am: 11.02.2005 21:32:45

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


Bild


Betrifft: Ui, erlitt wohl grad nen Kollateralsachaden :-) von: Reinhard
Geschrieben am: 11.02.2005 21:38:14

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


Bild


Betrifft: AW: Ui, erlitt wohl grad nen Kollateralsachaden :-) von: Kurt
Geschrieben am: 11.02.2005 21:52:43

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


Bild


Betrifft: AW: Join-Befehl von: K.Rola
Geschrieben am: 11.02.2005 21:51:30

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


Bild


Betrifft: Ende - seh ich das richtig... von: Luc
Geschrieben am: 11.02.2005 21:49:18

...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


Bild


Betrifft: Jepp, beendet, Danke an Alle :-) o.w.T. von: Reinhard
Geschrieben am: 11.02.2005 21:59:04




 Bild

Beiträge aus den Excel-Beispielen zum Thema "aus Adresse die zeile auslesen "