【脱初心者】スクリプトで九九表をつくる【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