paiza レベルアップ問題集 標準入力その6「STEP: 3 1 行目で与えられる N 個の整数の入力」をPythonとGASの両方で解いたコードの紹介

この記事を読むことで、Pythonで標準入力とsplitなどのメソッドを複数用いて、リスト(配列)に数値を格納して、個数を除いたリスト内の数値をループの中で出力することが可能になります。

GASではスプレッドシートで値を取得して、二次元配列に格納して出力しています。

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

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

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

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


1 行目で与えられる N 個の整数の入力 (paizaランク D 相当)

問題:
1 行目で、整数 N と、続けて N 個の整数 a_1, … , a_N が半角スペース区切りで与えられます。
a_1, … , a_N を改行区切りで出力してください。

ではまず、Pythonで解いて行きます。


手順として、

1: 1行目の整数を標準入力で数値として取得する際、標準入力と幾つかの関数を使って、数値の個数と出力する数値を全てリストarrayに格納する

2: リスト(添字0から始まる)の1番目の添字0の要素を数値の個数Nとする


3: リストの2番目の添字1の要素から最後の添字N-1の要素までをループで出力する

・シンプルなループ
・上記の内包表記

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

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

入力例1
13 5085 2923 8669 3231 7032 73 2683 8317 5545 9774 7179 2646 2470

出力例1
5085
2923
8669
3231
7032
73
2683
8317
5545
9774
7179
2646
2470

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

この一番初めの13は、次の「5085」〜「2470」までの数値の個数13個を表しています。

まずはこの1行全てを標準入力で、いくつかの関数も使って数値として取得して、リストの形に変換してarrayに格納します。

このコード1行に複数の関数を使用しているので、今回の例に即して簡潔にお伝えします。

input … 標準入力で文字や数値を取得する

split … 指定の区切り文字で分割して取得する

int … 上記 inputで取得する対象が整数である


map … 関数をまとめて適用


list … リスト(配列)変換

上記の関数を用いてコードを掲載致します。

splitの区切り文字の指定は、問題文の通り半角スペースです。

関数が沢山に色々出て来てしまいましたので、まずは、標準入力で取得した数値がリスト(配列)形式でarrayに取得出来たことをprint文で出力して確認します。

#1行分をリストとして取得してarrayに格納
array=list(map(int,input().split(' ')))

#arrayにリストの形式で数値が格納されていることを確認
print(array)

この様にリストとして格納出来ました。

この先頭のarray[0]に当たる13を数値の個数Nとして取得と確認をします。

array=list(map(int,input().split(' ')))
print(array)

#数値の個数Nにarray[0]を代入する
N=array[0]

#Nに代入出来たことを確認する
print(N)

N=13が正しく代入されたことが確認出来ました。
この状態で、配列の2番目のarray[1]=5085 〜 配列の末尾array[13]までループで出力します。

その際、ループの開始条件の指定では、

for i in range(1,N+1):

と記述します。

これは、ループの添字(インデックス)のiが、i=1,2, … 13の要素を取得する際、rangeの終わりの値はその数未満、つまり12になってしまうので、Nに1を足す必要があります。

この説明が分かり辛いかもしれませんので、まずはN+1の「+1を省いて」出力致します。

array=list(map(int,input().split(' ')))
#確認用の為、コメントアウト
#print(array)

N=array[0]

#確認用の為、コメントアウト
#print(N)

#ループをi=1からNと指定して出力
for i in range(1,N):
    print(array[i])

このコードの出力結果ですが、array[12]の「2646」までしか出力されておらず、最後のarray[13]の「2470」が抜けた結果になっています。

これで視覚的にrange(1,N)だと、Nが13だから13未満の12までしかループが回らないことが確認出来ましたので、この部分をrange(1,N+1)に修正したコードと実行結果を掲載致します。

(確認用に出力したコメントアウトした分は削除しました。)

array=list(map(int,input().split(' ')))
N=array[0]

#ループをi=1からN+1と指定して出力
for i in range(1,N+1):
    print(array[i])


更にコード短くする方法として、内包表記を用います。

[出力結果のprint文 for から「:」の直前まで]

今回の例ですと、

[print(array[i]) for range(1,N+1)]

とループが1行のコードで出力可能になります。

array=list(map(int,input().split(' ')))
N=array[0]

#ループを内包表記で出力
[print(array[i]) for i in range(1,N+1)]   

これでループの部分が1行とスッキリした記述になりました。

Pythonは以上です。
次は、GASで解いて行きます。


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

緑のセルA2(2,1)の数値を取得し、最初の数値13を数値の個数として定数Nに代入して、2番目の数値から最後までをC2(2,3)から始まる黄色いセルに出力します。

その際、この黄色いセルの範囲には、二次元配列として取得した整数が格納された配列を出力します。

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

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

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

2: 緑色のセルA2(2,1)の数値を個数13個と、その後の13個分の数値をsplitメソッドを用いて配列としてarrayに取得する


3: 取得した配列arrayをログ出力する


4: 配列の先頭の添字0の要素array[0]をNに代入してN=13になることを確認する


5: 空の配列array2を宣言して、arrayの2番目array[1]から最後の要素array[13]を二次元配列array2に格納する


6: スプレッドシートに出力前にarray2が二次元配列として数値を格納出来たことをログ出力して確認する


7: 二次元配列array2をスプレッドシートのC2(2,3)から始まる黄色いセルに出力する


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

const ss = SpreadsheetApp.getActiveSheet();

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

コードを関数「standardInput3」に書いて行きます。

Standard Inputで標準入力の意味です。

function standardInput3() {

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

}


手順2:緑色のセルA2(2,1)の数値を個数13個と、その後の13個分の数値をsplitメソッドを用いて配列としてarrayに取得する

splitの区切り文字の指定は、問題文の通り半角スペースです。

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

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();

  //緑のセルA2の数値の個数と数値をsplitメソッドを用いて配列として取得
  const array=ss.getRange(2,1).getValue().split(' ');

}


手順3:取得した配列arrayをログ出力する

console.log(array);

コードと実行結果です。

function standardInput3() {
  
  const ss=SpreadsheetApp.getActiveSheet();
  const array=ss.getRange(2,1).getValue().split(' ');

  //取得した配列arrayをログ出力する
  console.log(array);

}


手順4:配列の先頭の添字0の要素array[0]をNに代入してN=13になることを確認する

const N=array[0];

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

  //配列の先頭の添字0の要素数array[0]をNに代入する
  const N=array[0];

  //Nをログ出力で確認する
  console.log(N);

}

実行結果のログです。


手順5:空の配列array2を宣言して、arrayの2番目array[1]から最後の要素array[13]を二次元配列array2に格納する

空の配列array2にpushメソッドを使ってarray[1]からarray[13]までを二次元配列になるようループで格納します。

ループの中で、array[i]の値が1から13まで変わるので変数としてletで宣言しています。
また、二次元配列になる様に、[array[i]]と配列array全体を[ ]で括っています。

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

  const N=array[0];
  console.log(N);

  //スプレッドシート出力用の空の配列array2を宣言
  const array2=[];

  //配列arrayの2番目から最後の要素を二次元配列になるようにarray2に格納する
  for(let i=1;i<=N;i++){
    array2.push([array[i]]);
  }

}


手順6:スプレッドシートに出力前にarray2が二次元配列として数値を格納出来たことをログ出力して確認する

console.log(array2);

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

無事に二次元配列として格納されたことが確認出来ました。


手順7:二次元配列array2をスプレッドシートのC2(2,3)から始まる黄色いセルに出力する

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

C2が(2,3)で、N行出力するのでgetRangeに(2,3,N)と指定します。
また1列の(2,3,N,1)の1は省略可能です。

また、配列の数値は複数ですので、setValuesとsを付けて複数形にします。

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

GASは以上です。

※ この記事の作成に参考になったサイトです ※
ありがとうございます。

Python mapの使い方


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

横浜みなとみらい、ランドマークタワーの夜景と観覧車です。

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

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

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

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

■ 関連記事 ■

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

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

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

この記事を読むことで、Pythonの標準入力で半角スペース区切りの整数をsplitメソッドを使って10個取得し、配列に格納して10行の整数を出力するコードの概要が掴めます。

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

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

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

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


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

問題:

整数 a_1, a_2, … , a_9, a_10 が半角スペース区切りで与えられるので、改行区切りにして 10 行で出力してください。

ではまず、Pythonで解いて行きます。


手順として、

1:標準入力でsplitメソッドを使って半角スペース区切りの整数をリストで取得する

2:取得したリストをループで出力する

・シンプルなループ
・リスト出力に適したループ
・上記の内包表記  

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

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

入力例1
10 9 8 7 6 5 4 3 2 1

出力例1
10
9
8
7
6
5
4
3
2
1

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

下記のコードで入力と出力を行いますが、1行に複数の関数が使われているので、今回の例に即して簡潔にお伝えします。

input … 標準入力で文字や数値を取得する

split … 指定の区切り文字で分割して取得する

int … 上記で取得する対象が整数である


rstrip … 右側にある不要な空白を取り除く


map … 関数をまとめて適用


list … リスト(配列)変換

上記の関数を用いてコードを掲載致します。
関数が沢山に色々出て来てしまいましたので、まずは、標準入力で取得した数値がリスト(配列)形式でarrayに取得出来たことをprint文で出力して確認します。

#10つの整数を標準入力で取得し右側の不要な空白を削除してリストにする
array=list(map(int,input().rstrip().split(' ')))

#arrayが配列として取得できたことを確認する
print(array)

まずは、リストとして出力出来ました。

では、リストarrayをループを用いて解答の出力例に沿って縦に出力します。

ループを用いる前にリストarrayの長さを調べて、リストは0からarray[0]、array[1] …array[9]になるので後ほどループの回数に使用する、リストarrayの長さが10(0,1,2,3,4,5,6,7,8,9の10つ)になることをlen関数を用いて確認します。

array=list(map(int,input().rstrip().split(' ')))
print(array)

#リストの長さを求める
print(len(array))

このコードで、リストarrayの長さが10であることが確認出来ました。

では、リストarrayをループで出力します。

for i in range(len(array)):

これで、iに0,1,2,3,4,5,6,7,8,9が入ります。
range(数)で、0からその数未満の回数分ループを回します。

array=list(map(int,input().rstrip().split(' ')))
print(array)

print(len(array))

#ループを使ってリストを出力
for i in range(len(array)):
    print(array[i])

リストをループを使って出力した結果の画像です。

必要な分だけ出力するので、コメントアウトを致します。

array=list(map(int,input().rstrip().split(' ')))
#print(array) ←コメントアウト

#print(len(array)) ←コメントアウト

#ループを使ってリストを出力
for i in range(len(array)):
    print(array[i])

すると、解答提出に必要な分だけ出力されました。


リストを使った、更に便利なループの表記方法について掲載致します。

for リストの要素の文字 in リスト名:

今回の例ですと、

for num in array:

になります。
リストの要素の所は自分や他の方が見て分かりやすい「num」などにすると、「整数を取り出すんだな」と伝わりやすいです。

コメントアウトした部分を削除して、コードを掲載致します。

array=list(map(int,input().rstrip().split(' ')))

#リスト出力に便利なループの書き方
for num in array:
    print(num)

更にコード短くするのに、内包表記を用います。

[出力結果のprint文 for リストの要素の文字 in リスト名]

今回の例ですと、

[print(num) for num in array]

と表記いたします。

array=list(map(int,input().rstrip().split(' ')))

#リスト出力に便利なループの書き方の内包表記
[print(num) for num in array]

このコードの実行(出力)結果です。

Pythonは以上です。
次は、GASで解いて行きます。


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

緑色のセルA2の所にpaiza問題の入力例をコピペする際、[Ctrl] + [Shif] + [V] のショートカットキーを使うと書式を崩さずに貼り付けられます。

緑色のセルA2(2,1)に入力した整数を取得して、それをC2(2,3)から始まる10行分の黄色いセルに出力します。

その際、黄色いセルの所には、二次元配列として取得した整数が格納された配列のarray2を出力します。

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

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

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

2:緑のセルA2(2,1)の整数をsplitメソッドを使って配列arrayに格納する


3:配列arrayのログ出力をして数値が配列に格納されたことを確認


4:スプレッドシートに格納する為、空の配列array2に二次元配列として格納する

5:スプレッドシートに格納前に、array2をログ出力する

6:スプレッドシートの黄色いセルC2(2,3)から始まる10行分に出力する

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

const ss = SpreadsheetApp.getActiveSheet();

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

このコードを関数「standardInput4」の中に書いて行きます。

Standard Inputで標準入力の意味です。

function standardInput4() {

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

}

手順2:緑のセルA2(2,1)の整数をsplitメソッドを使って配列arrayに格納する

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

function standardInput4() {

  const ss=SpreadsheetApp.getActiveSheet();

  //緑のセルA2(2,1)の整数をsplitメソッドを使って配列arrayに格納する
  const array=ss.getRange(2,1).getValue().split(' ');

}

手順3:セルA2のスペース区切りの数値が、配列arrayに格納出来たことをログ出力で確認する。

console.log(array);

下記のコードの実行結果です。

手順4:スプレッドシートに出力する為に、空のリストarray2を宣言して、二次元配列として格納する

まず、二次元のスプレッドシートに出力するのに使用する、現在は空の二次元配列array2を宣言します。

function standardInput4() {

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

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

}

この空の配列array2にループを使ってarrayに格納された数値を二次元配列として格納して行きます。

array.lengthで(一次元)配列の長さを求め、配列の添字は0から始まるので、ループの中ではi=0,i=1,i=2 …… i=8,i=9とiの値がインクリメント(増加)するように、iの値が1ず増えて変わっていくので、定数のconstではなく、変数のletを用いています。

また、i<array.lengthとすることで、iの値が0から9まで(10未満)1つずつ増えて行きます。「<」であることに着目をお願い致します。

二次元配列として格納するために、[array[i]]と配列自体を[ ]で括っています。
配列を末尾に追加するのにpushを使っています。

function standardInput4() {

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

  const array2=[];

  //スプレッドシートに格納する為に、array2に二次元配列として格納する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }
}

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

console.log(array2);

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

手順6:スプレッドシートのC2(2,3)から始まる10行分の黄色いセルに配列array2を出力する

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

C3から始まるので(2,3)、10行分なので、(2,3,10)になります。

array2.lengthを使うと、配列の長さの10が行数分の10行として入りますので、(2,3,array2.length)と書くと、より柔軟なコードが書けます。

1列なので、(2,3,array2.length,1)と書くことも出来ますが、1列の場合は省略可能です。

また、出力する数値はsplitで分割して複数になっているので、setValuesと複数形のsが付きます。

function standardInput4() {

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

  const array2=[];

  //スプレッドシートに格納する為に、array2に二次元配列として格納する
  for(let i=0;i<array.length;i++){
    array2.push([array[i]]);
  }

  console.log(array2);

  //スプレッドシートのC2から始まる黄色いセル10行分に出力する
  ss.getRange(2,3,array2.length).setValues(array2);

}


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

GASのコードは以上になります。

※ この記事の作成に参考になったサイトです ※
ありがとうございます。

Python「rstrip() メソッド」で文字列の右端を整えよう!
Python mapの使い方


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

横浜みなとみらい。ランドマークタワーの夜景です。

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

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

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

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

■ 関連記事 ■

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

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

paiza レベルアップ問題集 ループ1の1「STEP: 6 ある数をある回数表示 2」 をPythonとGASの両方で解いたコードの紹介

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

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

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

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

ある数をある回数表示 2 (paizaランク D 相当)

問題:整数N,Kが与えられます。
NをK回、改行区切りで出力して下さい。

具体例として入力例3の、N=39,K=70で考えてみたい所ですが、70回も出力するのは大変なので、(私がブログで記録するには、という個人的な事情でごめんなさいm(_ _)m)、K=7で考えてみます。

この場合、「39」を7回出力します。

入力例3
39 7

出力例3
39
39
39
39
39
39
39

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

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

<<Pythonでの解き方>>

下準備として、paiza.ioにこの様に入力します。
今回はN=39,K=7なので、paiza.ioの左下の入力の所を下記のように記述します。

手順として、
1.標準入力でN,Kを読み込み、それぞれにN=39,K=7を代入する
2.ループでK回(7回)繰り返すように設定する
3.N(この例では39)を出力する

コードを見てみましょう。

手順1では、

N,K=map(int,input().rstrip().split(‘ ‘))

で、input()で標準入力を使ってintで整数として取り込んでいます。
mapを使うことで1行の複数の値を取り込めます。
rstrip()では、改行の影響を無効にしています。
split(‘ ‘)で空白区切りの文字を取り込んでいます。

手順2では、

for i in range(K):

で、ループを使って、0,1,2,…K-1まで、ループ内のprint文の処理を施しています。
この問題の場合K=7なので、0,1,2,3,4,5,6までの7回ループを回します。

print(N)

で、N(この場合39)を出力しています。
手順1,2と合わせて、39を7回出力出来ました。

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

N,K=map(int,input().rstrip().split(' '))
for i in range(K):
    print(N)

内包表記を使ってみます。

N,K=map(int,input().rstrip().split(' '))
[print(N) for i in range(K)]

コードを1行減らすことが出来ました。

<<GASでの解き方>>

では、同じ問題をGASで解いてみます。

まず、スプレッドシートにこの様に配置しました。

なんか、鮭と卵みたいで美味しそうですね(=^x^=)
黄色い部分のA4からA10までに「39」を7回出力します。

※スプレッドシートに表示する場合は、ループを使って一次元配列ではなく、二次元配列としてからの配列に追加をして作成します※

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

1:スプレッドシートからアクティブシートをアクセスする
2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する
3:Nに出力する数値(この問題の場合は「39」)を取得する。
4:Kに数値を出力する回数(この問題の場合は「7」)を取得する。
5:ループでK回(この場合はK=7)配列array[]の中に[N](この場合は39)を格納する
6:arrayに二次元配列として39を7回格納出来たことをログ出力で確認する
7:スプレッドシートに表示する。セルA1から8行分なので、getRange(1,1,K)でセルA4からK行分を確保してそこに配列を流し込むイメージ

手順1: スプレッドシートからアクティブシートをアクセスする

const ss=SpreadsheetApp.getActiveSheet();

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

手順2:スプレッドシートの黄色い所に出力するのに用いる空の配列を定義する

let array=[];

手順3:スプレッドシートのピンクのセルから表示する数値(この場合39)を取得する。

let N=ss.getRange(1,2).getValue();

手順4:スプレッドシートの灰色のセルから表示する回数(この場合7)を取得する。

let K=ss.getRange(2,2).getValue();

手順5:ループをK回(7回)回して、push([N])を追加して二次元配列として扱えるようにする。

array.push([N]);

ループ全体ではこのようになります。

 for(let i=1;i<=K;i++){
    array.push([N])
  }

手順6:arrayに二次元配列として39を7回格納出来たことをログ出力で確認する

console.log(array);

実行結果です。

手順7:スプレッドシートに表示する。セルA4からK行分なので、getRange(4,1,1)でセルA4からK行分を確保してそこに配列を流し込むイメージ

ss.getRange(4,1,K).setValues(array);

スプレッドシートオブジェクトにgetRangeでセルA1からK行確保し、setValues(array)で出力しています。

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

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

<全コード>

function loop6(){

  //スプレッドシートのアクティブシートにアクセスする
  const ss=SpreadsheetApp.getActiveSheet();

  //シートの黄色い部分に出力用の二次元配列を用意する
  let array=[];

  //表示する数値Nをピンクのセルから取得する
  let N=ss.getRange(1,2).getValue();

  //表示回数K回を灰色のセルから取得する
  let K=ss.getRange(2,2).getValue();

  //ループでK回、arrayに二次元配列としてarray.push([N])で格納する
  for(let i=1;i<=K;i++){
    array.push([N])
  }

  //arrayに二次元配列として取得出来たことをログ表示で確認する。
  console.log(array);

  //出力用の配列arrayを黄色いセルに出力する。
  ss.getRange(4,1,K).setValues(array); 

}

宜しかったらコピペしてアレンジして見て下さい。

お疲れ様でした。

ブレイクタイムフォトはこちらになります。

横浜ランドマークタワーの夕暮れ

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

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

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

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

■ 関連記事 ■

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

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

episode6 GAS【指定セル範囲に色付け】「HUNTER×HUNTERで覚えるGoogle Apps Script」

この記事のシリーズを読むことで、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)の最初の一歩が学べます。

この記事では、

・色を付けたい範囲の指定方法

・文字の色とセルの塗り潰しの色を指定

・色の英語名と16進数を使用

についての概要を掴めます。


今回は、この表に色を付けます。
完成形のイメージは、この様な厨二病っぽい感じにしたいと思います。

各キャラクターの名前(列A)と念系統(列B)を黒背景に白文字に、
ヒソカチェックの列(列C)は、紫にします。

列ABの4行2列分の範囲をcharaNenと定義します。

//A列B列の名前と念系統が入っているセル範囲をcharaNenと定義
const charaNen=ss.getRange(1,1,4,2);

背景色を黒にしています。
色は英語名で指定出来ます。

charaNen.setBackground('black');

文字の色を白にしています。

charaNen.setFontColor('white');

列Cの4行1列分の範囲をhisokaCheckという名前にします。
1列分の場合は、列は略せますので、(1,3,4)として、(1,3)でセルC1,4で4行を取得しております。

//C列のヒソカチェックのセル範囲をhisokaCheckと定義
const hisokaCheck=ss.getRange(1,3,4);

色は英語名の他に、16進数で更に細かく指定出来ます。
ヒソカチェックの所は16進数で色を指定するので、ここで、16進数を用いての色の表し方について触れさせて頂きます。

・白… ffffff

・黒…000000

・最初の2桁が赤、次が緑、最後が青

以上より薄紫を[#eeddee]で表しました。
このコードでは、赤と青を強めにしていて、薄い紫になります。

cellHISOKA.setBackground('#eeddee');

参考までに色見本です。

ここまでのコードです。

//アクティブなスプレッドシートを選択するグローバル領域(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//セルの背景とフォントを変える
function rookieColor() {

  //A列のキャラ名とB列の念の入っている範囲をcharaNenとする
  const charaNen=ss.getRange(1,1,4,2);

  //背景色を黒にする
  charaNen.setBackground('black');

  //文字色を白にする
  charaNen.setFontColor('white');

  //C列のヒソカチェックの範囲をhisokaCheckとする
  const hisokaCheck=ss.getRange(1,3,4);

  //背景を薄紫にする
  hisokaCheck.setBackground('#eeddee');

}

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

横浜ランドマークタワーとクルーズ船のみなとみらいの夜景です。

←episode5               episode7→

←GAS自作集サンプルへ戻る

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

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

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

初めてのGoogle Apps Scriptに戻る
写真クリエイターとしての活動

自己紹介