Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

Geniale Textboxauffüllung mit 2 Spalten
#1
Hallo VBA Genies,

beim Stöbern in eurem Forum bin ich auf folgenden Code zur Auffüllung einer Textbox gestoßen:

Code:
TextBox1 = Join(Application.Transpose(Range("A1:A10").Value), vbLf)

Dieser Code ist einfach und super. Das Problem: Ich bräuchte so etwas kurzes und knappes
für 2 Spalten, also A und B. Der Inhalt der Textbox soll dann so aussehen:
Inhalt Zelle A1
Inhalt Zelle B1
Inhalt Zelle A2
Inhalt Zelle B2
usw.
to top
#2
Hallo,

das dürfte nur mit einer Schleife möglich sein.

Man kann die Inhalte erst in einem Aerray sammeln, dann dieses Array auf die gleiche Art in die Textbox schreiben. Da, wo den Code gefunden hast, solltest Du auch den Weg über Arrays finden.
Gruß Atilla
to top
#3
Hallo nochmal,

Auf folgender Seite findest Du einiges zu Feldern und Arrays. Über Join müsste da auch etwas zu finden sein, glaube ich: www.online-excel.de
Gruß Atilla
to top
#4
Hallo,

ich finde es schon grenzwertig, eine TextBox mit einer Spalte zu füllen.
Dafür und erst recht für mehrere Spalten ist eine ListBox die 1. Wahl. ;-)
Zu Arrays guckst Du: Felder - Arrays (1) - Einführung und LBound/UBound

Gruß Uwe
to top
#5
Hallo Uwe,
möchte nochmal nachfragen warum du den Code
Code:
TextBox1 = Join(Application.Transpose(Range("A1:A10").Value), vbLf)

für "grenzwertig" hältst. Schließlich stammt er doch von dir selbst.

vgl. den Thread Steuerung der Anzeige einer Textbox durch Zeilenauswahl.
Was ich suche ist eigentlich nur einen möglichst effizienten Code der mir abwechselnd
die Inhalte aus den Spalten von A1 bis B10 in einer Textbox untereinanderschreibt.
to top
#6
Hallo,

ich hielt nirgendwo meinen Code für grenzwertig.
Und wie Atilla schon schrieb, geht es da nicht ohne Schleifen.
Ich muss aber zugeben, dass ich das mit dem zeilenweisen Anordnen der Spalten überlas.

Code:
Sub MehrereSpaltenZeilenweiseInTextbox()
  Dim i As Long, j As Long
  Dim varQ As Variant, varZ() As Variant
  varQ = Range("A1:B9").Value
  ReDim varZ(1 To UBound(varQ, 1) * UBound(varQ, 2))
  For i = 1 To UBound(varQ, 1)
    For j = 1 To UBound(varQ, 2)
      varZ(i * UBound(varQ, 2) - UBound(varQ, 2) + j) = varQ(i, j)
    Next j
  Next i
  TextBox1 = Join(varZ, vbNewLine)
End Sub

Gruß Uwe
to top
#7
Hallo,

zunächst einmal vielen Dank für den Code. Funktioniert, soweit alles super. Aber ich möchte
die Dinge auch gerne verstehen und frage mich schlicht und einfach wie man diese Codezeile
herleiten könnte.
Code:
varZ(i * UBound(varQ, 2) - UBound(varQ, 2) + j) = varQ(i, j)

Muss man so etwas als Programmierer einfach wissen? Bevor einige Routiniers anfangen zu gähnen,
so trivial finde ich die Umwandlung eines 2 dimensionalen in ein 1 dimensionales Feld nicht.
to top
#8
Hallo,

wenn das zu kompliziert wird, kann man auch einfach eine weitere Variable als normalen Zähler einsetzen.
Das ist vermutlich sogar performanter. Aber mächtig gewaltig sieht die erste Variante schon aus. ;-)

Code:
Sub MehrereSpaltenZeilenweiseInTextbox_2()
  Dim i As Long, j As Long, k As Long
  Dim varQ As Variant, varZ() As Variant
  varQ = Range("A1:B9").Value
  ReDim varZ(1 To UBound(varQ, 1) * UBound(varQ, 2))
  For i = 1 To UBound(varQ, 1)
    For j = 1 To UBound(varQ, 2)
      k = k + 1
      varZ(k) = varQ(i, j)
    Next j
  Next i
  TextBox1 = Join(varZ, vbNewLine)
End Sub

Gruß Uwe
to top
#9
Hallo,

anbei eine ultraleichte Methode der alternierenden Textboxauffüllung aus den Spalten A und B, mittels Verwendung einer leicht abgeänderten arithmetrischen Reihe und des Mod-Operators:

Code:
Sub Textboxauffüllung()
For i = 1 To 20
TextBox1 = TextBox1 & " " & Cells(Int((i + 1) * 0.5), (i - 1) Mod 2 + 1).Value & vbLf
Next i
End Sub

(TextBox1 vorher auf Multiline stellen, nicht vergessen)
[-] Folgende(r) 1 Benutzer sagt Danke an ratrad für diesen Beitrag:
  • SonjaFido
to top
#10
Hallo Leute,

habe gerade mal etwas Code ausprobiert. Dabei ist mir aufgefallen, dass ein spaltenweises Textbox auffüllen
wie beschrieben einwandfrei funktioniert, nicht aber ein zeilenweises. Wieso?

Code:
'Spaltenweise funktioniert:
TextBox1 = Join(Application.Transpose(Range("A1:A10").Value), vbLf)
'Zeilenweise funktioniert nicht:  Wieso? Ist doch eigentlich das Gleiche!
TextBox1 = Join((Range("A1:F1").Value), vbLf)
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste