Daten in Array einlesen

Bild

Betrifft: Daten in Array einlesen
von: Jochen
Geschrieben am: 21.02.2005 22:45:36
Hallo,
wie kann ich aus 4 verschieden Blättern die Zahlenwerte in einen einzigen Array lesen?
Die Werte stehen immer in Spalte A von A1 bis A?
Danke Jochen

Bild

Betrifft: AW: Daten in Array einlesen
von: Boris
Geschrieben am: 21.02.2005 23:08:46
Hi Jochen,
z.B. in der Art:
Option Explicit

Sub rein_damit()
Dim arr() As Variant
Dim anzahl As Long
Dim i As Long, l As Long, x As Long
For i = 1 To 4
    anzahl = anzahl + WorksheetFunction.CountA(Sheets(i).[a:a])
Next i
ReDim arr(anzahl)
i = 0
For l = 1 To 4
    With Sheets(l)
        For x = 1 To .[a65536].End(xlUp).Row
            If Not IsEmpty(.Cells(x, 1)) Then
                arr(i) = .Cells(x, 1)
                i = i + 1
            End If
        Next x
    End With
Next l
End Sub

Grüße Boris
Bild

Betrifft: AW: Daten in Array einlesen
von: Jochen
Geschrieben am: 21.02.2005 23:29:22
Hi,
im Prinzip klappt das, nur, dass meine Blätter nicht den Index 1 bis 4 haben.
Aufgrund der Struktur kann ich das auch nicht ändern. Die Blätter müßten irgendwie
über ihren Namen angesprochen werden, aber wie?
Kannst du mir nochmal helfen?
Danke Jochen
Bild

Betrifft: AW: Daten in Array einlesen
von: Josef Ehrensberger
Geschrieben am: 21.02.2005 23:22:11
Hallo Jochen!
Z.B so.


      
Sub ArrayMulti()
Dim rng As Range
Dim arr As Variant
Dim tmp As String
Dim wks As Worksheet
Dim lastRow As Long
   
For Each wks In ThisWorkbook.Worksheets
   
   lastRow = IIf(wks.Range(
"A65536") <> "", 65536, _
               wks.Range(
"A65536").End(xlUp).Row)
   
   arr = wks.Range(
"A1:A" & lastRow)
   
   tmp = tmp & Join2(arr, 
";")
   
   
Next
arr = Split(Left(tmp, Len(tmp) - 1), 
";")
End Sub
Function Join2(field As VariantOptional delimit As StringAs String
'zweidimensionales array zu string umwandeln
Dim n As Long, m As Long
Dim temp As String

If delimit = "" Then delimit = " "

   
For n = LBound(field, 2) To UBound(field, 2)
      
For m = LBound(field, 1) To UBound(field, 1)
      
      temp = temp & field(m, n) & delimit
      
      
Next
   
Next
Join2 = temp
End Function 

     Code eingefügt mit Syntaxhighlighter 3.0


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Bild

Betrifft: Oups! nicht aktualisiert;-)) o.T.
von: Josef Ehrensberger
Geschrieben am: 21.02.2005 23:22:56
Gruß Sepp
Bild

Betrifft: AW: Daten in Array einlesen
von: Jochen
Geschrieben am: 21.02.2005 23:45:09
Hi,
danke erstmal. Kann es sein, dass er mir da einen String macht? Ich brauche aber
Zahlen. Kannst du mir da nochmal helfen?
Danke Jochen
Bild

Betrifft: AW: Daten in Array einlesen
von: Josef Ehrensberger
Geschrieben am: 21.02.2005 23:49:25
Hallo Jochen!
Hie eine Variante in der du die Blattnamen angeben kannst!
Das Array ist vom Typ Variant, der inhalt hängt also von den Daten ab!
Wenn Zahlen in deinen Zellen stehen, dann sind auch Zahlen im Array!


      
Option Explicit
Sub ArrayMulti()
Dim rng As Range
Dim arr As Variant
Dim tmp As String
Dim wks As Worksheet
Dim lastRow As Long, n As Integer
Dim SheetArray As Variant
'Hier die Tabellennamen angeben!
SheetArray = Array("Tabelle1""Tabelle2""Tabelle3""Tabelle4")
   
For n = 0 To UBound(SheetArray)
   
   lastRow = IIf(Sheets(SheetArray(n)).Range(
"A65536") <> "", 65536, _
               Sheets(SheetArray(n)).Range(
"A65536").End(xlUp).Row)
   
   arr = Sheets(SheetArray(n)).Range(
"A1:A" & lastRow)
   
   tmp = tmp & Join2(arr, 
";")
   
   
Next
   
'Hier das komplette Array!
arr = Split(Left(tmp, Len(tmp) - 1), ";")
End Sub
Function Join2(field As VariantOptional delimit As StringAs String
'zweidimensionales array zu string umwandeln
Dim n As Long, m As Long
Dim temp As String

If delimit = "" Then delimit = " "

   
For n = LBound(field, 2) To UBound(field, 2)
      
For m = LBound(field, 1) To UBound(field, 1)
      
      temp = temp & field(m, n) & delimit
      
      
Next
   
Next
Join2 = temp
End Function 

     Code eingefügt mit Syntaxhighlighter 3.0



Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Bild

Betrifft: AW: Daten in Array einlesen
von: Jochen
Geschrieben am: 22.02.2005 00:11:44
Hi,
irgenwie macht er aus Zahlen(Format "00000") einen dreistelligen String, so kann
ich das aber nicht verwenden, es müssen Zahlen bleiben.
Weißt du noch weiter?
Danke Jochen
Bild

Betrifft: AW: Daten in Array einlesen
von: Josef Ehrensberger
Geschrieben am: 22.02.2005 00:19:50
Hallo Jochen!
Wenn du Zahlen mit "00000" formatierst, dann gehen die führenden Nullen
natürlich verloren!
00500 ist nunmal 500!
Du kannst doch beim Auslesen des Arrays die Zahlen wieder Formatieren!

Format(arr(x), "00000")


Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Bild

Betrifft: AW: Daten in Array einlesen
von: Jochen
Geschrieben am: 22.02.2005 00:23:17
Hi,
ok, aber es werden Strings übergeben, abgesehen mal vom Format, muss ich die
jetzt auch wieder umwandeln?
Danke Jochen
Bild

Betrifft: AW: Daten in Array einlesen
von: Josef Ehrensberger
Geschrieben am: 22.02.2005 00:27:49
Hallo Jochen!
Wenn die Zahlen vorher mit führenden Nullen Formatiert sind, dann sind
die Zahlen ja keine Zahlen sondern Text!
Probiers doch einfach mal aus!
Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Bild

Betrifft: AW: Daten in Array einlesen
von: Jochen
Geschrieben am: 22.02.2005 00:34:07
Hi,
ja hab ich doch, das Format "00000" ist ein benutzerdefiniertes Zahlenformat,
kein Text.
Danke Jochen
Bild

Betrifft: AW: Daten in Array einlesen
von: Josef Ehrensberger
Geschrieben am: 22.02.2005 00:38:40
Hallo Jochen!
Ich meinte, du sollst mal Probieren die Daten aus dem Array auszulesen und
zu formatieren!
Was willst du mit dem Array den machen?

Gruß Sepp
P.S.: Rückmeldung nicht vergessen!
Bild

Betrifft: AW: Daten in Array einlesen
von: Jochen
Geschrieben am: 22.02.2005 00:49:40
Hi,
letztlich sind die Werte für ein externes Programm, aber soweit bin ich noch nicht,
möchte erstmal diesen teilschritt begreifen.
Wenn ich die Werte in eine Tabelle schreibe, wandelt das excel wohl automatisch um:
For i = LBound(arr) To UBound(arr)
Sheets1.Cells(i + 1, 1) = arr(i)
Next
Aber extern muss ich das wohl so machen:
For i = LBound(arr) To UBound(arr)
Sheets1.Cells(i + 1, 1) = CDbl(arr(i))
Next
Ist das so richtig?
Danke Jochen
Bild

Betrifft: Ja! o.T.
von: Josef Ehrensberger
Geschrieben am: 22.02.2005 00:54:51
Gruß Sepp
Bild

Betrifft: 1000 Dank! oT
von: Jochen
Geschrieben am: 22.02.2005 00:56:32
o
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Daten in Array einlesen"