Anzeige
Archiv - Navigation
628to632
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
628to632
628to632
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Handling von Arrays

Handling von Arrays
30.06.2005 11:10:18
Arrays
Hallo!
Ich habs im Moment bißchen mit Arrays, da ich in Excel eine Fließlinie simulieren muß.
Die Arrays (variant) werden direkt vom Sheet gelesen z.B.: arrArray()=Range("A1:J2"), was ein zweizeiliges und 10-spaltiges Array ergäbe.
Fragen:
- Kann ich dem Array _am Anfang_ eine Spalte hinzufügen (derzeitig helfe ich mir, in dem ich REDIM mache, was eine Spalte am Ende ergibt, und die Werte dann in einer Schleife eins nach rechts kopiere).
- Könnte man ohne Schleife beide Zeilen des Arrays zu einer verbinden?
- Kann man schnell (ohne Schleife) ganze Zeilen des Arrays in eine (String-)Variable legen?
Für ein VBA-Array-Tutorial im Web wäre ich auch megadankbar!
Gruß
Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Handling von Arrays
30.06.2005 11:59:56
Arrays
Hi Peter,
wenn ich Dich richtig verstehe möchtest Du ein dynamisches Array erstellen. Also ein Array, bei dem die Anzahl der aufzunehmenden Elemente vorher nicht absehbar ist. In diesem Fall ist die ReDim Anweisung absolut korrekt. Ob Du allerdings ein 9-dimensionales Array (10 Spalten) meinst, das bezweifle ich. Das Handling wäre zudem äusserst aufwendig. Ich empfehle Dir deshalb ein Array mit einem benutzerdefiniertem Datentyp. Bsp. für Typerstellung und Arraydeklaration:
*****************************************
Type Personaldaten
VName As String
FName As String
Anschrift As String
...
...
End Type
Dim arrPersonen() As Personaldaten
***************************************************
Um die Schleife beim Füllen wirst du wohl kaum herumkommen. Nehmen wir einmal an, Deine Daten befinden sich im Bereich A1:J2 (ohne Spaltenüberschrift, also gleich die puren Daten) In Spalte A 'Max', Spalte B 'Mustermann' usw. Du könntest es dann so füllen lassen:
******************************************
Sub Einlesen()
Dim Wert, Bereich$, Spaltenzaehler%, Zeihlenzaehler%
Bereich = "A1:J2"
For Each Wert In Range(Bereich).cells
Redim Preserve arrPersonen(Spaltenzaehler)
Select Case Spaltenzaehler
case 0 : arrPersonen(zeilenzaehler ).VName = Wert : spaltenzaehler = spaltenzaehler + 1
case 1 : arrpersonen(zeilenzaehler ).FName = wert : spaltenzaehler = spaltenzaehler + 1
case 2 : arrPersonen(zeilenzaehler ).Anschrift = wert : spaltenzaehler = spaltenzaehler + 1
....
....
case 9 : arrpersonen(Spaltenzähler).Telefon = wert : zeilenzaehler = zeilenzaehler + 1 : spaltenzaehler = 0
End select
next
*************************************************************
Auslesen könntest Du dann in etwa so:
*****************************************************
msgbox arrPersonen(1).VName & ", " & arrpersonen(1).FName
*********************************************************
Ich hoffe, ich konnte Dir helfen.
Ciao, Ralf
Anzeige
AW: Handling von Arrays
30.06.2005 12:05:53
Arrays
Sorry Peter,
die Redim-Anweisung muß richtig heißen:
Redim Preserve arrPersonen(Zeilenzaehler)
nicht Spaltenzaehler!!!
Ciao, Ralf
AW: Handling von Arrays
30.06.2005 13:15:41
Arrays
Hallo Ralf,
um die Schleife beim Füllen bin ich schon rum ;-) ... das Einlesen (und auch Ausgeben) geht tatsächlich, wie ich schon geschrieben habe so:
arrArray()=Range("A1:J2")
Ausgabe in den gleichen Bereich einfach umgekehrt mit:
Range("A1:J2")=arrArray()
Das Ganze ist rasend schnell, kein Vergleich mit der Schleifentechnik - daher nutze ich es auch!
Das Array, welches entsteht hat in arrArray(1,n) die erste Zeile der Range und in arrArray(2,n) die zweite Zeile.
Daher meine Interpretation von zwei Zeilen und 10 Spalten - ist das falsch?
Gruß
Peter
Anzeige
AW: Handling von Arrays
30.06.2005 14:46:08
Arrays
Hi Peter,
wirklich hochinteressant! Ich hab es ausprobiert und es funktioniert erstaunlicherweise. Sogar das Auslesen einzelner Elemente.
Habe einige Varianten ausprobiert um eine Lösung Deines Problems zu finden, bisher allerdings erfolglos.
Vorerst würde ich empfehlen mehrere Arrays mit dieser Technik zu verwenden. Solltest Du eine bessere Lösung finden, ich würde mich freuen diese kennenzulernen!
Ciao, Ralf
AW: Handling von Arrays
30.06.2005 20:14:02
Arrays
Hallo
das offene Problem ist wohl noch "- Kann ich dem Array _am Anfang_ eine Spalte hinzufügen (derzeitig helfe ich mir, in dem ich REDIM mache, was eine Spalte am Ende ergibt, und die Werte dann in einer Schleife eins nach rechts kopiere)."
Meinst Du damit, daß Du ein Array(2+x,n) brauchst, was aber nicht geht, weil Du mit Redim nur die letzte Dimension ändern kannst?
Das würde so gehen:

Option Explicit
Option Base 1
Private Sub CommandButton1_Click()
Dim Arr()
Dim TmpArr()
Dim x%
ReDim Arr(1, 4)
'Arr ist nun ein 2D- Array mit 1 "Zeile" und 4 "Spalten"
'1. Dimension um x erweiten, geht mit ReDim nicht
x = 1
TmpArr = Application.WorksheetFunction.Transpose(Arr)
'TmpArr hat nun 4 Zeilen und 1 Spalte
Erase Arr
'Arr löschen...
ReDim Preserve TmpArr(UBound(TmpArr, 1), UBound(TmpArr, 2) + x)
'...und TmpArr mit zusätzlichen x Spalten(Zeilen) neu Dimensionieren
Arr = Application.WorksheetFunction.Transpose(TmpArr)
'Arr hat nun 1+x Zeilen und 4 Spalten
End Sub

Gruß- Micha
PS: http://www.online-excel.de/fom/fo_read.php?f=1&bzh=773&h=773
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige