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

Forumthread: VBA-Array mit einem mal in Tabelle schreiben

VBA-Array mit einem mal in Tabelle schreiben
31.05.2004 14:09:18
Lupus
Hallo Excel-User,
wie kann man ein zweidimensionales Array gezielt mit einem mal in ein Tabellenblatt schreiben?
Das Array (Array(10,5)) soll auf Tabelle1 in Zelle A10 anfangen.
Gruß Lupus
Anzeige
AW: VBA-Array mit einem mal in Tabelle schreiben
NE
Hi Lupus,
unprobiert:
range(cells(10,1),cells(20,5)) ? ;;-))
Kenne aber lbound nicht, wenn der 0 dann immer eins zuaddieren
lg Nancy
AW: VBA-Array mit einem mal in Tabelle schreiben
31.05.2004 14:21:24
Josef
Hallo Wolf?
Sheets("Tabelle1").Range("A10:E19") = myArr
wenn die Dimensionen des Arrays gleichbleiben,
sonst halt mit variablem Bereich.
Gruß Sepp
Anzeige
AW: VBA-Array in Spreadsheet schreiben
Lupus
Hallo Nacy und Josef,
danke, der Code von Josef klappt einwandwfrei.
Nun habe ich versucht den Code auf ein USerform-Spreadsheet zu übertragen fünktioniert aber leider nicht.
1. Array in Tabellenblatt einfügen (funktioniert):
Workbooks.Add
Sheets(1).Range(Cells(10, 1), Cells(Variable+ 1, 5)) = Array
2. Array in ein USerform-Spreadsheet einfügen (funktioniert nicht):
Spreadsheet1.ActiveSheet.Range(Cells(10, 1), Cells(Variable + 1, 5)) = Array
Was ist an dem Code falsch?
Gruß Lupus
Anzeige
AW: VBA-Array in Spreadsheet schreiben
31.05.2004 14:54:12
Josef
Hallo Lupus!
So geht's!

Private Sub CommandButton1_Click()
Dim myArr As Variant
Dim myRow As Long
Dim myCol As Integer
myRow = 10 'Startzeile
myCol = 1 'Startspalte
myArr = Sheets("Tabelle3").Range("A1:E100") 'Array füllen
'Array zurückschreiben
With UserForm1.Spreadsheet1
.Range(.Cells(myRow, myCol), _
.Cells(myRow + UBound(myArr, 1) - 1, myCol + UBound(myArr, 2) - 1)) = myArr
End With
End Sub

Gruß Sepp
Anzeige
AW: VBA-Array in Spreadsheet schreiben, klappt
Lupus
Hallo Josef,
daaaanke, ja jetzt klappt's.
Statt
Spreadsheet1.ActiveSheet.Range(Cells(10, 1), Cells(Variable + 1, 5)) = Array
habe ich
With Spreadsheet1
.Range(.Cells(10, 1), .Cells(Variable + 1, 5)) = Array
End With
eingesetzt. Mir ist nur nicht klar warum vor .Cells noch mal das Spreadsheet1 aufgeführt werden muß.
Gruß Lupus
p.s.: Ist ja mal wieder ein interessanter thread geworden.
Anzeige
AW: VBA-Array mit einem mal in Tabelle schreiben
kdosi
Option Explicit
Sub PrintArray() Dim arr(1 To 10, 1 To 5) Dim row, col On Error GoTo ErrH ' array mit werten fuellen For row = 1 To UBound(arr, 1) For col = 1 To UBound(arr, 2) arr(row, col) = CStr(row & "," & col) Next col Next row ' array in den sheet schreiben Dim row_start, col_start row_start = 9 col_start = 0 For row = 1 To UBound(arr, 1) For col = 1 To UBound(arr, 2) Cells(row + row_start, col + col_start) = arr(row, col) Next col Next row Exit Sub ErrH: MsgBox Err.Description & ", " & Err.Number, vbCritical, "Fehler" End Sub
Anzeige
AW: VBA-Array mit einem mal in Tabelle schreiben
Lupus
Hallo kdosi,
danke für den Code; aber zellweise wollte ich ja gerade nicht die Tabelle füllen.
Mein Array ist viel größer als in meiner Frage vorgegeben. Ich wollte halt nur das Prinzip wissen wie man ein Array mit einem mal in die Tabelle setzen kann, dies geht viiiiel schneller als über eine For-Schleife.
Gruß Lupus
Anzeige
AW: VBA-Array mit einem mal in Tabelle schreiben
31.05.2004 14:44:12
Josef
Hallo Lupus!
Deshalb habe ich ja geschrieben, "sonst mit variablem Bereich" !

Sub meinArray()
Dim myArr As Variant
Dim myRow As Long
Dim myCol As Integer
myRow = 10 'Startzeile
myCol = 1 'Startspalte
myArr = Sheets("Tabelle3").Range("A1:E100") 'Array füllen
'Array zurückschreiben
With Sheets("Tabelle1")
.Range(.Cells(myRow, myCol), _
.Cells(myRow + UBound(myArr, 1) - 1, myCol + UBound(myArr, 2) - 1)) = myArr
End With
End Sub

Gruß Sepp
Anzeige
AW: VBA-Array mit einem mal in Tabelle schreiben
Ulf
Der Zellbereich muss nur die gleichen Dimensionen haben ansonsten werden
die Werte einfach abgeschnitten oder mit #NV gefüllt.
Range("A10:E19")= deinArray
Ulf
Mach ich da was falsch....
Ramses
Hallo Ulf,
... oder spinnt E2003 da.
Ich kann auf jeden Fall keine eurer Varianten verwenden
Sub test() Dim myArr() As Variant Dim i ReDim myArr(10) For i = 1 To 10 myArr(i - 1) = i Next i 'Direkt Schreiben in Zelle Cells(1, 1) = myArr() 'Direkt Schreiben in Bereich Range(Cells(1, 2), Cells(10, 2)) = myArr 'Schleifenschreiben For i = 1 To 10 Cells(i, 3) = myArr(i - 1) Next i End Sub
Gruss Rainer
Anzeige
AW: Mach ich da was falsch....
31.05.2004 15:02:31
Josef
Hallo Rainer!
Das liegt daran, das du ein eindimensionales Array verwendest
und daher immer nur den ersten Wert in jede Zeile schreibst!
Wenn du den Range als Zeile angibst
Range(Cells(1, 1), Cells(1, 10)) = myArr
dann gehts!
Gruß Sepp
AW: Mach ich da was falsch....
Ramses
Hall Sepp,
also das schreiben in eine Spalte geht nicht ?
Ist doch doof,.. oder ?
Im zweiten Beispiel gebe ich ja den Range an, allerdings in einer Spalte
Range(Cells(1, 2), Cells(10, 2)) = myArr
... das müsste doch auch gehen. Tut aber nicht.
Tabelle1
 ABC
1111
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19
10 110
 
Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Was ist hier falsch ?
Gruss Rainer
Anzeige
AW: Mach ich da was falsch....
31.05.2004 15:18:59
Josef
Hallo Rainer!
Klingt blöd, ist aber so;-)
Wenn du ein zweidimensionales Array nimmst
und dann auch einen zweispaltigen Bereich angibst,
dann klappt's.

Sub rainer()
Dim myArr() As Variant
Dim i
ReDim myArr(10, 1)
For i = 1 To 10
myArr(i - 1, 1) = i
Next i
'Direkt Schreiben in Bereich
Range(Cells(1, 1), Cells(10, 2)) = myArr
End Sub

Also verlangt ein mehrdimensionaler Bereich ein mehrdimensionales Array.
Gruß Sepp
Anzeige
Nun gut, wieder eine Limitierung entdeckt :-) o.T.
Ramses
...
AW: Mach ich da was falsch....
Ramses
Hallo Nancy
"...wieso, geht doch super :-)..."
Kannst du mir dann das erklären ? :-(
Tabelle1
 ABC
1111
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19
10 110
 
Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Gruss Rainer
Anzeige
AW: Mach ich da was falsch....
NE
Hi Rainer,
denne eben so ;-)
Sub test() Dim myArr(10, 0) Dim i For i = 1 To 10 myArr(i - 1, 0) = i Next i 'Direkt Schreiben in Bereich Range(Cells(1, 2), Cells(10, 2)) = myArr End Sub
lg Nancy
--
ps: hab die andren Antworten noch nich gelesen, kann doppelt sein ;-)
war doppelt sh. Sepp ;;-)) o.T
NE
;-)
Anzeige
Macht nix :-) Trotzdem danke o.T.
Ramses
...
AW: Macht nix :-) Trotzdem danke o.T.
31.05.2004 16:46:58
Nepumuk
Hallo Ihr,
natürlich geht das auch mit eindimensionalen Feldern.
Beispiel:


Public Sub Arraytest()
    Dim intArray(1 To 10) As Integer, intIndex As Integer
    For intIndex = 1 To 10
        intArray(intIndex) = intIndex
    Next
    Worksheets(1).Range("A1:J1").Value = intArray
    Worksheets(1).Range("A1:A10").Value = WorksheetFunction.Transpose(intArray)
End Sub


Gruß
Nepumuk
Anzeige
AW: Macht nix :-) Trotzdem danke o.T.
Ramses
Hallo Nepumuk
Danke für die Info.
aber eine vernünftige Erklärung warum es nicht direkt geht, hast du auch nicht,... oder ?
Es ist ja schon irgendwie unlogisch ein zweidimensionales Array direkt schreiben zu können, aber ein eindimensionales nur über den Umweg "Transpose"
Gruss Rainer
Anzeige
AW: Macht nix :-) Trotzdem danke o.T.
31.05.2004 17:23:59
Nepumuk
Hallo Rainer,
wenn du eine Spalte in einen Variant einliest, dann entsteht ein Array mit einer Spalte und 65.536 Zeilen. Adressbereich 1, 1 bis 65.536, 1 . Wenn du eine Zeile einliest, ein Array mit einer Zeile und 256 Spalten. Adressbereich 1, 1 bis 1, 256 . Wenn du eine ganze Tabelle nimmst, dann eben von 1, 1 bis 65.536, 256 . Die Ausdehnung eines eindimensionale Array geht nach rechts. Darum kann es nur in eine Zeile direkt übertragen werden. Die Dimensionierung (1 to 65536, 1 to 1) erzeugt nur ein quasizweidimensionales Array. Aber in welche Richtung sich dieses ausdehnt kann dadurch bestimmt werden.
Jetzt klarer?
Gruß
Nepumuk
Anzeige
AW: Macht nix :-) Trotzdem danke o.T.
NE
Nepumuk, Nepumuk,
ich glaub' das hab' ich nun in alle Ewigkeit begriffen, Danke :-)
Trotzdem noch die Frage, die im Link bislang unbeantwortet,
Why doesnt this one works?

Sub CopyTest()
Dim b(3) As Single
b(0) = 100: b(1) = 200: b(2) = 300: b(3) = 100
ActiveSheet.Shapes.AddLine b
End Sub

IMHO sollte sowas denne doch auch gehen ...
Guats Nächtle @all
NE
Anzeige
AW: Macht nix :-) Trotzdem danke o.T.
31.05.2004 22:38:19
Nepumuk
Hallo Nancy,
das kann nicht gehen. AddLine ruft eine Funktion in einer DLL auf. Die Anzahl und Art der Ubergabevariablen steht fest. Das sind vier Variant-Variablen. Denen kannst du doch nicht einfach ein Array übergeben. Das ist ja, wie wenn du vier Kindern EIN Eis gibst.
Gruß
Nepumuk
Anzeige
abschliessend, okay simply thx
NE
Abend Nepumuk,
na hoookay, oalls clear :-)
dachte ja nur so eben, weil woanders (nicht unter xl) geht sowas,
hier aber eben nun wiewohl nicht, guddi war wohl denne ein Trugschluss
ich hau' wohl auch ab' & an was durcheinander, hatte echt dran geglaubt,
dass sowas in der Art funktionieren müsste, na gut, geht nich ...
und wieder was gelernt ...
Nachti NE und thx a lot [wie immer] :-)
Anzeige
Nun isses klar. Danke :-)) o.T.
Ramses
...
AW: Mach ich da was falsch....
Ulf
Ein eindimensionels Array kann nur einem horizontalen Zellgereich
zugeordnet werden.
Ulf
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA-Array effizient in Excel-Tabelle schreiben


Schritt-für-Schritt-Anleitung

Um ein VBA-Array in eine Tabelle zu schreiben, kannst du den folgenden Schritt-für-Schritt-Ansatz verwenden:

  1. Array definieren: Zuerst musst du das Array definieren und mit Werten füllen. Du kannst dies mithilfe einer Schleife oder direkt aus einem Bereich einer Tabelle tun.

    Dim myArr As Variant
    myArr = Sheets("Tabelle3").Range("A1:E100") ' Array füllen
  2. Zielbereich bestimmen: Definiere den Zielbereich in der Tabelle, in den die Werte geschrieben werden sollen. Stelle sicher, dass die Dimensionen des Arrays und des Zielbereichs übereinstimmen.

    Dim myRow As Long
    Dim myCol As Integer
    myRow = 10 ' Startzeile
    myCol = 1  ' Startspalte
  3. Array in die Tabelle schreiben: Verwende den folgenden Code, um das Array in das Tabellenblatt zu übertragen.

    With Sheets("Tabelle1")
        .Range(.Cells(myRow, myCol), _
               .Cells(myRow + UBound(myArr, 1) - 1, myCol + UBound(myArr, 2) - 1)) = myArr
    End With

Häufige Fehler und Lösungen

  • Fehler: Bereichsdimensionen stimmen nicht überein
    Wenn die Dimensionen des Arrays nicht mit dem Zielbereich übereinstimmen, erhältst du möglicherweise Fehler oder unerwartete Ergebnisse (z.B. #NV). Stelle sicher, dass der Zielbereich die gleiche Größe wie das Array hat.

  • Fehler: UBound-Funktion nicht erkannt
    Achte darauf, dass du die UBound-Funktion korrekt verwendest, um die oberen Grenzen des Arrays zu bestimmen. Wenn das Array leer ist, kann dies einen Fehler verursachen.

  • Falsches Arbeitsblatt oder falscher Bereich
    Überprüfe, ob du das richtige Arbeitsblatt angibst, wenn du ein VBA-Array in die Tabelle schreibst. Ein Tippfehler im Blattnamen führt zu Laufzeitfehlern.


Alternative Methoden

  • Direktes Schreiben in Zellen: Du kannst auch ein eindimensionales Array direkt in Zellen schreiben, indem du eine Schleife verwendest, aber das ist weniger effizient:

    Dim i As Long
    For i = LBound(myArr) To UBound(myArr)
        Cells(i + 1, 1) = myArr(i)
    Next i
  • Transponieren von eindimensionalen Arrays: Wenn du ein eindimensionales Array in eine Spalte schreiben möchtest, kannst du die WorksheetFunction.Transpose-Methode verwenden.


Praktische Beispiele

  1. Füllen eines mehrdimensionalen Arrays: Hier ist ein Beispiel, wie du ein mehrdimensionales Array füllen und in ein Arbeitsblatt schreiben kannst:

    Dim arr(1 To 10, 1 To 5) As Variant
    Dim row As Long, col As Long
    
    For row = 1 To 10
        For col = 1 To 5
            arr(row, col) = row & "," & col
        Next col
    Next row
    
    Sheets("Tabelle1").Range("A1:E10") = arr
  2. Eindimensionales Array in eine Spalte übergeben:

    Dim myArr(1 To 10) As Integer
    Dim i As Long
    
    For i = 1 To 10
        myArr(i) = i
    Next i
    
    Range(Cells(1, 1), Cells(10, 1)) = Application.Transpose(myArr)

Tipps für Profis

  • Verwendung von Variant: Wenn du mit Arrays arbeitest, verwende den Datentyp Variant, um die Flexibilität zu erhöhen. Das erleichtert das Füllen von Arrays mit unterschiedlichen Daten.

  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinem Code, insbesondere wenn du mit Arrays arbeitest. Nutze On Error GoTo für eine saubere Fehlerbehandlung.

  • Dynamische Arrays: Du kannst Arrays dynamisch mit ReDim erstellen, um die Größe zur Laufzeit zu ändern.


FAQ: Häufige Fragen

1. Wie kann ich ein eindimensionales Array in eine vertikale Spalte schreiben?
Verwende die Transpose-Funktion, um das eindimensionale Array in eine Spalte zu übertragen.

2. Was ist der Unterschied zwischen eindimensionalen und mehrdimensionalen Arrays?
Eindimensionale Arrays sind eine einfache Liste von Werten, während mehrdimensionale Arrays eine Tabelle oder Matrix von Werten darstellen. Sie sind nützlich, wenn du mit Daten in mehreren Dimensionen arbeiten musst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige