Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1248to1252
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
Inhaltsverzeichnis

Array in einem Array geht das?

Array in einem Array geht das?
Dirk
Hallo Freunde,
ich habe ein kleines aber hoffendlich lösbares Problem.
In einer Tabelle (länge und breite ariable) muss ich alle daten zellenweise einlesen und verarbeiten.
bierbei will ich jede Spalte in ein Array einlesen.
meine Frage jetzt ist kann man, da ich die anzahl der Spalten ja nicht kenne, ein Array bilden, das die anzahl der Spalten darstellt und in diesem Array ein Array belden, das für die Zeilen (zellen) steht?
Spalte1 zeile1 = arrayspalte(1).arrayzeile(1)
geht sowas?
Gruß
Dirk

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Array in einem Array geht das?
01.02.2012 08:11:51
Harald
Hallo Dirk,
das geht als mehrdimensionales Array. Beispiel:
Sub test()
Dim xxx(10, 10) As Integer
ReDim Preserve xxx(10, 100)
End Sub

In diesem Beispiel:
DIM erstellt eine Matrix von 10*10.
REDIM verändert die Größe auf 10*100
Alles Weitere ist in der Hilfe zu DIM und REDIM eigentlich recht gut erklärt.
Harald
AW: Array in einem Array geht das?
01.02.2012 09:08:13
Dirk
Hoin Harald,
Dank dir erstmal
ich werd das gleich mal versuchen.
Gruß
Dirk
Was mach ich Falsch?
01.02.2012 10:28:41
Dirk
Ich hab hier irgendwo einen Denkfehler drinn.
zur info bei meiner Tabelle handelt es sich um eine Wordtabelle.
da ich die nicht anders eingelesen bekommen habe lese ich jede Zelle einzeln ein und verknüpfe die mit einem #.
im anschluss daran wird mit split das array generiert.
Sub test()
Dim xxx(10, 10) As Integer
'ReDim Preserve xxx(10, 100)
EL = tbel(1, "#")
xxx(1, 1) = Split(EL, "#")
End Sub
Private Function tbel(ByVal s As Integer, ByVal tz As String) As String
Dim er As Boolean
Dim i As Integer
er = False
i = 0
Do While er = False
i = i + 1
On Error GoTo erro
strel = ThisDocument.Tables(1).Cell(i, s)
erro:
If Len(strel) 
kann mir einer Sagen wo der Denkfehler liegt?
Gruß
Dirk
Anzeige
AW: Was mach ich Falsch?
01.02.2012 10:56:29
Rudi
Hallo,
wie sieht denn EL aus?
Wenn du ein Array mit Split aufbaust, musst du vorher nicht die Dimensionen festlegen, bzw. Split erzeugt immer ein eindimensionales Array.
xxx=Split("1#2#3#4#5","#") wird zu Array("1","2","3","4","5")
Gruß
Rudi
AW: Was mach ich Falsch?
01.02.2012 10:59:43
Reinhard
Hallo Dirk,
beachte, beim Array fängt der Index normalerweise bei 0 an.
Schaue dazu in der Hilfe u.a. zu Data base.
Dim xxx(10, 10) erzeugt also 11 * 11 = 121 Elemente.
Ein Ansatz für Word wo der Index bei 1 beginnt:
Sub Tabelle()
Dim Zei As Long, Spa As Long, Tabelle As Table, AnzZeilen As Long
Dim AnzSpalten As Long, tmp As String
Set Tabelle = ActiveDocument.Tables(1)
AnzZeilen = Tabelle.Rows.Count
AnzSpalten = Tabelle.Columns.Count
ReDim x(1 To AnzZeilen, 1 To AnzSpalten) As String
For Zei = 1 To AnzZeilen
For Spa = 1 To AnzSpalten
tmp = Tabelle.Cell(Zei, Spa).Range.Text
x(Zei, Spa) = Left(tmp, Len(tmp) - 2)
Next Spa
Next Zei
MsgBox x(1, 1)
End Sub

Gruß
REinhard
Anzeige
AW: Was mach ich Falsch?
01.02.2012 11:44:00
Dirk
@Reinhand
viel dank
so hab ich das jetzt auch erstmal gelöst.
Ich dachte nur , da ich die Zellen einer Spalte schon in einem Array habe das ich die einfach gleich setzten könnte.
@Rudi Maintaire
genau so nur das halt Text oder Dezimalzahlen verwendet werden
sprich xxx=split("Fe#Cr#Ni#Co#....")
oder halt xxx=split("1,2 vbcrlf 1,1#2,0 vbcrlf 2,1#.......")
bei den Zahlen handet es sich in der regel um 2 Zahlen/Zelle
Gruß
Dirk
Code
01.02.2012 11:48:58
Dirk
so sieht der Code mim aus
Sub richtig()
Dim wert As Variant
Dim i, j As Integer
bl = ls
Dim xxx(5, 30) As Variant
For a = 1 To bl
wert = tbel(a, "#")
wert = Split(wert, "#")
j = UBound(wert)
For b = 1 To j
xxx(a, b) = wert(b)
Next b
Next a
MsgBox (xxx(1, 1))
End Sub
Private Function tbel(ByVal s As Integer, ByVal tz As String) As String
Dim er As Boolean
Dim i As Integer
er = False
i = 0
Do While er = False
i = i + 1
On Error GoTo erro
strel = ThisDocument.Tables(1).Cell(i, s)
erro:
If Len(strel) 
Gruß
Dirk
Anzeige
AW: Was mach ich Falsch?
01.02.2012 16:22:29
Rudi
Hallo,
oder halt xxx=split("1,2 vbcrlf 1,1#2,0 vbcrlf 2,1#.......")
also Zeilentrennung durch vbCrLf?
2x Splitten!
xx=Split(EL,vbCRLF) ergibt
xx(0)=1,2
xx(1)=1,1#2,0
xx(2)=2,1#...
jetzt dieses Array durchgehen und jedes Element splitten
For i=0 to ubound(xx)
xxx=split(xx(i),"#")
'was mit dem Array machen, z.B
Cells(i+1, 1).Resize(, UBound(xxx) + 1) = xxx
next
Gruß
Rudi
AW: Was mach ich Falsch?
01.02.2012 20:13:12
Dirk
Hallo Rudi
xxx=split("1,2 vbcrlf 1,1#2,0 vbcrlf 2,1#.......", "#") heißt es eigendlich.
mit vbcrlf wollte ich nur andeuten, das da ne zeilenschaltung mit eingelesen wurde
ich bin jetz auf den code von Reinhard umgestiegen.
der ist schöner und läuft echt gut
an dieser Stelle auch nochmal DANKE
Gruß
Dirk
Anzeige
AW: Was mach ich Falsch?
01.02.2012 21:14:00
Reinhard
Hallo Dirk,
hier wird die Word-Tabelle als Block eingelesen.
In dem Block sind die Zellen einer Zeile zwischen sich mit Zeichen 9 getrennt.
Die Zeilen sind im Block mit vbCrLf (13 10) getrennt.
Sub DirkinWord()
Dim Daten As New DataObject, Dat, Z As Long, S As Long, anzS As Long
anzS = ThisDocument.Tables(1).Columns.Count
ThisDocument.Tables(1).Range.Copy
Daten.GetFromClipboard
Dat = Split(Replace(Left(Daten.GetText(1), Len(Daten.GetText(1)) - 2), _
Chr(13) & Chr(10), Chr(9)), Chr(9))
Z = 2
S = 3
'Zugriff auf C3 = Cells(2,3) in Excel-Beschriftung der Wordtabelle:
MsgBox Dat((Z - 1) * anzS + (S - 1) Mod anzS)
End Sub

Gruß
Reinhard
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige