Microsoft Excel

Herbers Excel/VBA-Archiv

Array dimensionieren | Herbers Excel-Forum


Betrifft: Array dimensionieren von: Sibylle Weber
Geschrieben am: 22.11.2009 11:14:37

Hallo,

VBA erlaubt folgende Dimensionierung von Arrays:

Dim Feld(-5 TO 7) as integer

In welchen Fällen ist dies Art von Dimensionierung sinnvoll oder ist es nur eine Spielerei?

Gruß
Sibylle

  

Betrifft: Untergrenze von Array festlegen von: Uwe Küstner
Geschrieben am: 22.11.2009 11:26:50

Hallo Sibylle,

Schau mal hier: Felder - Arrays (1) - Einführung und LBound/UBound

Gruß Uwe


  

Betrifft: AW: Untergrenze von Array festlegen von: Sibylle Weber
Geschrieben am: 22.11.2009 11:41:59

Hallo Uwe,

ein sehr willkommener Literaturhinweis.
Dennoch bleibt die Frage: Was soll ein negativer Index?
Ich erkenne da keine Anwendungsmöglichkeit.

Gruß
Sibylle


  

Betrifft: Array mit negativen Dimensionen von: Uwe Küstner
Geschrieben am: 22.11.2009 13:13:24

Hallo Sibylle,

die Dimensionen sind halt frei wählbar.
Ich habe noch keine Arrays mit negativen Dimensionen weder gebraucht noch gesehen.

Gruß Uwe


  

Betrifft: AW: Zusatzfrage von: Sibylle Weber
Geschrieben am: 22.11.2009 13:43:52

Hallo Uwe,

... dann bin ich ja beruhigt. Danke für Deinen Beitrag.
Ich hatte diese Dim-Zeile einem Buch entnommen und konnte damit nichts anfangen.

Eine Zusatzfrage: Weshalb einen zweidim. Array und keine 2 eindim Arrays verwenden?
Gibt es dafür wichtige Gründe?

Gruß
Sibylle


  

Betrifft: AW: Zusatzfrage von: Uwe Küstner
Geschrieben am: 22.11.2009 14:30:07

Hallo Sibylle,

das steht auch in dem verlinkten Tutorial nebst den weiterführenden Links.

Aber noch mal kurz:
Zweidimensionale Arrays braucht man, wenn man mit Excelzellen arbeitet.
Eine Zelle wird durch 2 Dimensionen, nämlich Zeile und Spalte, adressiert.
In VBA dann z.B. für Zelle D2 Cells(2, 4). Du siehst, die Cells-Eigenschaft ist auch
ein zweidimensionales Array.

Ein kleines Beispiel.
Die Variable vnArray wird ohne Dimensionen als Variant deklariert.
Durch die Zuweisung der Werte eines Zellbereiches werden die Arraydimensionen automatisch angelegt.
Diese kannst Du im Lokalfenster auch sehen.

Sub ArrayTest()
  Dim vnArray As Variant
  Dim i As Long
  Dim rngBereich As Range
  
  Set rngBereich = ActiveSheet.Range("A1:A5")
  vnArray = rngBereich.Value
  
  Stop  'Code anhalten, weiter mit Taste F5
  
  rngBereich.Offset(0, 3).Value = vnArray
  
  Stop  'Code anhalten, weiter mit Taste F5
  
  For i = 1 To UBound(vnArray)
    vnArray(i, 1) = "vnArray(" & i & ", 1)"
  Next i
  
  Stop  'Code anhalten, weiter mit Taste F5
  
  rngBereich.Value = vnArray

End Sub

Gruß Uwe


  

Betrifft: AW: Danke von: Sibylle Weber
Geschrieben am: 22.11.2009 14:52:39

Hallo Uwe,

vielen Dank für die Beantwortung meiner Zusatzfrage. Ich denke, jetzt ist es klar.
Danke schön.
Gruß
Sibylle


  

Betrifft: AW: Zusatzfrage von: Daniel
Geschrieben am: 22.11.2009 14:38:18

Hi
naja wenn ich nur eindimensionale Arrays verwende, dann brauche ich für jedes Element der 2. Dimension eine eigene Variable.
das ergibt dann folgende Nachteile:
- das können viele werden
- ich kann die 2. Dimension nicht mehr über die Index-Nummer ansprechen, sondern muss immer direkt die entsprechende Variable verwenden. dh ich kann die 2. Dimension nicht mehr berechnen und auch nicht mehr in Schleifen abarbeiten, was u.U. einen erhöhten Programmieraufwand bedeutet.

Gurß, Daniel


  

Betrifft: AW:Danke von: Sibylle Weber
Geschrieben am: 22.11.2009 14:51:04

Hallo Daniel,

ok, verstanden.
Danke schön.
Gruß
Sibylle