11.5k Aufrufe
Gefragt in Tabellenkalkulation von
hallo zusammen,
habe folgendes problem:

gibt es eine möglichkeit in vba mehrere zellen in eine variable hintereinander einzulesen und anschließend in der selben reihenfolge auf ein anderes tabellenblatt wieder auszugeben.

ähnlich dem einlesen eines listenfeldes, also nicht für jede variabel eine eigen deklaration.

in etwa so:

sub test()
dim merk as string

merk = range("A1").value und range("A2").value und range("A3").value ...

tabelle("T2").select
range("B1").value = merk??
range("B2").value = merk??
range("B3").value = merk??
...
end sub

wenn möglich für ca. 50 datensätze

geht das?
danke im voraus
rolandaa

5 Antworten

0 Punkte
Beantwortet von marie Experte (2k Punkte)
Sub Array_Beispiel()
Dim Arr()
For x = 1 To 50
ReDim Preserve Arr(x)
Sheets("Tabelle2").Range("B" & x) = Sheets("Tabelle3").Range("A" & x)
Next x
End Sub


ich habe oben den Inhalt von Tabelle 3 Spalte A in Tabelle 2 Spalte B kopiert.

Gruß marie
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi ihr huebschen .-))

dann mal einige beispiele,die spielraum fuer experimente geben

gruss nighty

p.s.
bin noch krank,darum selten present :-(


Sub Suchen()
Dim Azeile As Long, Ezeile As Long, Zaehler1 As Long, Zaehler2 As Long
Dim Lager As Variant
Azeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
Ezeile = ActiveSheet.Cells(Rows.Count, 5).End(xlUp).Row
ReDim ArrA(Azeile, 1) As Variant
ReDim ArrC(Azeile, 1) As Variant
ReDim ArrE(Ezeile, 1) As Variant
ArrA() = Range("A1:A" & Azeile)
ArrC() = Range("C1:C" & Azeile)
ArrE() = Range("E1:E" & Ezeile)
For Zaehler1 = 2 To Ezeile
Lager = Split(ArrE(Zaehler1, 1), "-")
For Zaehler2 = 2 To Azeile
If UCase(RTrim(Lager(0))) = UCase(ArrA(Zaehler2, 1)) Then
ArrC(Zaehler2, 1) = Lager(1)
Exit For
End If
Next Zaehler2
Next Zaehler1
ActiveSheet.Range("C1:C" & Azeile) = ArrC()
End Sub

Sub Seperate()
Dim TbSpAZeile As Long
TbSpAZeile = Cells(Rows.Count, 1).End(xlUp).Row
ReDim TbSpaA(1 To TbSpAZeile, 1 To 1) As Variant
TbSpaA(2, 1) = "Es geht jetzt"
Range("A1:A4").Resize(UBound(TbSpaA())) = TbSpaA()
End Sub

Sub Drehen()
ReDim intArray(3, 1) As Variant
intArray() = Range("A1:C3")
Dim vntArray As Variant
vntArray = Application.Transpose(intArray)
Range("A5:A7") = vntArray
End Sub


beachte in dem zusammenhang noch redim preserv
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi ihr huebschen :-)

hier ein beispiel fuer euch w,as so glaube ich leicht verstaendlich ist :-))

gruss nighty

Option Explicit
Sub MakroFunktioniert()
Dim Wks1SpAZeile As Long 'deklarierung
Wks1SpAZeile = Cells(Rows.Count, 1).End(xlUp).Row 'ermittlung der letzten zeile von spalte a
ReDim TbSpaA(Wks1SpAZeile, 1) As Variant 'deklarierung
TbSpaA() = Range("A1:A" & Wks1SpAZeile) ' araay nimmt angegebene zellen auf
'mache irgendwas mit dem array
Range("A1:A" & Wks1SpAZeile) = TbSpaA() ' array wird zurueckgeschrieben
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi marie :-))

hab dein makro ein wenig veraendert,ohne schleife :-))

gruss nighty

Sub Marie()
Worksheets("Tabelle1").Activate
ReDim TbSpaA(50, 1) As Variant
TbSpaA() = Range("A1:A50")
Worksheets("Tabelle2").Activate
Range("A1:A50") = TbSpaA()
End Sub


bei dieser syntax tritt einer der wenigen faelle ein wo select bzw activate gesetzt werden muss
0 Punkte
Beantwortet von
ja hallo,

da hab ich jetzt einiges zum testen :-)

vielen dank, ich bin überwältigt.

mfg
rolandaa
...