Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

array to range, range to array

Forumthread: array to range, range to array

array to range, range to array
Andi
Hallo,
Opa Helmut auf dem Fahrrad:
For i = 1 To UBound(arr)
Cells(1, i) = arr(i)
Next 'i
Raumschiff Enterprise
Range(Cells(1, 1), Cells(1, UBound(arr))) = arr
Ich favorisiere die Methode Raumschiff Enterprise, aber wenn ein arr Speicherplatz mit 1000 Zeichen belegt worden ist, quittiert VB dies mit der Fehlermeldung '1009'.
Warum kommt diese Fehlermeldung nicht schon ab 255 Zeichen?
Methode
arr = Range
Keine Probleme, bei Zeichenanzahl größer gleich 1000
Range = arr
Stellt ein Problem dar, bei Zeichenanzahl größer gleich 1000
Falsche Initiierung der Objekte kann man ausschließen.
Anstelle
sh.Range(sh.Cells(13, 1), sh.Cells(EFZVUIS(sh, 1) - 1, 12)) = arrMaster()
muß ich die Methode
For i = 1 To UBound(arrMaster)
For n = 1 To UBound(arrMaster(), 2)
sh.Cells(i + 12, n) = arrMaster(i, n)
Next
Next
anwenden. Warum ist das so? Danke.
Gruß Andi
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Limitiationen
21.12.2010 15:58:27
Renee
findest du hier zu Array's, Andi.
Ist mit Zeichenanzahl größer gleich 1000 der Textinhalt oder eine Formel gemeint?
GreetZ Renée
AW: Limitiationen
21.12.2010 16:49:04
Andi
Hi Renée
der Textinhalt ist gemeint.
Das Array ist deklariert Typ variant. Inhalt ist String.
Range 2 Array Methode funktioniert.
Umgekehrt nicht?
Gruß
Andi
Anzeige
AW: array to range, range to array
21.12.2010 16:43:53
Rudi
Hallo,
Wenn man ein Array in Bereiche schreiben will, sollte es 2-dimensional sein.
Das läuft:
Sub ttt()
Dim arr(1 To 2000, 1 To 1), i
For i = 1 To UBound(arr)
arr(i, 1) = String(i, "a")
Next i
Cells(1, 1).Resize(UBound(arr)) = arr
End Sub

allerdings max 1823 Zeichen, jedoch ohne Fehler.
Gruß
Rudi
Anzeige
AW: array to range, range to array
21.12.2010 17:02:04
Andi
Hi Rudi,
durch die Methode
arr = Range
wird das Array automatisch als zweidimensionales Array beschrieben.
Den Ausdruck "Cells.Resize(AnzahlFelder arr) = arr" kenne ich nicht.
1823
Werde ich nachlesen. Danke für den Hinweis.
Gruß Andi
Lösung array to range, range to array
21.12.2010 20:33:27
Andi
Hallo hier anbei die Antwort. :-D
Tatsächlich ein Bug.
Renee, Danke für den Link.
Rudi, der Link deckt sich inhaltlich mit Zeichenanzahl 18...von Dir.
Danke, jetzt weiss ich, dass es nicht an meinem quick and dirty liegt.
Zitat:
Der kuriose Bug mit der Anzahl Zeichen in einem Array
When you run a Microsoft Visual Basic for Applications (VBA) macro to transfer data from a VBA array that contains strings of data to a range of cells in Microsoft Excel 2000 or in Microsoft Excel 2002, the data may be truncated (cut off).
Note
In Microsoft Office Excel 2003, you may receive the following error message when you run the VBA macro in the Visual Basic Editor:
Run-time error '1004':
Application-defined or object-defined errorr
If you run the VBA macro from your Excel worksheet (on the Tools menu, point to Macro and then click Macros), you may receive the following error message:
Microsoft Visual Basic: 400
This problem may occur when the VBA array is longer than 1,823 characters in length.
To work around this problem, populate each cell in your worksheet one at a time from the array, instead of populating the whole range at one time. To do this, use a VBA macro that is similar to the following example:
Sub PopulateRangeWithArray()
Dim x
ReDim x(1 To 2, 1 To 2)
x(1, 1) = String(2000, "a"): x(1, 2) = String(5000, "b")
x(2, 1) = String(17000, "c"): x(2, 2) = String(33000, "d")
MsgBox Len(x(1, 1)) & "," & Len(x(1, 2)) & "," & Len(x(2, 1)) & "," & Len(x(2, 2))
Range("a1").Value = x(1, 1)
Range("b1").Value = x(1, 2)
Range("a2").Value = x(2, 1)
Range("b2").Value = x(2, 2)
End Sub
Weitere Informationen über diesen Bug finden Sie hier:
XL2000/2002/2003: Data May Be Truncated After 1,835 Characters When You Transfer Array Data to Cells in an Excel Worksheet
http://support.microsoft.com/?scid=kb;en-us;832136
Ein interessanter, noch nicht behobener Bug in Microsoft Excel (Stand 22.07.2004).
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Datenübertragung zwischen VBA-Arrays und Excel-Bereichen


Schritt-für-Schritt-Anleitung

Um ein VBA-Array in einen Excel-Bereich zu übertragen, kannst Du folgende Schritte befolgen:

  1. Array erstellen: Definiere ein Array in VBA. Hier ist ein einfaches Beispiel:

    Dim arr(1 To 5) As String
    For i = 1 To 5
       arr(i) = "Wert " & i
    Next i
  2. Daten in den Excel-Bereich schreiben: Verwende die Methode, um das Array in den Excel-Bereich zu übertragen. Du kannst entweder eine Schleife verwenden oder direkt das Array zuweisen:

    ' Methode 1: Mit Schleife
    For i = 1 To UBound(arr)
       Cells(i, 1).Value = arr(i)
    Next i
    
    ' Methode 2: Direktes Zuweisen
    Range(Cells(1, 1), Cells(UBound(arr), 1)).Value = Application.Transpose(arr)

Häufige Fehler und Lösungen

  • VBA Runtime Error 1004: Dies kann auftreten, wenn Du versuchst, ein Array mit mehr als 1.823 Zeichen in einen Bereich zu übertragen. Um dies zu vermeiden, populieren Sie die Zellen einzeln:

    For i = 1 To UBound(arr)
      Cells(i, 1).Value = arr(i)
    Next i
  • Error 400 bei der Ausführung von VBA: Dies passiert häufig, wenn der Array zu groß ist oder wenn die Methode zur Zuweisung nicht korrekt verwendet wird. Achte darauf, dass die Dimensionierung des Arrays korrekt ist.


Alternative Methoden

Es gibt verschiedene Methoden, um ein Array in einen Excel-Bereich zu übertragen:

  1. Array zu Range: Du kannst die Value-Eigenschaft verwenden, um das gesamte Array auf einmal zu übertragen, aber achte auf die Zeichenbegrenzung.

  2. Range in Array: Um einen Bereich in ein Array zu übertragen, benutze:

    Dim myArray As Variant
    myArray = Range("A1:A10").Value
  3. VBA Array von Range: Um ein Array aus einem Bereich zu erstellen, kannst Du folgende Methode verwenden:

    Dim arr As Variant
    arr = Range("A1:B10").Value

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von VBA-Arrays und Excel-Bereichen:

  • Beispiel 1: Array zu Range

    Sub WriteArrayToRange()
       Dim arr(1 To 3) As String
       arr(1) = "Test1"
       arr(2) = "Test2"
       arr(3) = "Test3"
       Range("A1:A3").Value = Application.Transpose(arr)
    End Sub
  • Beispiel 2: Range zu Array

    Sub ReadRangeToArray()
       Dim myArray As Variant
       myArray = Range("A1:A3").Value
       MsgBox myArray(1, 1) ' Gibt den Wert von A1 aus
    End Sub

Tipps für Profis

  • Verwende die Application.Transpose-Funktion, um ein eindimensionales Array in ein zweidimensionales Format zu konvertieren, wenn Du es in einen Excel-Bereich schreibst.
  • Achte darauf, dass Deine Arrays die richtige Dimension haben, um die VBA-Fehlermeldung 1004 zu vermeiden.
  • Nutze die ReDim-Anweisung, um die Größe von Arrays zur Laufzeit anzupassen, wenn Du die Anzahl der Elemente nicht im Voraus kennst.

FAQ: Häufige Fragen

1. Warum bekomme ich einen Runtime Error 1004?
Dieser Fehler kann auftreten, wenn Du versuchst, ein Array, das mehr als 1.823 Zeichen enthält, auf einmal in einen Excel-Bereich zu übertragen. Übertrage die Daten stattdessen einzeln in jede Zelle.

2. Wie kann ich ein Array aus einem Excel-Bereich erstellen?
Du kannst ein Array aus einem Excel-Bereich erstellen, indem Du die Value-Eigenschaft verwendest, wie in folgendem Beispiel:

   Dim arr As Variant
   arr = Range("A1:B10").Value

3. Was ist die maximale Größe eines VBA-Arrays?
Die maximale Größe eines VBA-Arrays hängt von der Version von Excel ab, die Du verwendest. In der Regel liegt die Grenze bei 65.535 Elemente für ein eindimensionales Array. Bei mehrdimensionalen Arrays kann die Anzahl der Elemente variieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige