paiza レベルアップ問題集 標準入力その3「FINAL問題 【半角スペース区切りの入力】半角スペース区切りの 1,000 個の入力」をPythonとGASで解いたコードの紹介

この記事を読むことで、PythonとGASで空白スペースを含む1行の文字列を取得して、空白スペースの所で区切って、ループを使って1000行の文字列に出力する方法が学べます。また、GASではスプレッドシートを用いて値を取得して出力しています。
更にPythonではループを基本的な書き方と内包表記の書き方の2通りで掲載します。

このコーナーでは、学習コンテンツpaizaラーニングレベルアップ問題集をPythonとGASの両方で解いて全コードの解説をしています。
PythonとGASの両方のコードを用いて、全コード及び部分的にも可能な限り詳細に記載いたしました。

paizaでの解答はPythonで行いましたが、この記事ではPythonのコードと共に、同じ問題を現在学習中のGASだったらどう解くのか、スプレッドシートでバインドして作ってみました。

【半角スペース区切りの入力】半角スペース区切りの 1,000 個の入力 (paizaランク D 相当)

問題:文字列 s_1, s_2, … s_999, s_1000 が半角スペースで区切られて 1 行で与えられます。各文字列を出力するごとに改行し 1,000 行で出力してください。

ではまず、Pythonで解いてみます。

今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

■ Pythonでの解き方 ■

手順として、

1:標準入力で空白スペースを含む文字列を区切って取得する

2:取得した文字列がリストになっていることを確認する


3:ループを使って出力する

の3ステップで行います。

今回は下記の入出力例1を用います。
(1000行は長すぎるので、このブログで入出力例を表示することは省きます。)

まず、準備として、paiza.ioにこのように入力します。
(入力例1をコピペしたのみ)

手順1で標準入力で空白文字を区切って取得します。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

手順2では先ほどの手順で取得した文字列を出力して、リストとして空白区切りで出力されていることを確認します。

#取得した文字列がリストになっていることを確認する
print(s)

手順3ではループを使って出力します。

#ループを使って出力する
for string in s:
    print(string)

これを内包表記を使って書いた場合のコードです。先ほどのコードと見比べると、1行になりよりシンプルなコードが書けました。

#ループを使って出力する
for string in s:
    print(string)
    
#内包表記を使ったループで出力する
[print(string) for string in s]

ここまでのコードをまとめます。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

#取得した文字列がリストになっていることを確認する
print(s)

#ループを使って出力する
for string in s:
    print(string)
    
#内包表記を使ったループで出力する
[print(string) for string in s]

ただ、このままでは求められる出力結果に対して冗長な部分があるので、不要な箇所はコメントアウトします。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

#取得した文字列がリストになっていることを確認する
#print(s)

#ループを使って出力する
#for string in s:
#    print(string)
    
#内包表記を使ったループで出力する
[print(string) for string in s]

更に提出ように最小限のコードになるようにしたスッキリなコードはこちらになります。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

#内包表記を使ったループで出力する
[print(string) for string in s]

提出する直前の出力結果です。

■ GASでの解き方 ■

今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

緑色の所に入力した文字列を取得して、それを黄色い所に出力します。その際、この黄色く塗りつぶしたセルの所に、二次元配列として取得した文字列が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:緑色のセルの所を取得して、空白区切り文字の所で区切って定数sに格納
する

3:定数sに配列として格納出来たことをログ出力で確認する

4:スプレッドシートに出力するため、二次元配列として取得するs2を宣言する

5:ループを使ってpushメソッドでs2にsを2次元配列として追加する

6:スプレッドシートに出力する前にs2に二次元配列として格納されていることをログ出力で確認する

7:スプレッドシートの黄色いセルに出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

手順2:緑色のセルの所を取得して、空白区切り文字の所で区切って定数sに格納する

const s=ss.getRange(1,2).getValue().split(‘ ‘);

手順3:定数sに格納出来たことをログ出力で確認する

console.log(s);

手順4:スプレッドシートに出力するため、二次元配列として取得するs2を宣言する

let s2 = [];

手順5:ループを使ってpushメソッドでs2にsを2次元配列として追加する

//ループを使ってpushメソッドでs2にsを2次元配列として追加する
  for(let i=0;i<s.length;i++){
    s2.push([s[i]]);
  }

手順6:スプレッドシートに出力する前にs2に二次元配列として格納されていることをログ出力で確認する

console.log(s2);

手順7:スプレッドシートの黄色いセルに出力する

ss.getRange(3,2,s2.length).setValues(s2);

実行後のスプレッドシートです。

GASでの全コードはこちらになります。

function standardInput13(){

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセルの所を取得して、空白区切り文字の所で区切って定数sに格納する
  const s=ss.getRange(1,2).getValue().split(' ');

  //定数sに配列として格納出来たことをログ出力で確認する
  console.log(s);

  //スプレッドシートに出力するため、二次元配列として取得するs2を宣言する
  let s2=[];

  //ループを使ってpushメソッドでs2にsを2次元配列として追加する
  for(let i=0;i<s.length;i++){
    s2.push([s[i]]);
  }

  //スプレッドシートに出力する前にs2に二次元配列として格納されていることをログ出力で確認する
  console.log(s2);

  //スプレッドシートの黄色いセルに出力する
  ss.getRange(3,2,s2.length).setValues(s2);

}

宜しかったらコピペしてアレンジして見て下さい。
お疲れ様でした、ブレイクタイムフォトはこちらになります。

フランスのクリスタルメーカー、バカラのシャンデリア、クールなブルー

←前の問題へ          標準入力その4へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力3」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

paiza レベルアップ問題集 標準入力その3「STEP: 4 半角スペース区切りの 10 個の入力」をPythonとGASで解いたコードの紹介

この記事を読むことで、PythonとGASで空白スペースを含む1行の文字列を取得して、空白スペースの所で区切って、ループを使って10個の文字列に順に出力する方法の概要を掴めます。

また、GASではスプレッドシートを用いて値を取得して出力しています。
更にPythonではループを基本的な書き方と内包表記の書き方の2通りで掲載します。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。


半角スペース区切りの 10 個の入力 (paizaランク D 相当)

問題:文字列 s_1, s_2, … s_9, s_10 が半角スペースで区切られて 1 行で与えられます。各文字列を出力するごとに改行し 10 行で出力してください。

ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

手順として、

1:標準入力で空白スペースを含む文字列を区切って取得する

2:取得した文字列がリストになっていることを確認する

3:ループを使って出力する

の3ステップで行います。

今回は下記の入出力例1を用います。

入力例1
VypymzW25l 3xsXWAK NYwbs2MRC kh4 mr38o8W9 94 fEJ 6THlW fJFTy n

出力例1
VypymzW25l
3xsXWAK
NYwbs2MRC
kh4
mr38o8W9
94
fEJ
6THlW
fJFTy
n

まず、準備として、paiza.ioにこのように入力します。
(入力例1をコピペしたのみ)

手順1で標準入力で空白文字を区切って取得します。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

手順2では先ほどの手順で取得した文字列を出力して、リストとして空白区切りで出力されていることを確認します。

s=input().split(' ')

#取得した文字列がリストになっていることを確認する
print(s)

手順3ではループを使って出力します。

s=input().split(' ')
print(s)

#ループを使って出力する
for word in s:
    print(word)

コードと実行結果です。

これを内包表記を使って書いた場合のコードです。
先ほどのコードと見比べると1行になり、よりシンプルなコードになりました。
コードと実行結果です。

s=input().split(' ')
print(s)

for word in s:
    print(word)

#内包表記を使ったループで出力する
print('--- 内包表記 ---')
[print(word) for word in s]

ただ、このままでは求められる出力結果に対して冗長な部分があるので、不要な箇所はコメントアウトします。

Pythonでコメントアウトする場合、1行でしたら「#(シャープ)」ですが、複数行をコメントアウトする際には、「’(シングルクォーテーション)」を3つで「”’」か、「”(ダブルクォーテーション)」を3つで「”””」を使います。
この記事では「”’」とシングルクォーテーションを使っております。

s=input().split(' ')

'''
print(s)

for word in s:
    print(word)

#内包表記を使ったループで出力する
print('--- 内包表記 ---')
'''

[print(word) for word in s]

更に提出ように最小限のコードになるようにしたスッキリなコードはこちらになります。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

#内包表記を使ったループで出力する
[print(word) for word in s]

paiza提出用の出力結果です。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

ここも、paiza問題集の入力例をそのまま緑のセルB1に貼りつけたのみです。
(セル結合はしておりません。)

緑色のセルB1(1行,2列)の所に入力した文字列を取得して、それを黄色い所B3〜B12まで縦に10セル分に単語を出力します。

その際、この黄色く塗りつぶしたセルの所に、二次元配列として取得した文字列が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:緑色のセルのB1を取得して、空白区切り文字の所で区切って配列arrayに格納する

3:配列として格納出来たことをログ出力で確認する

4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する

5:ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する

6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

7:スプレッドシートの黄色いセルに出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

これを関数「standardInput4」に書いていきます。
Standard Inputで標準入力の意味です。

function standardInput4() {
  
  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}

手順2:緑色のセルB1を取得して、空白区切り文字の所で区切って配列arrayに格納する

const array=ss.getRange(1,2).getValue().split(‘ ‘);

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセルの所を取得して、空白区切り文字の所で区切って配列arrayに格納する
  const array=ss.getRange(1,2).getValue().split(' ');
  
}

手順3:配列arrayに格納出来たことをログ出力で確認する

console.log(array);

コードとログ出力結果です。

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  //配列として格納出来たことをログ出力で確認する
  console.log(array);

}

手順4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する

const array2 = [];

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  console.log(array);

  //スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する
  const array2=[];

}

手順5:ループを使ってpushメソッドでs2にsを2次元配列として追加する

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  console.log(array);

  const array2=[];

  //ループを使ってpushメソッドでarray2にarrayを2次元配列として追加する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
}

手順6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

console.log(array2);

コードと実行結果のログです。

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  console.log(array);
  const array2=[];

  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  //スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する
  console.log(array2);

}

手順7:スプレッドシートの黄色いセルB3〜B12に10行分の単語を出力する

ss.getRange(3,2,array2.length).setValues(array2);

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  console.log(array);
  const array2=[];

  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //スプレッドシートの黄色いセルB3〜B12の10行分の出力をする
  ss.getRange(3,2,array2.length).setValues(array2);

}

実行後のスプレッドシートです。

(出力結果を左揃えにしています。)


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

「しながわ花海道の赤いコスモス」です。

←前の問題へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力3」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

paiza レベルアップ問題集 標準入力その3「STEP: 3 半角スペース区切りの 3 つの入力」をPythonとGASで解いたコードの紹介

この記事を読むことで、PythonとGASで空白スペースを含む1行の文字列を取得して、空白スペースの所で区切って、ループを使って3つの文字列に出力する方法の概要が掴めます。

また、GASではスプレッドシートを用いて値を取得して出力しています。
更にPythonではループを基本的な書き方と内包表記の書き方の2通りで掲載します。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。


半角スペース区切りの 3 つの入力 (paizaランク D 相当)

問題:文字列 s_1, s_2, s_3 が半角スペースで区切られて 1 行で与えられます。
各文字列を出力するごとに改行し 3 行で出力してください。

ではまず、Pythonで解いてみます。

手順として、

1:標準入力で空白スペースを含む文字列を区切って取得する

2:取得した文字列がリストになっていることを確認する

3:ループを使って出力する

の3ステップで行います。

今回は下記の入出力例1を用います。

入力例1
good morning paiza

出力例1
good
morning
paiza

まず、準備として、paiza.ioにこのように入力します。
(入力例1をコピペしたのみ)

手順1で標準入力で空白文字を区切って取得します。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

手順2では先ほどの手順で取得した文字列を出力して、リストとして空白区切りで出力されていることを確認します。

s=input().split(' ')

#取得した文字列がリストになっていることを確認する
print(s)

手順3ではループを使って出力します。

s=input().split(' ')
print(s)

#ループを使って出力する
for word in s:
    print(word)

これを内包表記を使って書いた場合のコードです。先ほどのコードと見比べると、1行になりよりシンプルなコードが書けました。

s=input().split(' ')
print(s)

for word in s:
    print(word)
    
#内包表記を使ったループで出力する
print('--- 内包表記 ---')
[print(word) for word in s]

ただ、このままでは求められる出力結果に対して冗長な部分があるので、不要な箇所はコメントアウトします。

Pythonの複数行に渡るコメントアウトは、「’」が3つで「”’」か「”」が3つで「”””」で可能になり、この記事ではシングルクォーテーション3つの「”’」を使います。

s=input().split(' ')

'''
print(s)

for word in s:
    print(word)
    
#内包表記を使ったループで出力する
print('--- 内包表記 ---')

'''
[print(word) for word in s]

更に提出ように最小限のコードになるようにしたスッキリなコードはこちらになります。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

#内包表記を使ったループで出力する
[print(word) for word in s]

コードの提出が可能な出力結果です。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

緑色のセルB1の所に入力した文字列を取得して、それを黄色いセルB3,B4,B5の3行に区切った文字を1行ずつ出力します。

その際、この黄色く塗りつぶしたセルの所に、二次元配列として取得した文字列が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:緑色のセルB1の所を取得して、空白区切り文字の所で区切って配列arrayに格納する


3:arrayに配列として格納出来たことをログ出力で確認する

4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する

5:ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する

6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

7:スプレッドシートの黄色いセルに出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

これを関数「standardInput3」の中に書いていきます。
Standard Inputで、標準入力の意味です。

function standardInput3() {
  
  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}

手順2:緑色のセルB1(1行,2列)の所を取得して、空白区切り文字の所で区切って配列arrayに格納する

const array=ss.getRange(1,2).getValue().split(‘ ‘);

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑色のセルの所を取得して、空白区切り文字の所で区切って配列arrayに格納する
  const array = ss.getRange(1,2).getValue().split(' ');

}

手順3:配列arrayに格納出来たことをログ出力で確認する

console.log(array);

コードと実行結果です。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array = ss.getRange(1,2).getValue().split(' ');
  
  //arrayに配列として格納出来たことをログ出力で確認する
  console.log(array);
 
}

手順4:スプレッドシートに出力するため、二次元配列として取得するs2を宣言する

const array2 = [];

手順5:ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array = ss.getRange(1,2).getValue().split(' ');
  
  console.log(array);

  //スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する
  const array2=[];

 //ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  
 }
}

手順6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

console.log(array2);

コードと実行結果です。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array = ss.getRange(1,2).getValue().split(' ');
  console.log(array);

  const array2=[];

  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }


  //スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する
  console.log(array2);

  
}

手順7:スプレッドシートの黄色いセルB3(3,2),B4,B5に出力する

ss.getRange(3,2,array2.length).setValues(array2);

コートと実行後のスプレッドシートです。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array = ss.getRange(1,2).getValue().split(' ');
  console.log(array);

  const array2=[];

  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //黄色いセルB3,B4,B5に出力する
  ss.getRange(3,2,array2.length).setValues(array2);

}


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

水元公園、ゴールデンウィークにサイクリングでグリーンエクササイズを楽しんだ時の写真です。

←前の問題へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力3」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

paiza レベルアップ問題集 標準入力その3「STEP: 2 半角スペース区切りの 2 つの入力」をPythonとGASで解いたコードの紹介

この記事を読むことで、PythonとGASで空白スペースを含む1行の文字列を取得して、空白スペースの所で区切って、2つの文字列に出力する方法が学べます。

Pythonではループを基本的な書き方と内包表記の書き方の2通りで掲載します。
また、GASではスプレッドシートを用いて値を取得して出力しています。

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)


半角スペース区切りの 2 つの入力 (paizaランク D 相当)

問題:文字列 s_1, s_2 が半角スペースで区切られて 1 行で与えられます。各文字列を出力するごとに改行し 2 行で出力してください。

まず、リストについてですが、他の言語で「配列」という呼び名ですが、 Pythonでは「リスト」と呼びます。

手順として、

1:標準入力で空白スペースを含む文字列を区切ってリストとして取得

2:取得した文字列がリストになっていることを確認

3:ループを使って出力

の3ステップで行います。

今回は下記の入出力例1を用います。

入力例1
hello paiza

出力例1
hello
paiza

まず、準備として、paiza.ioにこのように入力します。
(入力例1をコピペしたのみ)

手順1で標準入力で空白文字を区切って配列として取得

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

手順2では先ほどの手順で取得した文字列を出力して、リスト(配列)として空白区切りで出力されていることを確認します。

s=input().split(' ')

#取得した文字列がリストになっていることを確認する
print(s)

手順3ではループを使って出力します。

s=input().split(' ')
print(s)

#ループを使って出力する
for word in s:
    print(word)

これを内包表記を使って書いた場合のコードです。先ほどのコードと見比べると、1行になりよりシンプルなコードが書けました。

s=input().split(' ')
print(s)


for word in s:
    print(word)

#内包表記を使ったループで出力する 
print('--- 内包表記 ---')
[print(word) for word in s] 

ただ、このままでは、求められる出力結果に対して冗長な部分があるので、不要な箇所はコメントアウトします。

Pythonでは複数行をコメントアウトする場合、「’」を3つで「”’」とするか、「”」を3つで「”””」にするかのどちらかを使います。
この記事ではシンプルに前者を使います。

s=input().split(' ')

'''
print(s)

for word in s:
    print(word)

#内包表記を使ったループで出力する 
print('--- 内包表記 ---')
'''

[print(word) for word in s]  

paizaに提出可能な実行結果です。

更にpaizaに提出用に最小限のスッキリなコードは、こちらになります。

#標準入力で空白スペースを含む文字列を区切って取得する
s=input().split(' ')

#内包表記を使ったループで出力する
[print(word) for word in s]


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

緑色のセルB1の所に入力した文字列を取得して、それをB4とB5の2行の黄色い所に出力します。

その際、この黄色く塗りつぶしたセルの所に、二次元配列として取得した文字列が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:緑色のセルB1の値を取得して、空白区切り文字の所で区切って配列arrayに格納する


3:配列として格納出来たことをログ出力で確認する


4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する

5:ループを使ってpushメソッドでarray2にarrayを2次元配列として追加する

6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

7:スプレッドシートの黄色いセルB4,B5に出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

これを関数「standardInput2」の所に書いていきます。
Standard Inputで標準入力の意味です。

function standardInput2() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
 
}

手順2:緑色のセルB1の値を取得して、空白区切り文字の所で区切って配列arrayに格納する

const array=ss.getRange(1,2).getValue().split(‘ ‘);

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  //緑色のセルB1の値を取得して、空白区切り文字の所で区切って配列arrayに格納する
  const array=ss.getRange(1,2).getValue().split(' ');

}

手順3:配列arrayに格納出来たことをログ出力で確認する

console.log(array);

実行結果とログです。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  
  //配列arrayの出力確認
  console.log(array);

}

手順4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する

const array2 = [];

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  console.log(array);

  //スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する
  const array2=[];
}

手順5:ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  console.log(array);

  
  const array2=[];

  //ループを使ってpushメソッドでarray2にarrayを二次元配列として追加する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]])
  }

}

手順6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

console.log(array2);

コードと実行結果です。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  console.log(array);

  
  const array2=[];

  
  for(let i=0;i<array.length;i++){
    array2.push([array[i]])
  }

  //スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する
  console.log(array2);

}

手順7:スプレッドシートの黄色いセルB4,B5に出力する

ss.getRange(4,2,array2.length).setValues(array2);

コードと実行後のスプレッドシートです。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(1,2).getValue().split(' ');
  console.log(array);

  
  const array2=[];

  for(let i=0;i<array.length;i++){
    array2.push([array[i]])
  }

  console.log(array2);

  //スプレッドシートの黄色いセルB4,B5に二次元配列arrayを出力する
  ss.getRange(4,2,array2.length).setValues(array2);

}


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

池袋東口方面にある、サンシャイン水族館です。

←前の問題へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力3」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

paiza レベルアップ問題集 標準入力その3「STEP: 1 1 つの入力」をPythonとGASで解いたコードの紹介

このコーナーでは、プログラミング学習コンテンツpaizaラーニングレベルアップ問題集を、PythonとGAS(Google Apps Script)の両方で同じ問題を解いたコードを公開している学習ログです。

Python・GASのどちらの言語のコードも可能な限り詳細に解説致します。
GASはスプレッドシートのエディタを使ってコードを書いております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)


1 つの入力 (paizaランク D 相当)

問題:半角スペースを含まない文字列 s が 1 行で与えられるので、そのまま出力してください。

今回は、下記の入出力例3を用います。

入力例3
paiza813

出力例3
paiza813

ではまず、Pythonで解いてみます。

手順として、

1:標準入力で文字列を取得する

2:取得した文字列を出力する

の2ステップで、行います。

まず、準備として、paiza.ioにこのように入力します。
(入力例3をコピペしたのみ)

コードは下記になります。

#標準入力で文字列を取得する
s=input()

#取得した文字列を出力する
print(s)

プログラムを実行した出力結果です。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

緑色のセルB1の所に入力した文字列を取得して、それをせるB3の黄色い所に出力します。

その際、この黄色く塗りつぶしたセルB3の所に、二次元配列として取得した文字列が格納された配列を出力します。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:配列arrayを宣言して緑色のセルの所を取得して格納する

3:配列arrayに格納出来たことをログ出力で確認する

4:スプレッドシートに出力するため、二次元配列として取得する配列arrays2を宣言する

5:pushメソッドでarray2にarrayを二次元配列として追加する

6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

7:スプレッドシートの黄色いセルに出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

関数「standardInput1」の中にコードを書いていきます。
Standard Inputで標準入力の意味です。

function standardInput1() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}

手順2:緑色のセルB1(1,2)の文字列を取得して配列arrayに格納する

const array=[];

array.push(ss.getRange(1, 2).getValue());

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  //緑色のセルB2を取得して配列arrayを宣言して格納する
  const array=[];
  array.push(ss.getRange(1,2).getValue());
  
}

手順3:配列arrayに格納出来たことをログ出力で確認する

console.log(s);

コードと実行結果です。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  const array=[];
  array.push(ss.getRange(1,2).getValue());
  
  #配列arrayに格納出来たことをログ出力で確認する
  console.log(array);

}

手順4:スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する

const array2 = [];

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  const array=[];
  array.push(ss.getRange(1,2).getValue());
  console.log(array);

  //スプレッドシートに出力するため、二次元配列として取得するarray2を宣言する
  const array2=[];

}

手順5:pushメソッドでs2にsを2次元配列として追加する

array2.push(array);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  const array=[];
  array.push(ss.getRange(1,2).getValue());
  console.log(array);

  
  const array2=[];

  //pushメソッドでarray2にarrayを二次元配列として追加する
  array2.push(array);

}

手順6:スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する

console.log(array2);

コードとログ出力結果です。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  const array=[];
  array.push(ss.getRange(1,2).getValue());
  console.log(array);

  
  const array2=[];
  array2.push(array);

  //スプレッドシートに出力する前にarray2に二次元配列として格納されていることをログ出力で確認する
  console.log(array2);

}

手順7:スプレッドシートの黄色いセルB3に出力する

ss.getRange(3, 2).setValue(s2);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  const array=[];
  array.push(ss.getRange(1,2).getValue());
  console.log(array);

  
  const array2=[];
  array2.push(array);
  console.log(array2);

  //スプレッドシートの黄色いセルB3に出力する
  ss.getRange(3,2).setValue(array2);

}

実行後のスプレッドシートです。


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

よみうりランド、ジュエルミネーション、グッジョ!

← 標準入力その2へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力3」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

【paiza レベルアップ問題集】標準入力その2 「FINAL問題 【半角スペース区切りでの文字列の分割】5 つの文字列の半角スペース区切りでの分割 」をPythonとGASで解いたコード紹介

この記事を読むことで、PythonとGASでsplitメソッドを使って文字列を空白部分で分割してリスト(配列)に格納し、ループを使って出力する方法、Pythonではそのループの記述と対応して、内包表記で書く方法の概要も掴めます。
GASでは二次元配列として取得、出力する方法の概要が掴めます。

このコーナーでは、プログラミング学習コンテンツのpaizaラーニングのレベルアップ問題集の同じ問題をPythonとGAS(Google Apps Script)で解いたコードを掲載しております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)

GAS(Google Apps Script)はスプレッドシートを使ってコードを書いていおります。


【半角スペース区切りでの文字列の分割】5 つの文字列の半角スペース区切りでの分割 (paizaランク D 相当)

問題:文字列one two three four fiveを、半角スペースで分割して出力してください。

入力される値
なし


期待する出力
one two three four fiveを半角スペースで区切り、区切られた文字列を改行区切りにして 5 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

one
two
three
four
five

ではまず、Pythonで解いてみます。


手順として、

1:リストarrayにsplitメソッドを使って空白で文字を区切って配列に入力

2:配列を確認

3:ループで出力

で、行います。

手順1で、文字列「one two three four five」にsplitメソッドを使って空白の所で文字列を分割してリストに代入します。
その部分のコードです。

#文字列を分割してリストarrayに格納
array='one two three four five'.split(' ')

手順2では、リストarrayに分割して文字列がそれぞれ格納したことをprint文で確認します。

array='one two three four five'.split(' ')

#リストarrayをそのまま出力
print(array)

その出力結果です。

手順3では、リストarrayに格納されたことが確認できたので、arrayをループで出力します。そのコードと出力結果です。

array='one two three four five'.split(' ')
print(array)

#ループでリストを出力する
for num in array:
    print(num)

このループの所を内包表記で記述したコードです。先ほどのシンプルなループのコードと比較すると、内包表記が分かりやすくなります。

array='one two three four five'.split(' ')
print(array)

#ループでリストを出力する
for num in array:
    print(num)

#内包表記でリストを出力する
print('--- 内包表記 ---')
[print(num) for num in array]

求められる出力に対して冗長な箇所はコメントアウトします。
Pythonの複数行のコメントアウトは「’」3つの「”’」か「”」3つの「”””」を使います。

array='one two three four five'.split(' ')

'''
print(array)

#ループでリストを出力する
for num in array:
    print(num)

#内包表記でリストを出力する
print('--- 内包表記 ---')
'''

[print(num) for num in array]

提出用にスッキリと最小限のコードに致しました。

#文字列を分割してリストarrayに格納
array='one two three four five'.split(' ')

#内包表記でリストを出力する
[print(num) for num in array]

プログラムを実行した出力結果です。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

この黄色く塗りつぶしたセルの所に二次元配列として取得した文字列が格納された配列を出力します。
空白区切りの文字を分割して配列に格納して、更にループを使って二次元配列にします。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:splitメソッドを使って文字列を分割して配列arrayに代入する

3:分割した文字列が配列arrayに追加出来たことをログ出力で確認する

4:配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する

5:ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する

6:スプレッドシートに出力する前に、ログでarray2を出力して確認する

7:array2をスプレッドシートの黄色いセルに出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

このコードを関数「standardInput3」の中に書いていきます。
Standard Inputで、標準入力の意味です。

function standardInput3() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}

手順2:splitメソッドを使って文字列を分割して配列arrayに代入する

const array=’one two three four five’.split(‘ ‘);

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  //splitメソッドを使って文字列を分割して配列arrayに代入する
  array='one two three four five'.split(' ');
  
}

手順3:分割した文字列が配列arrayに追加出来たことをログ出力で確認する

console.log(array);

コードと実行結果です。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  array='one two three four five'.split(' ');

  //分割した文字列が配列arrayに追加出来たことをログ出力で確認する
  console.log(array);
  
}

手順4:配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する

let array2=[];

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  array='one two three four five'.split(' ');
  console.log(array);

  //配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する
  let array2=[];
  
}

手順5:ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  array='one two three four five'.split(' ');
  console.log(array);

  let array2=[];

  //ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
}

手順6:スプレッドシートに出力する前に、ログでarray2を出力して確認する

console.log(array2);

コードと実行結果です。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  array='one two three four five'.split(' ');
  console.log(array);

  let array2=[];

  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  //スプレッドシートに出力する前に、ログでarray2を出力して確認する
  console.log(array2);

}

手順7:array2をスプレッドシートの黄色いセルに出力する

ss.getRange(2,1,array2.length).setValues(array2);

コードと実行結果です。

function standardInput3() {

  const ss=SpreadsheetApp.getActiveSheet();
  array='one two three four five'.split(' ');
  console.log(array);

  let array2=[];

  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //array2をスプレッドシートの黄色いセルに出力する
  ss.getRange(2,1,array2.length).setValues(array2);

}


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

恵比寿ガーデンプレイス、フランスのクリスタルメーカー、バカラのシャンデリア

←前の問題へ          標準入力その3へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力その2」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

<Gmail1>メール定型文を下書きへGo!

この記事では、GAS(Google Apps script)で会社などに送る決まった文章をスプレッドシートに入力して、ボタンを押すと押した人のGmailの下書きに追加する方法を掲載しています。

お世話になっているサイトは、いつも隣にITのお仕事さんの

GASでGmailを操作して日々の日報メールの下書きを自動で作成する

です。

得意先の方にいつも同じような文章を送る時、上司に同じような報告を送るといった場合に使えるテクニックです。

この例では、得意先の「株式会社あいうえお」の営業部長のヤマダさんに送る例で作成して行きます。

このようにスプレッドシートを配置します。

シート名はこのようにしました。

このスプレッドシートを二次元配列として取得して、createDraftメソッドを使って「Gmailの下書き」に保存します。

なぜ二次元配列なのかと申しますと、スプレッドシートはExcel、将棋やオセロのような縦横の座標になっているからです。

二次元、すなわち平面の座標を格納する配列です。

メソッドというのは、動作のことです。この例ではGmailの下書きの所に送るという動作です。

「メソッド」というとちょっと分かりづらいという方は、メソッドを数学の公式みたいなものだと捉えて頂いても大体掴めて来ると思います。

例えば3角形の公式に必要なのは「底辺」と「高さ」の値です。この底辺と高さの値が引数に当たり、底辺×高さ÷2で三角形の面積を求めて計算する動作がメソッドに当たります。

createDraftメソッドはこのスプレッドシートのボタンを押した人のGmailの下書きの所に移動させるメソッドです。

引数(メソッドを利用する際に必要となるもの)は「アドレス、タイトル、本文」です。

アドレスをto、タイトルをsubjectという定数、本文をbodyという変数に格納して、このcreateDraftメソッドを使います。

アドレスとタイトルは変わらないので定数、本文はこのプログラムでは何も無い所に「誰々さん」、「お世話になっています・・・」などと追加していくので変数です。

今回の例では、本文が最初何も無い所に「宛名の人名」+「その後の挨拶や文章」が加えられて行きます。

定数も変数もAmazonなどの段ボール箱に例えられ、箱の中に値を入れるイメージですが、定数は箱の中身を接着剤で固定して動かないようにするもの、変数は「魔法の壺」を入れたり、今日私が購入した「光目覚まし時計」を入れたりと、色々と中身を変えること(追加や変更、削除が出来る)でイメージが掴めて来るかと思います。

さて、今回使う下書きに送るcreateDraftメソッドの書式は、

createDraft(アドレス,タイトル,本文);

になります。

では、コードを詳細に見て行きます。

const values=SpreadsheetApp.getActiveSheet().getDataRange().getValues();

長ったらしいですが、最初のSpreadsheetAppがスプレッドシートの1番トップの所、次のgetActiveSheet()が現在のシート、何で()となっているのかは、三角形の面積と違って、特に使うのに必要なものが無いからです。

その次のgetDataRange()は、このスプレッドシートのデータを二次元配列として取得するメソッドです。なので、スプレッドシートに書かれている値がそのまま二次元配列として取得できます。具体的には、配列valuesの[0][1]が得意先のヤマダ部長のアドレスで、values[3][1]が本文になっています。配列は先頭が0番目で次が1番目・・・と続きます。

最後のgetValues()で値が取得されます。

3番目のgetDataRange()で金魚すくいの網を貼って、最後のgetValues()で実際に釣り上げるイメージです。

const to=values[0][1];

ここでは、二次元配列valuesの座標[0][1]のところのアドレス「yamada@aiueo.co.jp」を、定数toに格納しています。

const subject=values[1][1];

ここでは、二次元配列valuesの座標[1][1]のところの「2月度のご案内」を、定数subjectに格納しています。

let body=””;

ここでは空の状態の本文を変数bodyに格納しています。この後文章を追加していくので、一旦からの物を用意する感じです。

body+=values[2][1]+’\n’;

ここでは配列valuesの[2][1]にある「株式会社あいうえお 営業部長ヤマダ様」をbodyに追加しています。+=については、

A=A+Bを、

A+=Bと書くことが出来ます。

また、’\n’とバックスラッシュnを加えることによって改行させています。

body+=values[3][1]+’\n’;

ここで、bodyに「お世話になっております・・・」を加えます。

これで、メソッドcreateDraftを使う(アドレス、タイトル、本文)が求まったので、下記のコードでGmailの下書きに入れられます。

GmailApp.createDraft(to,subject,body);

非常にシンプルなコードですが、これで以上です。

ここまでのコードをまとめます。

function createDraft() {

  //スプレッドシートのトップから現在のアクティブシートに階層を辿ってアクセスして、データを二次元配列として取得する
  const values=SpreadsheetApp.getActiveSheet().getDataRange().getValues();

  //相手先のアドレスを定数toに格納
  const to=values[0][1];

  //題名を定数subjectに格納
  const subject=values[1][1];
  
  //本文を定数bodyに格納し、改行して追加
  let body="";
  body+=values[2][1]+'\n';
  body+=values[3][1]+'\n';

  //Gmailの下書きへGo!!
  GmailApp.createDraft(to,subject,body);
  
}

ボタンを押すと、押した人のGmail の下書きにこの様に保存されます。

このシートをコピーして社内用に使い回して株式会社あいうえおのヤマダ部長との会議を上司のサトウ課長に報告することも可能です。

シートをコピーして、名前を変えます。

スプレッドシートの画面です。ボタンを押して作れた下書きです。

お疲れ様でした。ブレイクタイムフォトは、今2月なのに季節外れですが、六本木ヒルズで撮影したハロウィンの写真です。

・関連記事
六本木ヒルズ、ハロウィンでトリックオアトリート!?

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

プログラミングのアンケートにご協力頂ける方はこちらのフォームで勉強法など色々と教えて下さい。

【paiza レベルアップ問題集】標準入力その2 「STEP: 2 3 つの文字列の半角スペース区切りでの分割」をPythonとGASで解いたコード紹介

この記事を読むことで、PythonとGASでsplitメソッドを使って文字列を空白部分で分割してリスト(配列)に格納し、ループを使ってリストを出力する方法、Pythonでは通常のループ対応して、内包表記で書く方法の概要も掴めます。
また、GASでは二次元配列として取得、出力する方法の概要が掴めます。

このコーナーでは、プログラミング学習コンテンツのpaizaラーニングのレベルアップ問題集の同じ問題をPythonとGAS(Google Apps Script)で解いたコードを掲載しております。

GAS(Google Apps Script)はスプレッドシートを使ってコードを書いていおります。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)


3 つの文字列の半角スペース区切りでの分割 (paizaランク D 相当)

問題:
文字列He likes paizaを、半角スペースで分割して出力してください。

入力される値
なし

期待する出力
He likes paizaを半角スペースで区切り、区切られた文字列を改行区切りにして 3 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

He
likes
paiza

ではまず、Pythonで解いてみます。


手順として、

1:リストarrayにsplitメソッドを使って空白で文字を区切って配列に入力

2:配列を確認


3:ループで出力

で、行います。

手順1で、文字列「He likes paiza」にsplitメソッドを使って文字を分割します。
その部分のコードです。

#splitメソッドで分割した文字列をリストarrayに代入
array='He likes paiza'.split(' ')

手順2では、リストarrayに分割して文字列がそれぞれ格納したことをprint文で確認します。

array='He likes paiza'.split(' ')

#リストarrayをそのまま出力
print(array)

その出力結果です。

リストarrayに格納されたことが確認できたので、arrayをループで出力します。
そのコードと出力結果です。
arrayの中の文字をwordに格納してループが終了するまで出力しています。

array='He likes paiza'.split(' ')
print(array)

#リストarrayをループで改行して出力する
for word in array:
    print(word)

このループの所を内包表記で記述したコードです。

array='He likes paiza'.split(' ')
print(array)

#リストarrayをループで改行して出力する
for word in array:
    print(word)

#内包表記で出力する
print('----内包表記----')
[print(word) for word in array]

求められる出力に対して冗長な箇所はコメントアウトします。
複数行のコメントアウトは、「’」を3つの「”’」か、「”」を3つの「”””」を使います。

array='He likes paiza'.split(' ')
'''
print(array)

#リストarrayをループで改行して出力する
for word in array:
    print(word)

#内包表記で出力する
print('----内包表記----')
'''
[print(word) for word in array]

提出用にスッキリとした最小限のコードに致しました。

array='He likes paiza'.split(' ')
[print(word) for word in array]

プログラムを実行した出力結果です。


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

この黄色く塗りつぶしたセルの所に二次元配列として取得した文字列が格納された配列を出力します。
空白区切りの文字を分割して配列に格納して、更にループを使って二次元配列にします。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:splitメソッドを使って文字列を分割して配列arrayに代入する

3:分割した文字列が配列arrayに追加出来たことをログ出力で確認する

4:配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する

5:ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する

6:スプレッドシートに出力する前に、ログでarray2を出力して確認する

7:array2をスプレッドシートの黄色いセルに出力する


手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

このコードを関数「standardInput2」の中に書いていきます。
Standard Inputで、「標準入力」の意味です。

function standardInput2() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

}

手順2:splitメソッドを使って文字列を分割して配列arrayに代入する

const array=’He likes paiza’.split(‘ ‘)

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();

  //splitメソッドを使って文字列を分割して配列arrayに代入する
  const array='He likes paiza'.split(' ');

}

手順3:分割した文字列が配列arrayに追加出来たことをログ出力で確認する

console.log(array);

コードと実行結果です。

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');


  //分割した文字列が配列arrayに追加出来たことをログ出力で確認する
  console.log(array);

}

手順4:配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する

let array2=[];

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');
  console.log(array);

 //スプレッドシートに出力する二次元配列array2を宣言
  let array2=[];

}

手順5:ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');
  console.log(array);

  let array2=[];

  //ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する
   for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
}

手順6:スプレッドシートに出力する前に、ログでarray2を出力して確認する

console.log(array2);

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');
  console.log(array);

  let array2=[];

   for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  //スプレッドシートに出力する前に、ログでarray2を出力して確認する
  console.log(array2);

}

手順7:array2をスプレッドシートの黄色いセルに出力する

ss.getRange(2,1,array2.length).setValues(array2);

function standardInput2() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='He likes paiza'.split(' ');
  console.log(array);

  let array2=[];

   for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //array2をスプレッドシートの黄色いセルに出力する
  ss.getRange(2,1,array2.length).setValues(array2);

}

実行後のスプレッドシートです。


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

お台場の観覧車です。
扇風機みたいですね(笑)

←前の問題へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力その2」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介

<ねこフォーム実践編3>著書「就職氷河期世代&大人の発達障害」の読者アンケート

この記事では、GAS(Google Apps script)を使って、私が2012年に書いた「就職氷河期世代&大人の発達障害」の読者様を対象としたアンケートを作成したコードを公開します。

まず、「就職氷河期世代&大人の発達障害」について、内容紹介のYouTube動画と購入先、アンケートのGoogleフォームを掲載します。

● 本のプロモーションビデオ

● 購入先は自己紹介と著作本から

● 完成した読者アンケート

読者アンケートも宜しくお願いします。

アンケートは上記のフォームから投票出来ます。

GASでのプログラミングでお世話になっているサイトは、いつも隣にITのお仕事さんの

GASでGoogleフォームを一発で作成するツールを作る

です。

まず、下記のような3枚のスプレッドシートを用意します。

・シート「トップ画面」

ここには、ボタンを設置して、このボタンを押すとフォームが作れるようにします。

・シート「フォームのタイトルと説明の情報」

ここには、作成するフォームのタイトルと説明文を入れます。

・シート「項目データ」

ここには、アンケート回答者がラジオボタン、チェックボックス、リストアイテムから選択出来るようスプレッドシートに配置しています。

このデータを二次元配列として取得して、各列ごとに1次元配列に変換して、ラジオボタンなどから選択出来るようにしています。

まず、スプレッドシートのボタンを押すとフォームが作れる関数、「pushButton」を作ります。

シート「フォームのタイトルと説明の情報」を二次元配列arrayとして取得して、array[0][1]をタイトル、array[1][1]をフォームの説明文として取得しています。

function pushButton() {

  //スプレッドシートのトップから現在のスプレッドシートにアクセスする 
  const ss=SpreadsheetApp.getActiveSpreadsheet();
  

  //フォームのタイトルと説明を取得
  const array=ss.getSheetByName('フォームのタイトルと説明の情報').getDataRange().getValues();
  const formTitle=array[0][1];//タイトル
  const formDescription=array[1][1];//概要

  
  //フォームを指定のタイトルと説明の元、作成する
  const form=FormApp.create(formTitle);  
  form.setDescription(formDescription);
 }

この部分ではフォームのプレビュー画面でこの様になります。

また、フォームにニックネームのテキストアイテムを追加します。

form.addTextItem().setTitle('ニックネームまたはイニシャル\n本名以外でお願いします。').setRequired(true);

ニックネームのテキストアイテム入力のプレビュー画面です。

では、いよいよスプレッドシートのシート「項目データ」からデータを取得して、フォームを作成して行きます。

まず、シート「項目データ」を二次元配列として取得するために、下記のコードを書きました。

//項目データからフォームに追加するアイテムの内容を取得
  const dataValues=ss.getSheetByName('項目データ').getDataRange().getValues();
  dataValues.shift()

このコードでは、定数dataValuesにシートを二次元配列として取得したデータを格納して、先頭のタイトル行をshisft()で削除しています。

この二次元配列の各行をフォームのアイテムから選択出来るように一次元配列に変換して、更に空白行を取り除く関数generateArrayを作成しました。

引数に二次元配列のデータとその行を指定して関数generateArrayに送ります。

ここではmapで一次元配列に変換して、filterで空白行を取り除いています。

/**
 * シート「項目データ」全体の値を取得した二次元配列から、指定の列のデータを抜き出し一次元配列を構成する 
 * 
 * @param{Object[][]}シートのデータを二次元配列化とした配列
 * @param{number}配列の列数(0以上のインデックス)
 * @return{Object{}}指定の列(見出しを除く)のデータによる一次元配列
 */
function generateArray(values,column){
  return values.map(record=>record[column]).filter(value=>value);
}

関数呼び出し時には、下記のように指定しました。

A列「性別」は、ラジオボタンで、

generateArray(dataValues,0)

と記述し、引数に二次元配列のデータと列数を指定することで「性別」が選択出来ます。

テキストアイテムで学校名を入力します。

form.addMultipleChoiceItem()    //ラジオボタン
    .setTitle('性別')
    .setChoiceValues(generateArray(dataValues,0))
    .setRequired(true);

B列「ご年齢」の呼び出しは、リストアイテムで、

generateArray(dataValues,1)

です。

  form.addListItem()              //リストアイテム
    .setTitle('ご年齢')
    .setChoiceValues(generateArray(dataValues,1))
    .setRequired(true);

C列「お住まいの都道府県」はリストアイテムで、

generateArray(dataValues,2)

です。その他の項目も選択出来ます。

form.addListItem()              //リストアイテム
    .setTitle('お住まいの都道府県は?')
    .setChoiceValues(generateArray(dataValues,2))
    .setRequired(true);

C列「ご出身の都道府県」はリストアイテムで、

generateArray(dataValues,2)

です。

 form.addListItem()              //リストアイテム
    .setTitle('ご出身の都道府県は?')
    .setChoiceValues(generateArray(dataValues,2))
    .setRequired(true);

これはリストアイテムのタイトルを変えて2回呼び出しています。1回目の呼び出しはお住まい、2回目はご出身です。
ここまでのプレビュー画面です。

D列「あなたについて教えてください」はラジオボタンで、

generateArray(dataValues,3)

です。

これもその他を選択出来るようにしています。

 form.addMultipleChoiceItem()              //ラジオボラン
    .setTitle('あなたについて教えて下さい。')
    .setChoiceValues(generateArray(dataValues,3))
    .showOtherOption(true)//その他の選択肢
    .setRequired(true);

E列「この本を知ったきっかけを教えてください」はチェックボタンで、

generateArray(dataValues,4)

です。

これもその他を選択出来るようにしています。

form.addCheckboxItem()    //チェックボックス
    .setTitle('この本を知ったきっかけを教えて下さい')
    .setChoiceValues(generateArray(dataValues,4))
    .showOtherOption(true)//その他の選択肢
    .setRequired(true);

ここまでのプレビュー画面です。

この本を5段階評価で選択出来るようにスケールアイテムを使っています。

  //スケールアイテム
    form.addScaleItem().setTitle('この本を5段階評価で教えて下さい。\n 1:不満足 〜 5:大変良い').setRequired(true);

最後は自由に記入できるコメント入力用パラグラフテキストアイテムです。

  //長文パラグラフテキストアイテムコメント欄
    form.addParagraphTextItem().setTitle('ご意見ご感想などコメント欄');

マイドライブに保存する場合はここまででも良いのですが、指定のドライブに保存したい場合は、プロパティストアというものを使って、フォルダIDをFOLDER_IDという文字列に保存します。

フォルダIDはこちらになります。

このモザイク部分をXXXが32桁の所に実際のこちらのコードでFOLDER_IDに保存します。

