Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1700to1704
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

Umwandlung 1Dim. Variant in 2Dim Array

Umwandlung 1Dim. Variant in 2Dim Array
08.07.2019 14:05:09
Peter
Hallo Zusammen,
ich habe folgenden Eintrag hier gefunden:
https://www.herber.de/forum/archiv/1472to1476/1475838_Zeilen_in_Array_loeschen.html
und darin diesen Beispielcode:
Sub Test124()
Const adQBer$ = "A1:F30", tiQWb$ = "xyz", tiQWs$ = "xyz"
Dim iz As Long, zz As Long, arQDat, avZDat, _
qBer As Range, xZ As Range, wf As WorksheetFunction
Set wf = WorksheetFunction
Set qBer = Workbooks(tiWb).Sheets(tiWs).Range(adQBer)
'    Set qBer = ActiveSheet.Range(adQBer)
zz = qBer.Rows.Count - wf.CountBlank(qBer.Columns(1))
ReDim arQDat(zz - 1)
For Each xZ In qBer.Rows
If Not IsEmpty(xZ.Cells(1)) Then _
arQDat(iz) = xZ: iz = iz + 1
Next xZ
avZDat = wf.Transpose(wf.Transpose(arQDat))
'    ActiveWindow.RangeSelection.Resize(UBound(avZDat, 1), _
'        UBound(avZDat, 2)) = avZDat
Set qBer = Nothing: Set wf = Nothing
arQDat = Empty: avZDat = Empty
End Sub

Ich habe dieses Beispiel ausprobiert.
Das einlesen funktioniert.
Aber beim Umwandeln avZDat = wf.Transpose(wf.Transpose(arQDat))
kommt die Fehlermeldung Laufzeitfehler 9
Wenn ich dann beim debugen hier drauf gehe:
arQDat(iz)
zeigt es Index außerhalb des gültigen Bereichs an und hier
If Not IsEmpty(xZ.Cells(1)) Then
bei xZ zeigt es an Objektvariable oder With-Blockvariable nicht festgelegt.
Hat mir bitte jemand eine Erklärung für die Fehlermeldung?
Vielen Dank schonmal im Voraus für eure Unterstützung
LG Peter

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: nur bis zur 1. Frage
08.07.2019 14:49:59
Fennek
Hallo,

Set qBer = Workbooks(tiWb).Sheets(tiWs).Range(adQBer)
Da "adQBer" zwar dimensioniert ist, aber keinen Wert zugewiesen hat, wird qBer leer, besser "nothing" sein.
Auch wenn der Code nicht zur Frage passt, um aus einem 1-dim Array eine 2-dim Array zu machen:

neu2dim = Redim preserve Alt1dim(ubound(Alt1dim,0))
mfg
AW: Umwandlung 1Dim. Variant in 2Dim Array
08.07.2019 15:12:20
Rudi
Hallo,
     Set qBer = Workbooks(tiWb).Sheets(tiWs).Range(adQBer)

tiWs und tiWs sind jeweils ="".
Die Konstanten sind als tiQWb$ und tiQWs$ definiert.
Das kommt davon, wenn man Option Explicit nicht benutzt.
Gruß
Rudi
Anzeige
AW: Umwandlung 1Dim. Variant in 2Dim Array
08.07.2019 15:19:19
Peter
Hallo Zusammen,
entschuldigt mein Fehler das noch dazu zu schreiben.
Ich verweise auf ein Range mit
Set qBer = Sheets(1).Range("A17:G400")
Und wie schon geschrieben, dass einlesen hat funktioniert. arQDat ist mit Daten gefüllt.
LG Peter
AW: Umwandlung 1Dim. Variant in 2Dim Array
08.07.2019 17:47:54
Peter
Ich glaube ich habe den "Fehler"
Ich bin über ein Bericht gestolpert, in dem beschrieben wird, dass Transpose nur für eine bestimmte Datenmenge geht. Heißt, habe ich nur ein kleines Array funktioniert es, bin ich mit der Menge darüber, geht es nicht mehr.
Wie wandle ich das eindimensionale in ein mehrdimensionales Array ohne diese Funktion um?
LG Peter
Anzeige
AW: Umwandlung 1Dim. Variant in 2Dim Array
08.07.2019 18:02:19
Daniel
HI
wenn du über der für Worksheetfunction.Transpose zulässigen Datenmenge bist, geht nur folgendes:
Dimensioniere dir das 2-D-array in passender Größe und übertrage die Daten einzeln per schleife:
redim arr2D(Lbound(arr1D) to Ubound(arr1D), 1 to 1)
for i = Lbound(arr1D) to Ubound(arr1D)
arr2D(i, 1) = arr1D(i)
Next
Das verarbeitet nicht nur größere Datenmengen als Transpose, sondern ist auch wesentlich schneller (zumindest bis Excel 2010, ab Excel 2013 hat sich hier was getan)
Gruß Daniel
AW: Umwandlung 1Dim. Variant in 2Dim Array
08.07.2019 19:07:16
snb
Einfach so:
Sub M_snb()
sn = Split(String(14000, "|"), "|")
MsgBox "ubound(sn): " & vbTab & UBound(sn)
With CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}") '  - Microsoft Forms 2.0  _
ListBox
.List = sn
sp = .List
End With
MsgBox "ubound(sp): " & vbTab & UBound(sp) & vbLf & "ubound(sp,2): " & vbTab & UBound(sp, 2) _
End Sub

Anzeige
AW: Umwandlung 1Dim. Variant in 2Dim Array
08.07.2019 19:15:25
snb
Alternative:
Sub M_snb()
ReDim sn(14000)
sp = Application.Index(sn, [row(1:14000)], 0)
MsgBox "ubound(sp): " & vbTab & UBound(sp) & vbLf & "ubound(sp,2): " & vbTab & UBound(sp, 2)
End Sub

AW: Umwandlung 1Dim. Variant in 2Dim Array
08.07.2019 21:15:59
snb
Alternative:
Sub M_snb()
ReDim sn(14000)
sp = Application.Index(sn, [row(1:14000)], 0)
MsgBox "ubound(sp): " & vbTab & UBound(sp) & vbLf & "ubound(sp,2): " & vbTab & UBound(sp, 2)
End Sub

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige