この記事を読むことで、Pythonの基本的なループと内包表記、GASではループと二次元配列についての概要が掴めます。
このコーナーでは、プログラミング学習コンテンツpaizaラーニングのレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。
Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。
Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。
(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、ご安心なさって下さい。)
問題:3 を 8 回、改行区切りで出力してください。
入力される値: 与えられていません
回答:期待する出力
3 を 8 回、改行区切りで出力してください。
出力の末尾には改行を入れてください。
3
3
3
3
3
3
3
3
ではまず、Pythonで解いて行きます。
■ Pythonでの解き方 ■
以下の手順でコードを書いて行きます。
1.ループが8回繰り返すように設定する
2.「3」を出力する
・基本的なループ
・内包表記によるループ
手順1では、
for i in range(8):
で、ループを設定しています。
rangeを使っているので変数「i」には0,1,2,3,4,5,6,7が代入されて、8回繰り返す処理が設定されます。
for i in range(8):
print(i)このコードの実行結果はこちらになります。

手順2では、
print(3)
で、3を出力しています。
先ほどのprint(i)の「i」を「3」に変えて「3」を8回出力します。
for i in range(8):
print(3)実行結果です。

基本的なループの次にループをたった1行のコードで書ける内包表記について掲載致します。
[ print(3) for i in range(8) ]
コードはこちらで同様の出力結果を得られます。
#内包表記によるループのコード
[print(3) for i in range(8)]Pythonは以上です。
■ GASでの解き方 ■
では、同じ問題をGASで解いて行きます。
まず、スプレッドシートにこの様に設定しました。
この黄色い部分に結果を出力していきます。

この黄色い部分のA1からA8までに「3」を8回出力します。
※スプレッドシートに出力する場合は、二次元配列にしてからの配列に追加をして作成します※
手順は以下の様になります。
1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートのA1(1,1)から始まる8行分の黄色いセルに出力用の空の配列arrayを定義する
3:ループ8回繰り返してその中でpushを用いてarray[]の中に[3]を格納して、二次元配列として格納出来たことをログ出力で確認する
4:スプレッドシートのセルA1(1,1)から8行分の黄色いセルに出力する
手順1: スプレッドシートからアクティブシートをアクセスする
下記のコードで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。
const ss=SpreadsheetApp.getActiveSheet();
GASのコードを関数「loop5」に書いて行きます。
function loop5() {
//スプレッドシートからアクティブシートにアクセスする
const ss=SpreadsheetApp.getActiveSheet();
}手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
let array=[];
function loop5() {
const ss=SpreadsheetApp.getActiveSheet();
//スプレッドシートに出力用の配列を用意する
const array=[];
}手順3:ループを8回繰り返してその中でpushを用いて、空の配列arrayにpush([3])を追加して二次元配列として扱えるようにする
array.push([3]);
ループのコードと実行結果にログ出力です。
function loop5() {
const ss=SpreadsheetApp.getActiveSheet();
const array=[];
//ループで空の配列に二次元配列として「3」を8回格納する
for(let i=1;i<=8;i++){
array.push([3]);
}
//ログで二次元配列になっていることを確認する
console.log(array);
}![ログ | ロスジェネ!ねこくんのリスキリングの学びをシェア Status panel with two sections: '実行開始' and '実行完了', and a horizontal row of [ 3 ] items in brackets.](https://nekosiestr77.xsrv.jp/wp-content/uploads/2021/11/f5cf1a8c2cf464f0e41bf94c2ee87d54.jpg)
配列arrayに二次元配列として格納されていることが確認出来ました。
手順4:スプレッドシートのセルA1から始まる8行分の黄色いセルに出力する
ss.getRange(1,1,8).setValues(array);
スプレッドシートオブジェクトにgetRangeでセルA1から8行確保し、setValues(array)で出力しています。
セルA1は(1,1)で、8行分で(1,1,8)、1列分ですので(1,1,8,1)となりますが、1列の場合は省略可能です。
また、配列arrayの要素は8個分と複数ですので、setValuesとsが付いて複数形になります。
コードの実行結果です。
スプレッドシートに無事に出力出来ました。

お疲れ様でした。ブレイクタイムPhotoは、

スカイツリーからの夜景です。
ご精読有難うございました。
■ GASの入門書の紹介です ■
詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)
■ 関連記事 ■
paizaレベルアップ問題集「ループその1の1」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ
写真クリエイターとしての活動
自己紹介