//フォームを保存したいドライブのIDを指定して、1番最初に実行する。
function setScriptProperty(){
  PropertiesService.getScriptProperties().setProperty('FOLDER_ID','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
}

その実行画面です。

この様に何も起こらないので不安になるかと思います。

そこで、FOLDER_IDに格納出来たのか確認するコードを書きました。

//プロパティストアにフォルダIDが格納されたことを確認する
function getScriptProperty(){
  const folderid=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');
  console.log(folderid);
}

実行結果です。

あとはメインのpushButton関数に下記の4行のコードを追記します。

プロパティストアからFOLDER_IDを取り出して、フォームをそこに格納し、マイドライブに出来てしまったフォームの方は削除します。

 //指定のフォルダに保存する。この4行をコメントアウトするとマイドライブ(ルートディレクトリ)に保存される
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//格納するフォルダIDを取り出す
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームをオブジェクトとして取得
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにFileオブジェクトを追加する
  DriveApp.getRootFolder().removeFile(formFile);//マイフォルダからFileオブジェクトを削除する

コメントにもある様、マイドライブ(ルードディレクトリ)に保存したい場合は、一旦コメントアウトをしておいても状況に寄っては宜しいかもしれません。

ここまでの説明で、もう少し詳しくプロパティストアについて知りたいという方は、

<ねこフォーム2>GASで作成したフォームを指定のフォルダに格納する

をご覧ください。

では、これまでのコードをまとめます。

/**
 * シート「項目データ」全体の値を取得した二次元配列から、指定の列のデータを抜き出し一次元配列を構成する 
 * 
 * @param{Object[][]}シートのデータを二次元配列化とした配列
 * @param{number}配列の列数(0以上のインデックス)
 * @return{Object{}}指定の列(見出しを除く)のデータによる一次元配列
 */
function generateArray(values,column){
  return values.map(record=>record[column]).filter(value=>value);
}


function pushButton() {

  //スプレッドシートのトップから現在のスプレッドシートにアクセスする 
  const ss=SpreadsheetApp.getActiveSpreadsheet();
  

  //フォームのタイトルと説明を取得
  const array=ss.getSheetByName('フォームのタイトルと説明の情報').getDataRange().getValues();
  const formTitle=array[0][1];//タイトル
  const formDescription=array[1][1];//概要

  
  //フォームを指定のタイトルと説明の元、作成する
  const form=FormApp.create(formTitle);  
  form.setDescription(formDescription);
 

 //項目データからフォームに追加するアイテムの内容を取得
  const dataValues=ss.getSheetByName('項目データ').getDataRange().getValues();
  dataValues.shift()

 form.addTextItem().setTitle('ニックネームまたはイニシャル\n本名以外でお願いします。').setRequired(true);


  form.addMultipleChoiceItem()    //ラジオボタン
    .setTitle('性別')
    .setChoiceValues(generateArray(dataValues,0))
    .setRequired(true);

  form.addListItem()              //リストアイテム
    .setTitle('ご年齢')
    .setChoiceValues(generateArray(dataValues,1))
    .setRequired(true);

  form.addListItem()              //リストアイテム
    .setTitle('お住まいの都道府県は?')
    .setChoiceValues(generateArray(dataValues,2))
    .setRequired(true);


  form.addListItem()              //リストアイテム
    .setTitle('ご出身の都道府県は?')
    .setChoiceValues(generateArray(dataValues,2))
    .setRequired(true);

  
  form.addMultipleChoiceItem()              //ラジオボラン
    .setTitle('あなたについて教えて下さい。')
    .setChoiceValues(generateArray(dataValues,3))
    .showOtherOption(true)//その他の選択肢
    .setRequired(true);


  form.addCheckboxItem()    //チェックボックス
    .setTitle('この本を知ったきっかけを教えて下さい')
    .setChoiceValues(generateArray(dataValues,4))
    .showOtherOption(true)//その他の選択肢
    .setRequired(true);

    //スケールアイテム
    form.addScaleItem().setTitle('この本を5段階評価で教えて下さい。\n 1:不満足 〜 5:大変良い').setRequired(true);

    //長文パラグラフテキストアイテムコメント欄
    form.addParagraphTextItem().setTitle('ご意見ご感想などコメント欄');
  

  //指定のフォルダに保存する。この4行をコメントアウトするとマイドライブ(ルートディレクトリ)に保存される
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//格納するフォルダIDを取り出す
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームをオブジェクトとして取得
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにFileオブジェクトを追加する
  DriveApp.getRootFolder().removeFile(formFile);//マイフォルダからFileオブジェクトを削除する


}


//フォームを保存したいドライブのIDを指定して、1番最初に実行する。
function setScriptProperty(){
  PropertiesService.getScriptProperties().setProperty('FOLDER_ID','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
}


//プロパティストアにフォルダIDが格納されたことを確認する
function getScriptProperty(){
  const folderid=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');
  console.log(folderid);
}

あとはスプレッドシートのトップ画面のボタンの右上3点リーダーからスクリプトを「pushButton」に割り当てて押すと、あなたが指定したフォルダ、またはマイドライブに保存されます。

お疲れ様でした、ブレイクタイムフォトはこちらになります。

東京都葛飾区、水元公園 2018年コロナ前のゴールデンウィークにサイクリング

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←<ねこフォーム実践編2>プログラミングのアンケートに戻る

【paiza レベルアップ問題集 】標準入力その2「STEP: 1 2 つの文字列の半角スペース区切りでの分割」をPythonとGASで解いたコード紹介

この記事を読むことで、PythonとGASでsplitメソッドを使って、文字列を空白部分で分割してリスト(配列)に格納し、ループを使ってリストを出力する方法、Pythonではそのループの記述と対応して、内包表記で書く方法、GASでは二次元配列として取得、出力する方法を掲載致しました。

このコーナーでは、プログラミング学習コンテンツのpaizaラーニングのレベルアップ問題集の同じ問題をPythonとGAS(Google Apps Script)で解いたコードを掲載しております。

Pythonではpaizaに入会しなくても問題集を解きたい方向けにpaiza.ioを用いております。paiza.ioの使い方はこちらから。

(入会するか否かは問題集を解いて見てからの読者様のご判断にお任せ致します。
どちらの選択をされても記事を読めるようになっておりますので、安心して下さい。)

GAS(Google Apps Script)はスプレッドシートを使ってコードを書いていおります。


1 2つの文字列の半角スペース区切りでの分割 (paizaランク D 相当)

問題:
文字列Hello paizaを、半角スペースで分割して出力してください。

入力される値
なし

期待する出力
Hello paizaを半角スペースで区切り、区切られた文字列を改行区切りにして 2 行で出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

Hello
paiza

ではまず、Pythonで解いてみます。
今回は、paiza.ioを使って解きます。paiza.ioの使い方はこちらから。

手順として、

1:リストarrayにsplitメソッドを使って空白で文字を区切って配列に入力

2:配列を確認

3:ループで出力

で、行います。

手順1で、文字列「Hello paiza」にsplitメソッドを使って文字を分割します。
その部分のコードです。

#配列arrayにsplitメソッドで空白を区切りにして格納する
array='Hello paiza'.split(' ')

手順2でリストarrayに分割して文字列がそれぞれ格納したことをprint文で確認します。

array='Hello paiza'.split(' ')

#配列arrayをそのまま出力
print(array)

その出力結果です。

リストarrayに格納されたことが確認できたので、arrayをループで出力します。
変数msgに配列の中身を順番に代入して出力しています。
そのコードと出力結果です。

array='Hello paiza'.split(' ')

print(array)

#配列arrayをループで出力
for msg in array:
    print(msg)

このループの所を内包表記で記述したコードと出力結果です。

array='Hello paiza'.split(' ')

print(array)

for msg in array:
    print(msg)
    
#配列arrayをループで出力する所を内表表記で記述
[print(msg) for msg in array]

配列arrayの出力確認や通常のループと内包表記の2度使っている箇所が冗長ですのでコメントアウトしたコードです。

array='Hello paiza'.split(' ')

#print(array)

'''
for msg in array:
    print(msg)
'''
    
#配列arrayをループで出力する所を内表表記で記述
[print(msg) for msg in array]

出力結果です。

最後に提出用にスッキリと最小限のコードに致しました。

array='Hello paiza'.split(' ')

#配列arrayをループで出力する所を内表表記で記述
[print(msg) for msg in array]


今度は、同じ問題をGASで解いてみます。
まず、スプレッドシートにこの様に配置しました。

この黄色く塗りつぶしたセルの所に二次元配列として取得した文字列が格納された配列を出力します。空白区切りの文字を分割して配列に格納して、更にループを使って二次元配列にします。

※スプレッドシートに表示する場合は、二次元配列としての配列に追加をして作成します※

手順はこのようになります。

1:SpreadSheetAppから階層を辿って現在のシートにアクセスする

2:splitメソッドを使って文字列を分割して配列arrayに代入する

3:分割した文字列が配列arrayに追加出来たことをログ出力で確認する

4:配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する

5:ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する

6:スプレッドシートに出力する前に、ログでarray2を出力して確認する

7:array2をスプレッドシートのセルA2を起点とした黄色いセルに出力する

手順1: SpreadSheetAppから階層を辿って現在のシートにアクセスする

const ss = SpreadsheetApp.getActiveSheet();

ここで定数ssにSpreadsheetAppから階層を辿ってアクティブシートにアクセスしています。

このコードを関数「standardInput1」の中に書いていきます。
Standard Inputで、標準入力の意味です。

function standardInput1() {

  //SpreadSheetAppから階層を辿って現在のシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();
  
}

手順2:splitメソッドを使って文字列を分割して配列arrayに代入する

const array=’Hello paiza’.split(‘ ‘);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  
  //splitメソッドを使って文字列を分割して配列arrayに代入する
  const array='Hello paiza'.split(' ');

}

手順3:分割した文字列が配列arrayに追加出来たことをログ出力で確認する

console.log(array);

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='Hello paiza'.split(' ');
  
  //分割した文字列が配列arrayに追加出来たことをログ出力で確認する
  console.log(array);

}

手順4:配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する

let array2=[];

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='Hello paiza'.split(' ');
  console.log(array);

  //配列arrayに格納された文字列を二次元配列として追加する配列array2を宣言する
  let array2=[];

}

手順5:ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='Hello paiza'.split(' ');
  console.log(array);

  let array2=[];

  //ループを使ってarrayに格納された文字列を二次元配列としてarray2に追加する
  for (let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
}

手順6:スプレッドシートに出力する前に、ログでarray2を出力して確認する

console.log(array2);

コードと出力結果です。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='Hello paiza'.split(' ');
  console.log(array);

  let array2=[];

  for (let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
  
  //スプレッドシートに出力する前に、ログでarray2を出力して確認する
  console.log(array2);

}

手順7:array2をスプレッドシートのセルA2を起点とした黄色いセルに出力する

ss.getRange(2,1,array2.length).setValues(array2);

セルA2(2,1)を起点として、配列の長さ分だけ黄色い所に出力します。

function standardInput1() {

  const ss=SpreadsheetApp.getActiveSheet();
  const array='Hello paiza'.split(' ');
  console.log(array);

  let array2=[];

  for (let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
  
  console.log(array2);

  //スプレッドシートのセルA2を起点とした黄色いセルに出力する
  ss.getRange(2,1,array2.length).setValues(array2);

}

実行後のスプレッドシートです。


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

よみうりランドのジュエルミネーションの鉛筆工場です。
Xmasの時期に撮影しました。

←標準入力その1へ          次の問題へ→

ご精読有難うございました。

■ GASの入門書の紹介です ■

詳解! Google Apps Script完全入門 [第3版]
単行本
Kindle版(電子書籍)

■ 関連記事 ■

paizaレベルアップ問題集「標準入力その2」へ戻る
paizaレベルアップ問題集_PythonとGASのコード紹介トップページへ

写真クリエイターとしての活動
自己紹介