見出し画像

【脱初心者】スクリプトで九九表をつくる【Googleスプレッドシート】【GAS】【繰り返し】

過去3回、関数・計算式で九九表を作る方法を書いてきました。
絶対参照・配列関数、表計算ソフトをより効果的に活用するための技術です。
全部手で入力するより、一定の規則性を読み取って表を作成します。
(実務では、規則から外れるものの重要性を見極めて除外したり別のシートで管理するなども必要かもしれません。)

スクリプトでの2回の繰り返しは後々の配列にも生きてくるスキル

筆者のnoteでは、いまのところ「配列」を使わない事例にこだわってご案内しています。
この2回の繰り返しが使いこなせるようになってうえで、配列を触ってみると、とても便利だと感じれるようになるかもしれません。

表のフォーマットです。

スクリプト

function make99_yoko() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
for (var i=1;i<=9;i++) {    //i=1

for (var j=1;j<=9;j++) {

sheet.getRange(i+2,j+1).setValue(i * j);  //(3,2)(3,3)(3,4)(3,5)
}
}
}

このスクリプトでの計算の順番です。

i = 1 の時から始まります。
その時は、(3,2)(3,3)(3,4)(3,5)と値を入力していきます。
それが終わると、i = 2
その時は、(4,2)(4,3)(4,4)(4,5)と値を入力していきます。

行列の繰り返しは、スプレッドシートを表のまま送信する技術でも活用しました。

行を先に作るか、列を先に作るか

先ほどのコードは、行をつくることを繰り返しました。
列をつくって繰り返すこともできます。

function make99_tate() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()

for (var j=1;j<=9;j++) {  // j=1
 
for (var i=1;i<=9;i++) {

sheet.getRange(i+2,j+1).setValue(i * j); //(3,2)(4,2)(5,2)(6,2)
}
}
}

さきほどのコードと違うのは、この順番が入れ替わってるだけです。
for (var j=1;j<=9;j++) {
for (var i=1;i<=9;i++) {
ではどちらを先にするのがいいのか

配列には、列という概念がない

こちらが大きなポイントになります。セルを扱って繰り返すだけであれば、どちらでも構いません。なんとなくですけど、スプレッドシートの場合は列の作成→展開のほうがしっくりくる気もします。慣れの問題で。
タテにSUMで集計することがおおいからですかね?

しかしながら、今後プログラムを作っていく中ではそのことを念頭に、行の作成→展開に頭をならしていきましょう。

まとめ

これが当たり前にできれば初心者脱出。
今回のシートです。
https://docs.google.com/spreadsheets/d/1wN0C1GMj5VPUzs8IJqkXsStFkmp-SV0Lt1wUrAjHvgk/edit#gid=962919020


どんな記事ならサポートしてみようと思えるか、ご要望ありましたら教えてくださいね。