Hallo liebe Gemeinde.
Ich stecke im Treibsand, und je mehr ich tu und mach, umso mehr versinke ich.
Das ich so nebenbei den Wald vor lauter Bäume nicht mehr sehe kommt auch noch dazu.
Ich qäule mich nun seit mittlerweile 4 Tagen mit folgendem Problem herum.
Eins vorweg: Beispieldatei ist im Anhang.
Beispielsweise lese ich aus einem Tabellenblatt den Bereich A1 bis B69 in ein Array ein, Spalte A = Datum und Spaltze B = Namen. Okay, kein Problem.
Den eingelesenen "Datenbereich" durchsuche ich nach einem bstimmten Datumsbereich.
Code: Alles auswählen
if aDatenArray(iAz)(0) >= dQuartalVon AND aDatenArray(iAz)(0) <= dQuartalBis then
Ist quasi so etwas wie eine SUMMENPRODUKT, vereinfacht dargestellt:
Das funktioniert auch so weit. Durch diverse vorgenommene Test konnte ich mich auch davon überzeugen das die gesuchten Datume vom Makro gefunden werden. Also bis hier kein Problem.
Jetzt kann ich mir natürlich die Ergebnisse auf simple und einfache Art und Weise ausgeben lassen.
Code: Alles auswählen
for iAz = LBound(aDatenArray()) to UBound(aDatenArray())
if aDatenArray(iAz)(0) >= dQuartalVon AND aDatenArray(iAz)(0) <= dQuartalBis then
oBlatt2.getCellRangeByName("A" & iAz+1).FormulaLocal = aDatenArray(iAz)(0)
oBlatt2.getCellRangeByName("A" & iAz+1).Numberformat = 36
oBlatt2.getCellRangeByName("B" & iAz+1).string = aDatenArray(iAz)(1)
end if
next iAz
Klar ersichtlich das dies eine "Schneckentempo Angelegenheit" wird, wenn es sich um beispielsweise 100 Treffer oder noch viel mehr handeln würde.
Und genau an dieser Stelle stecke ich im Treibsand fest!
Denn ich suche jetzt eine Methode das Ergebniss schnellst möglich in das Tabellenblatt einzutragen.
Meine bisherigen Informationsquellen sind da leider nicht sehr hilfreich:
- Dannenhöfer
- Die deutsche Version von Andrew Pitonyak "OpenOffice.org Macros Explained, 3. ed." stand Februar 2018
- Dieses Forum
Ein Hauptproblem bei den Infoquellen ist, da werden einerseits Beispiele gezeigt die mit sehr vielen Abkürzungen arbeiten, wie z.B. in der Art von
Code: Alles auswählen
for i=0 to ubound(oData())
t = oData(i)
for j=0 to ubound(t)
Ausgabe(i,j) = t(j)
next
next
Dies Beispiel stammt von hier:
viewtopic.php?t=19294 (ist nicht in meiner Beispieldatei)
I, t, und j sind irgendwelche Variablen die wohl funktionieren, aber leider nicht sehr viel sagen. Und dabei ist das ja noch relativ Harmlos. Wenn man sich die deutsche oder Amerikanische Version von Andrew anschaut, dann wird es erst recht ungemütlich. Da wird beim Thema ARRAY das so gesehen auf die Spitze getrieben.
Ja ich weiss!
Auch ich arbeite mit teilweise solchen oder solch ähnlichen Abkürzungen.
Aber bei dem gezeigten Beispiel kommts dann zum "Wald ... Bäume"-Effekt, aus dem ich nicht mehr herausfinde. Dieses Problem liegt also nicht beim Autor solcher Beispiele, sondern bei mir.
Kommen wir aber zu dem nächsten Problem, welches dann auch mein Hauptproblem ist.
Viele, oder fast alle Beispiel bei dem Thema ARRAY in dem eben genannten PDF (Andrew) geben etwas in einer PRINT oder aber in einer MSGBOX aus. Damit ist das Ergebniss aber leider noch nicht aufm Papier (Tabellenblatt). Und selbst wenn ich XRAY bemühe, bekomme ich wohl etwas aufm Bildschirm angezeigt, was dadurch aber auch noch nicht ins Papier rüber gebracht ist.
Sorry, das ich jetzt etwas weit ausgeholt habe, aber das musste sein damit ihr in ungefähr versteht wie es mir momentan geht (Treibsand).
Jetzt habe ich hier im Forum etwas gefunden was wohl theoretisch und auch teilweise praktisch funktioniert, aber leider nicht so wie erhofft.
Hier der Link dazu:
viewtopic.php?t=64222
Und das habe ich dann bei mir wie folgt eingearbeitet (ein kurzer Auszug hier, aber vollsändig in der Beispieldstei)
Code: Alles auswählen
for iAz2 = LBound(aDatenArray2()) to UBound(aDatenArray2())
if aDatenArray2(iAz2)(0) >= dQuartalVon AND aDatenArray2(iAz2)(0) <= dQuartalBis then
aFilterArray(0, iAz2) = aDatenArray2(iAz2)(0) : aFilterArray(1, iAz2) = aDatenArray2(iAz2)(1)
iAT = iAT +1
If iAT = iArrayTreffer THEN
goto Ende
end if
end if
next iAz2
Ende:
'
'*************************************************************************************
' Inspiriert durch: http://de.openoffice.info/viewtopic.php?t=64222
'
oStartZelle = oBlatt2.getCellRangeByName("A1")
StartSpalte = oStartZelle.RangeAddress.StartColumn
StartReihe = oStartZelle.RangeAddress.StartRow
EndSpalte = StartSpalte + UBound(aFilterArray,2)
EndReihe = StartReihe + UBound(aFilterArray,1)
oBlatt2.getCellRangeByPosition(StartSpalte, StartReihe, EndSpalte, EndReihe).setDataArray(aFilterArray)
Positiv dabei ist, hier werden "sprechende" Variablen genommen.
Wenn ich das Makro laufen lasse, dann werden auch rasend schnell die Ergebnisse ausgeben. Und jetzt kommt das dicke fette
ABER!!
die Ausgabe ist Horizontal. Und ich will das Vertikal haben.
Also anstatt nur 2 Zeilen und sehr viele Spalten, soll es 2 Spalten und sehr viele Zeilen haben.
Ich habe wirklich lange daran rumgedoktert um mein Ziel zu erreichen, aber es geht nicht so wie ich es mir vorgestellt habe. Es hatt auch sehr lange gedauert bis das ich das Problem wohl so einigermaßen verstanden habe, es aber dadurch nicht beseitigt bekomme.
Mein ARRAY ist ein 2 Dimensionales Array wo erst die Zeilen und dann erst die Spalten abgearbeitet werden. Es ist so gesehen (lapidar ausgedrückt) Transponiert.
Ich weiss das mein Betreff eigentlich nicht ganz korrekrt ist, von wegen 2 Spalten, aber deshalb habe ich das ja auch in Gänsefüßchen gesetzt: "2-Spaltiges"
Es ist ein ARRAY in einem ARRAY.
Also hatte ich versucht das ganze irgendwie so zu Transponieren, das die Ausgabe wie gewünscht ist, also 2 Spalten mit vielen Zeilen. Jedoch da komm ich einfach nicht weiter. Ich dachte mir, vielleicht hilft ja SPLIT irgendwie, wenn ich das auszugebende ARRAY anders erstelle, was so z.B. aussah.
Code: Alles auswählen
aFilterArray(iAz) = aDatenArray(iAz)(0) & "-" & aDatenArray(iAz)(1)
(Nicht in der Beispieldatei)
Damit bekomme ich wohl auch nachweislich ein ARRAY, aber ich krieg das nicht "Gesplitet", weil mir dafür das nötige Wissen fehlt.
Mein Problem ist jetzt wie folgt.
Wie kriege ich das eingelesene ARRAY, welches gefiltert wurde, 2 Spaltig mit vielen Zeilen ins Tabellenblatt geschrieben?
Vielen dank für die aufgebrachte Zeit um meinen Beitrag zu lesen.
Ich freue mich auf Eure Antworten.
Gruß
balu
Hallo liebe Gemeinde.
Ich stecke im Treibsand, und je mehr ich tu und mach, umso mehr versinke ich.
Das ich so nebenbei den Wald vor lauter Bäume nicht mehr sehe kommt auch noch dazu.
Ich qäule mich nun seit mittlerweile 4 Tagen mit folgendem Problem herum.
Eins vorweg: Beispieldatei ist im Anhang.
Beispielsweise lese ich aus einem Tabellenblatt den Bereich A1 bis B69 in ein Array ein, Spalte A = Datum und Spaltze B = Namen. Okay, kein Problem.
Den eingelesenen "Datenbereich" durchsuche ich nach einem bstimmten Datumsbereich.
[code]
if aDatenArray(iAz)(0) >= dQuartalVon AND aDatenArray(iAz)(0) <= dQuartalBis then
[/code]
Ist quasi so etwas wie eine SUMMENPRODUKT, vereinfacht dargestellt:
[code]
SUMMENPRODUKT(B3>=QuartalVon;B3<=QuartalBis)
[/code]
Das funktioniert auch so weit. Durch diverse vorgenommene Test konnte ich mich auch davon überzeugen das die gesuchten Datume vom Makro gefunden werden. Also bis hier kein Problem.
Jetzt kann ich mir natürlich die Ergebnisse auf simple und einfache Art und Weise ausgeben lassen.
[code]
for iAz = LBound(aDatenArray()) to UBound(aDatenArray())
if aDatenArray(iAz)(0) >= dQuartalVon AND aDatenArray(iAz)(0) <= dQuartalBis then
oBlatt2.getCellRangeByName("A" & iAz+1).FormulaLocal = aDatenArray(iAz)(0)
oBlatt2.getCellRangeByName("A" & iAz+1).Numberformat = 36
oBlatt2.getCellRangeByName("B" & iAz+1).string = aDatenArray(iAz)(1)
end if
next iAz
[/code]
Klar ersichtlich das dies eine "Schneckentempo Angelegenheit" wird, wenn es sich um beispielsweise 100 Treffer oder noch viel mehr handeln würde.
Und genau an dieser Stelle stecke ich im Treibsand fest!
Denn ich suche jetzt eine Methode das Ergebniss schnellst möglich in das Tabellenblatt einzutragen.
Meine bisherigen Informationsquellen sind da leider nicht sehr hilfreich:
- Dannenhöfer
- Die deutsche Version von Andrew Pitonyak "OpenOffice.org Macros Explained, 3. ed." stand Februar 2018
- Dieses Forum
Ein Hauptproblem bei den Infoquellen ist, da werden einerseits Beispiele gezeigt die mit sehr vielen Abkürzungen arbeiten, wie z.B. in der Art von
[code]
for i=0 to ubound(oData())
t = oData(i)
for j=0 to ubound(t)
Ausgabe(i,j) = t(j)
next
next
[/code]
Dies Beispiel stammt von hier: http://de.openoffice.info/viewtopic.php?t=19294 (ist nicht in meiner Beispieldatei)
I, t, und j sind irgendwelche Variablen die wohl funktionieren, aber leider nicht sehr viel sagen. Und dabei ist das ja noch relativ Harmlos. Wenn man sich die deutsche oder Amerikanische Version von Andrew anschaut, dann wird es erst recht ungemütlich. Da wird beim Thema ARRAY das so gesehen auf die Spitze getrieben.
Ja ich weiss!
Auch ich arbeite mit teilweise solchen oder solch ähnlichen Abkürzungen.
Aber bei dem gezeigten Beispiel kommts dann zum "Wald ... Bäume"-Effekt, aus dem ich nicht mehr herausfinde. Dieses Problem liegt also nicht beim Autor solcher Beispiele, sondern bei mir.
Kommen wir aber zu dem nächsten Problem, welches dann auch mein Hauptproblem ist.
Viele, oder fast alle Beispiel bei dem Thema ARRAY in dem eben genannten PDF (Andrew) geben etwas in einer PRINT oder aber in einer MSGBOX aus. Damit ist das Ergebniss aber leider noch nicht aufm Papier (Tabellenblatt). Und selbst wenn ich XRAY bemühe, bekomme ich wohl etwas aufm Bildschirm angezeigt, was dadurch aber auch noch nicht ins Papier rüber gebracht ist.
Sorry, das ich jetzt etwas weit ausgeholt habe, aber das musste sein damit ihr in ungefähr versteht wie es mir momentan geht (Treibsand).
Jetzt habe ich hier im Forum etwas gefunden was wohl theoretisch und auch teilweise praktisch funktioniert, aber leider nicht so wie erhofft.
Hier der Link dazu: http://de.openoffice.info/viewtopic.php?t=64222
Und das habe ich dann bei mir wie folgt eingearbeitet (ein kurzer Auszug hier, aber vollsändig in der Beispieldstei)
[code]
for iAz2 = LBound(aDatenArray2()) to UBound(aDatenArray2())
if aDatenArray2(iAz2)(0) >= dQuartalVon AND aDatenArray2(iAz2)(0) <= dQuartalBis then
aFilterArray(0, iAz2) = aDatenArray2(iAz2)(0) : aFilterArray(1, iAz2) = aDatenArray2(iAz2)(1)
iAT = iAT +1
If iAT = iArrayTreffer THEN
goto Ende
end if
end if
next iAz2
Ende:
'
'*************************************************************************************
' Inspiriert durch: http://de.openoffice.info/viewtopic.php?t=64222
'
oStartZelle = oBlatt2.getCellRangeByName("A1")
StartSpalte = oStartZelle.RangeAddress.StartColumn
StartReihe = oStartZelle.RangeAddress.StartRow
EndSpalte = StartSpalte + UBound(aFilterArray,2)
EndReihe = StartReihe + UBound(aFilterArray,1)
oBlatt2.getCellRangeByPosition(StartSpalte, StartReihe, EndSpalte, EndReihe).setDataArray(aFilterArray)
[/code]
Positiv dabei ist, hier werden "sprechende" Variablen genommen.
Wenn ich das Makro laufen lasse, dann werden auch rasend schnell die Ergebnisse ausgeben. Und jetzt kommt das dicke fette
[b][u]ABER!![/u][/b]
die Ausgabe ist Horizontal. Und ich will das Vertikal haben.
Also anstatt nur 2 Zeilen und sehr viele Spalten, soll es 2 Spalten und sehr viele Zeilen haben.
Ich habe wirklich lange daran rumgedoktert um mein Ziel zu erreichen, aber es geht nicht so wie ich es mir vorgestellt habe. Es hatt auch sehr lange gedauert bis das ich das Problem wohl so einigermaßen verstanden habe, es aber dadurch nicht beseitigt bekomme.
Mein ARRAY ist ein 2 Dimensionales Array wo erst die Zeilen und dann erst die Spalten abgearbeitet werden. Es ist so gesehen (lapidar ausgedrückt) Transponiert.
Ich weiss das mein Betreff eigentlich nicht ganz korrekrt ist, von wegen 2 Spalten, aber deshalb habe ich das ja auch in Gänsefüßchen gesetzt: "2-Spaltiges"
Es ist ein ARRAY in einem ARRAY.
Also hatte ich versucht das ganze irgendwie so zu Transponieren, das die Ausgabe wie gewünscht ist, also 2 Spalten mit vielen Zeilen. Jedoch da komm ich einfach nicht weiter. Ich dachte mir, vielleicht hilft ja SPLIT irgendwie, wenn ich das auszugebende ARRAY anders erstelle, was so z.B. aussah.
[code]
aFilterArray(iAz) = aDatenArray(iAz)(0) & "-" & aDatenArray(iAz)(1)
[/code]
(Nicht in der Beispieldatei)
Damit bekomme ich wohl auch nachweislich ein ARRAY, aber ich krieg das nicht "Gesplitet", weil mir dafür das nötige Wissen fehlt.
Mein Problem ist jetzt wie folgt.
Wie kriege ich das eingelesene ARRAY, welches gefiltert wurde, 2 Spaltig mit vielen Zeilen ins Tabellenblatt geschrieben?
Vielen dank für die aufgebrachte Zeit um meinen Beitrag zu lesen.
Ich freue mich auf Eure Antworten.
Gruß
balu