Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
432to436
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
432to436
432to436
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
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
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
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.
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
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
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
Anzeige
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
;-)
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
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
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
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
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] :-)
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

100 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige