Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1588to1592
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
Inhaltsverzeichnis

Array-Namen ändern

Array-Namen ändern
10.11.2017 15:45:17
Jens
Hallo zusammen,
ich habe folgendes Problem: ich muss einen großen Datensatz der in einem Array steht in 96 Unter-Arrays (PLZ-Bezirke in Deutschland) aufteilen, d.h. das Array "Datensatz(1 to Z, 1 to S)" wird aufgeteilt in die Arrays PLZ_01(1 to Z01, 1 to S), PLZ_02(1 to Z02, 1 to S),... PLZ_99(1 to Z99, 1 to S)... da das Ganze möglichst schnell und vom Code her Platz-sparend von statten gehen soll, würde ich gerne den Arraynamen "PLZ_ij()" dynamisieren um nicht eine Select Case mit 96 Fällen aufbauen zu müssen... Geht das irgendwie?
Besten Dank + Gruß
Jens

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array-Namen ändern
10.11.2017 15:56:28
Peter(silie)
Hallo,
hast du code und eine beispielmappe für uns...?
Aufjedenfall kann ich dir jetzt schonmal sagen, dass es wenig
Sinn macht, ein array zu erstellen und dieses dann in 96 weitere zu splitten.
Mache soetwas:
Private Function Column_to_Array(ByRef ofWorksheet As Worksheet, _
ByVal ofColumn As Long, _
ByVal Fast_ As Boolean) As Variant()
Dim rng As Range
Dim lROw As Long: lROw = ofWorksheet.Cells(ofWorksheet.Rows.Count, ofColumn).End(xlUp).Row
Set rng = ofWorksheet.Range(ofWorksheet.Cells(1, ofColumn), ofWorksheet.Cells(lROw,  _
ofColumn))
If Fast_ Then Column_to_Array = rng.Value2 Else Column_to_Array = rng.Value
Set rng = Nothing
End Function
Und übergebe einfach in einer schleife das worksheet, die spaltenzahl und true wenn
die Spalte keine Datums und Währungswerte enthählt, ansonsten false.
Anzeige
AW: Array-Namen ändern
10.11.2017 16:24:51
Luschi
Hallo Jens,
Peter(silie) hat recht, eine Großes Array zu splitten bzw. was dranzuhängen ist selbst in der Dot.Net-Welt (C#, VB.Net) nur mit viel Kramp möglich.
Lege kleine Arrays an und speichre diese in eine Collection. Diese besitzt die '.Add'-Methode
und einen Indexer, hier ein kleines Beispiel:

Sub test1()
Dim col As Collection
Dim arr0, arr1, arr2, arr3
Dim i As Integer, j As Integer
Set col = New Collection
arr1 = Range("B2:F2").Value
col.Add arr1
arr2 = Range("B3:F3").Value
col.Add arr2
arr3 = Range("B4:F4").Value
col.Add arr3
'alle Wwerte ausgeben
For i = 1 To 3
arr0 = col(i)
For j = 1 To UBound(arr0, 2)
Debug.Print arr0(1, j)
Next j
Next i
Erase arr0: Erase arr1
Erase arr2: Erase arr3
Set col = Nothing
End Sub
Gruß von Luschi
aus klein-Paris


Anzeige
AW: Array-Namen ändern
10.11.2017 16:49:21
Jens
Hallo,
der große Datensatz wird aus verschiedenen Tabellen-Blätten zusammengelesen (kommen aus unterschiedlichen Datenbanken, unterschiedlicher Teilunternehmen... --> lokale Bereichsfürsten mit IT-/Datenbanken-Eigengewächsen...)
Mein Code sieht im Moment wie folgt aus (vereinfacht und verkürzt auf 4 statt 96):
Sub splitten()
Dim i as Long
Dim j as Long
Dim Zeilen as Long
Dim Spalten as Long
Dim MatrixSektorPLZ01(1 to Zeilen, 1 to Spalten) as Variant
Dim MatrixSektorPLZ02(1 to Zeilen, 1 to Spalten) as Variant
Dim MatrixSektorPLZ03(1 to Zeilen, 1 to Spalten) as Variant
Dim MatrixSektorPLZ04(1 to Zeilen, 1 to Spalten) as Variant
Zeilen = 10000
Spalten = 11
Dim counter( 1 to 4) as long   'Zähler für Zeile Untermatrix PLZ_xy
For i = 1 to 4
Counter(i ) = 1
Next i
For i = 1 To Zeilen
If i = 1 Then						'Spaltenüberschrift übernehmen
For j = 1 to Spalten		'11 Spalten
MatrixSektorPLZ01(1, j) = MatrixDatensatz(1, j)
MatrixSektorPLZ02 (1, j) = MatrixDatensatz (1, j)
MatrixSektorPLZ03 (1, j) = MatrixDatensatz (1, j)
MatrixSektorPLZ04 (1, j) = MatrixDatensatz (1, j)
Next j
Else
Select Case MatrixDatensatz(i, 4)	'Datensatz nach Spalte 4 (PLZ-Region) aufsplitten in  _
Unterdatensätze
Case 01
For j = 1 To Spalten
MatrixSektorPLZ01(1 + counter(1), j) = MatrixDatensatz (i, j)
Next j
counter(1) = counter(1) + 1
Case 02
For j = 1 To Spalten
MatrixSektorPLZ02 (1 + counter(2), j) = MatrixDatensatz (i, j)
Next j
counter(2) = counter(2) + 1
Case 03
For j = 1 To Spalten
MatrixSektorPLZ03 (1+counter(3), j) = MatrixDatensatz (i, j)
Next j
counter(3) = counter(3) + 1
Case 04
For j = 1 To Spalten
MatrixSektorPLZ04(1 + counter(4), j) = MatrixDatensatz (i, j)
Next j
counter(4) = counter(4) + 1
End Select
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige