Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
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 x-mal in erste Zeile

Array x-mal in erste Zeile
15.11.2023 09:08:22
Thomas
Liebe Excelperten,
ich möchte ein Array mit 2 Einträgen in der ersten Zeile 2x wiederholen. Prämisse: das soll ohne Schleife ablaufen! Bekomme das aber nicht hin.
Hier meine Ansätze mit 3 Versuchen in 3 Zeilen:
Sub Wiederholen()

Dim cols
cols = Array("min", "max")
Cells(1, 1).Resize(1, 2).Value = cols 'füllt die ersten beiden Spalten richtig
Cells(2, 1).Resize(1, 4).Value = cols 'ergibt #NV in der 3. und 4. Spalte)
Cells(3, 1).Resize(1, 4).Value = Application.WorksheetFunction.Rept(cols, 2) 'ergibt LZF13: "Typen unverträglich"
End Sub



Dies ist nur ein Beispiel. In der Realität hat cols mehrere Einträge , die x-mal wiederholt werden sollen, aber das o.g. Beispiel reicht auch erst einmal.
Wie gesagt, ohne Schleife! :o)
Hat jemand eine Idee?

Danke und Gruß,
Thomas

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array x-mal in erste Zeile
15.11.2023 09:30:17
onur
cols = Array("min", "max", "min", "max")
AW: Array x-mal in erste Zeile
15.11.2023 09:53:07
daniel
Hi
Mehrere Zellen gleichzeitig mit dem selben Wert zu befüllen funktioniert meines Wissens nach nur mit Einzelwerten

Schleifenfrei hast du folgende möglichkeit:

1. Array erstmal nur in die erste Zeile eintragen und die restlichen Zellen dann mit Copy-Paste befüllen.

Cells(1, 1).Resize(1, 2).Value = cols

Cells(1, 1).Resize(1, 2).Copy
Cells(1, 1).Resize(99, 2).PasteSpecial xlpastevalues



2. Statt Array die Werte als Trennzeichen getrennten Text in die erste Spalte schreiben und dann mit TextInSpalten in die weiteren Spalten verteilen

Cells(1, 1).Resize(99, 1) = "min;max"

Cells(1, 1).Resize(99, 1) .TextToColumns ...

Den vollständigen Code für TextToColumns bitte mit dem Recorder ermitteln

Bei nur zwei Spalten kannst du natürlich auch die Spalten befüllen und nicht die Zeilen:
Cells(1, 1).Resize(99, 1) = cols(0)

Cells(1, 2).Resize(99, 1) = cols(1)

Das ist prinzipiell zwar nicht schleifenfrei, aber es ist die kurze Schleife mit wenig umläufen und nicht die lange mit vielen.


Gruß Daniel
Anzeige
AW: Array x-mal in erste Zeile
15.11.2023 10:10:12
Thomas
Vielen Dank Daniel, der erste Ansatz ist am Besten.
Allerdings wollte ich die Einträge in derselben Zeile wiederholen, aber das wäre dann nur noch eine Änderung bei den Resize-Parametern.
Das wäre dann folgendermaßen:
Cells(1, 1).Resize(1, 8).PasteSpecial xlPasteValues

(die 8 als Spaltenangabe ist dann auch noch variabel, hier nicht dargestellt)
Nochmals danke und einen schönen Tag! ;o)
AW: Array x-mal in erste Zeile
15.11.2023 10:27:23
daniel
Sorry, das mit dem "in einer Zeile" hatte ich übersehen.

Noch ne möglichkeit:

Cols2 = Split(Worksheetfunction.Rept(join(cols, " ") & " ";8), " ")


Damit hast du in Cols2 die vervielfachen Werte als Array, das du dann in den Zellbereich schreiben kannst.

Btw, schleifen sind nur dann langsam, wenn sie über Zellen laufen und dabei die Zellwerte verändern.
Schleifen über Arrays hingegen sind sehr schnell und es dürfte wahrscheinlich das schnellste sein, wenn du das Col2-Array per Schleife erstellst.

Ich vermeide Schleifen aber nicht nur wegen der Performance, sondern auch weil Schleifen lästig sind, wenn man den Code im Einzelstepmodus testen will.

Gruß Daniel
Anzeige
AW: Array x-mal in erste Zeile
15.11.2023 10:35:40
Thomas
Danke Daniel, dieser Ansatz gefällt mir sogar noch besser.
Und ja, das mit dem Einzelstep im Debug habe ich nicht erwähnt, ist aber auch mir immer lästig und für mich auch ein Grund, Schleifen zu vermeiden.
Auch wenn man Code "bis zur Cursorposition" oder bis zum Haltepunkt ausführen kann...
Jedem sein Programmierstil! ;o)
AW: Array x-mal in erste Zeile
15.11.2023 10:54:00
daniel
Performance ist hier als Argument zweischneidig.

Markros mit Schleifen über Arrays sind häufig die schnellste Lösung.

Aber auch bei Schleifen über Zellen ist Excel und die Rechner besser geworden, so das heute Schleifen von der Durchlaufzeit vertretbar sind, die vor ein paar Jahren noch zu langen Wartezeiten geführt hätten.
Anzeige
AW: Array x-mal in erste Zeile
15.11.2023 10:04:54
hary
Moin
versuch es mal so.
Dim cols

cols = Array("min", "max")
With Cells(1, 1).Resize(1, UBound(cols) + 1)
.Value = cols
.Copy .Resize(1, (UBound(cols) + 1) * 4) '--4 mal eintragen
End With

gruss hary
AW: Array x-mal in erste Zeile
15.11.2023 10:13:19
Thomas
Vielen Dank auch dir hary. Das entspricht im Wesentlichen dem ersten Ansatz von Daniel, den ich bereits eingebaut habe.
Danke für deine Zeit und dir einen schönen Tag.
Gruß,
Thomas ;o)
AW: Array x-mal in erste Zeile
15.11.2023 09:40:08
Thomas
Vielen Dank onur für dein Zeit und deinen Lösungsversuch. Das ist aber nicht das, was ich suchte.
Wie beschrieben, das ist nur ein Beispiel. Das Array kann auch 4, 6 oder 8 Einträge haben, und das soll nicht nur 2x, sondern vielleicht 20x oder 30x wiederholt werden.
Anzeige
AW: Array x-mal in erste Zeile
15.11.2023 09:41:14
onur
Und warum keine Schleife?
AW: Array x-mal in erste Zeile
15.11.2023 09:45:41
Thomas
Weil ich gerne meinen Code so gestalte, dass die auszuführenden Befehle mit einer einzigen Zeile abgearbeitet werden können. Das erhöht die Performance bei sehr großen Datenmengen.
AW: Array x-mal in erste Zeile
15.11.2023 10:19:41
onur
"Das erhöht die Performance bei sehr großen Datenmengen" . Lang lebe das Halbwissen.
Dann gestalte halt "deinen" Code so, wie von dir gewünscht. Der Unterschied jedoch, selbst bei 100.000 Zeilen, liegt im Millisekundenbereich.
16 Spalten am Stück (16 Spalten) dauern bei 100.000 Zeilen 1,172 sec und in Schleife (8x2Spalten) 1,238 sec. Unterschied: 66 ms.
Ausserdem ist es offenbar eine Interpretationssache, was eine Schleife ist und was nicht......

Anzeige
AW: Array x-mal in erste Zeile
15.11.2023 10:32:47
daniel
Auch wenn Schleifen schneller sein können, sie sind lästig, wenn man den Code testet und dabei im Einzelstepmodus durchklickt.

Auch deswegen programmiere ich lieber Schleifenfrei und nehme Schleifen dann, wenn der Vorteil spürbar und nicht nur messbar ist.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige