# google script: 2D-Array für VBA-Umsteiger



## NicSteel (18. Sep 2017)

Komme aus VBA und möchte nach Java/js. Es geht um 2D-Arrays. Hört sich einfach an - ist es aber nicht, wenn man nur VBA kennt. Habe im iNet gesucht und nichts gefunden ... daher musste ich selbst basteln ...
Problem:

script für google Tabellen
2D-Array einlesen
Daten per Schleife verändern
in neues Array schreiben
neues Array ausgeben
meine Lösung:

```
function MatrixLesenRechnenAusgeben(){

//erstellt: Martin Wilhelm (18.Sep.2017)
//Matrix-Daten aus dem sheet werden "mit einem Schlag" in Alt-Array eingelesen.
//Diese alten Daten werden per Schleife verändert, hier wird jeweils "2" addiert.
//Die veranderten alten Daten werden in ein Neu-Array geschrieben, in der gleichen Schleife.
//Neu-Array-Daten in einen beliebigen neuen Bereich im sheet schreiben.

  var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];//Abkurzung: sheet kurz per Pfad ansprechen
  var AltStartZeile=6;//Alte Daten: Nr. der Start-Zeile
  var AltStartSpalte=4;//Alte Daten: Nr der Start-Spalte
  var AltDaten = [];//Alte Daten: 2D-Array 
  var ZeilenMatrix=4;//Matrix: Zeilenanzahl, in y-Richtung
  var i=0;//Matrix,Schleife: Laufvariable Zeile, in y-Richtung
  var SpaltenMatrix=5;//Matrix: Spaltenanzahl, in x-Richtung
  var j=0;//Matrix,Schleife: Laufvariable Spalte, in x-Richtung
  var NeuStartZeile=14;//Neue Daten: Nr. der Start-Zeile
  var NeuStartSpalte=6;//Neue Daten: Nr der Start-Spalte
  var Zielbereich;//Abkurzung: Schmiervariable, nur zur Verdeutlichung
  var NeuDaten =[];//Neue Daten: 2D-Array

AltDaten=sheet.getSheetValues(AltStartZeile, AltStartSpalte, ZeilenMatrix, SpaltenMatrix);
//Alt-Array wird mit Daten aus sheet versehen

  //Hier beginnt die aussere Schleife, um mit den Daten aus Alt-Array zu rechnen
  for (var i=0;i<=ZeilenMatrix-1;i++) {
  //der erste Array-Index beginnt mit 0 (i=0), i lauft hoch (i++) bis die Zeilenanzahl der Matrix erreicht ist (i=ZeilenMatrix), "-1" weil Indes bei 0 beginnt

    NeuDaten[i] = [];
    //Neu-Array als Zeile (1D-Array) initialisieren, das ist DER Unterschied zu VBA

    for (var j=0;j<=SpaltenMatrix-1;j++) {
    //hier beginnt die innere Schleife, Erklarung siehe aussere Schleife

      NeuDaten[i][j]=AltDaten[i][j]+2;
     //die Index-Variablen i und j laufen noch
     //das neue 2D-Array wird mit Daten aus dem altem 2D-Array befullt, zusatzlich wird "2" addiert

      Zielbereich = sheet.getRange(NeuStartZeile+i, NeuStartSpalte+j);
      //Range im sheet wird laufend neu definiert, mit Start-Zeile/Spalte + i/j, i/j werden standig hochgezahlt

      Zielbereich.setValue(NeuDaten[i][j]);
      //in den Zielbereich werden standig die Daten aus dem neu berechneten Neu-Array geschrieben
    }
    //Ende der inneren Schleife (j)
  }
  //Ende der ausseren Schleife (i)
}
//Ende der function
```


----------

