Office Script: getRangeByIndexes() richtig nutzen

In diesem Beitrag erkläre ich getRangeByIndexes() in Office Script: Wie die vier Parameter funktionieren, warum der Index bei 0 beginnt und wie ich damit präzise Zellbereiche lese oder schreibe, ohne Auswahl per Maus.

EXCELOFFICE SCRIPT

9/24/20252 min read

Office Script: getRangeByIndexes() richtig nutzen

Heute habe ich mir getRangeByIndexes() angesehen. Die Methode ist der präziseste Weg, um in einem Tabellenblatt einen Bereich per Startkoordinate und Größe anzusprechen. Perfekt für automatisierte Abläufe ohne Aktivieren oder Selektieren.

Mein Aha-Moment

getRangeByIndexes(Startzeile, Startspalte, AnzahlZeilen, AnzahlSpalten) arbeitet 0-basiert.
Das bedeutet:
– Die erste Zeile hat den Index 0 (nicht 1).
– Die erste Spalte hat den Index 0 (nicht 1).
– Die letzten beiden Parameter geben die Größe an, nicht den Endindex.

Beispiele im Kopf:
– Start bei A1 → Startzeile = 0, Startspalte = 0
– 10 Zeilen hoch → AnzahlZeilen = 10
– 3 Spalten breit → AnzahlSpalten = 3

Typische Anwendung

Zielbereich exakt dimensionieren
Wenn ich zuvor mit getUsedRange().getValues() Daten als 2D-Array geholt habe, bestimme ich die Größe so:
zeilen = inhalt.length
spalten = inhalt[0].length
und schreibe sie dann passgenau in einen Zielbereich ab (z. B. ab A1 eines anderen Blatts) – nur so passt setValues(inhalt) ohne Fehler.

Hier ein Beispiel, direkt aus Excel. Sodass man es besser nachvollziehen kann. Man beachte, das ich beim Einfügen in Tabelle2 als Startzeile, Zeile 2 gewählt habe. Die Zeilenanzahl für den Bereich wird ab da dann gezählt. In der Ausgabe habe ich visualisiert (über console.log()) wie viele Zeilen und Spalten wir haben.

Wichtige Details

0-basiert denken: A1 ist (0,0), B1 ist (0,1), A2 ist (1,0) usw.
Größe statt Endindex: Die letzten beiden Parameter sind Längenangaben.
Out-of-Bounds vermeiden: Die angegebene Größe darf nicht über das Blatt hinausragen – sonst gibt’s Fehler.
Kombi mit getValues() / setValues(): Funktioniert nur, wenn die Dimensionen des Zielbereichs exakt mit eurem 2D-Array übereinstimmen.
Keine Aktivierung nötig: Ich muss kein Blatt aktivieren; das Objekt liefert direkt den Bereich.
Alternativen: Für einzelne Zellen eignet sich getCell(zeile, spalte) (ebenfalls 0-basiert). Für dynamische Breiten/Höhen nehme ich oft zuerst getUsedRange() und leite daraus die Größe ab.

Mein Fazit

getRangeByIndexes() ist die präziseste Methode, um Bereiche programmgesteuert zu adressieren. Wer 0-basierte Indizes verinnerlicht und Größe ≠ Endindex im Kopf behält, schreibt robuste, fehlerarme Scripte – besonders in Kombination mit getUsedRange() und 2D-Arrays.

Weitere interessante Beiträge:

Best Practice um Arrays von getValues() in ihrer Größe auszulesen

Wie man den genutzten Bereich in Excel ausliest, ohne zu wissen wo dieser Endet