GASを使ってスプレッドシートのセルの値を取得する

GASを使った業務効率改善を検討し始めたものの、スプレッドシートを操作するところで躓いてしまった方もいらっしゃるのではないでしょうか。今回は、GASを使ってスプレッドシートのセルの値を取得する方法について解説していきます。

今回のアウトプット

スプレッドシート

https://docs.google.com/spreadsheets/d/1xBnCcIKPRDG3t6A9Iqa8FiVdaen8ghv_Sq6–9PzZ2I/edit#gid=0

A1からC3に、それぞれのセル番地に応じた入力がされています。

編集権を限定しておりますので、ご利用になる場合はコピーをお願いいたします。

スクリプトエディタ

https://script.google.com/a/macros/meta-reputation.co.jp/d/1ny-iduofC9Xeb5H4IKcKe4vK0y2yrA59yI3LJotzXUUpRbjZ6d65hL8N/edit

解説

スプレッドシート

スプレッドシートは特に仕掛けはありません

スクリプトエディタ

スクリプトエディタには、スプレッドシートに紐付けて作成されたものと、紐付けられずに独立して作成されたものの2タイプがありますが、今回は前者の紐づけられたタイプです。

まずはコードを確認しましょう。

function get_spreadsheet_range() {

var sh= SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

var a1=sh.getRange(“A1”).getValue();
Logger.log(a1); //「A1セル」

var b2=sh.getRange(2, 2).getValue();
Logger.log(b2);//「B2セル」

var from_a1_to_b2=sh.getRange(1,1,2,2).getValues();
Logger.log(from_a1_to_b2);//「[[A1セル, B1セル], [A2セル, B2セル]]」

var from_a1_to_c3=sh.getRange(1,1,3,3).getValue();
Logger.log(from_a1_to_c3);//「A1セル」

var data_range=sh.getDataRange().getValues();
Logger.log(data_range);//「 [[A1セル, B1セル, C1セル], [A2セル, B2セル, C2セル], [A3セル, B3セル, C3セル]]」

}

 

まず、一つ目の

var a1=sh.getRange(“A1”).getValue();
Logger.log(a1); //「A1セル」

の部分は、getRange(a1Notation)を利用し、セル番地を直接指定してセルを取得しています。後述する方法と比べて、コードを人間の目で見てわかりやすいというメリットがあります。しかし、for文による繰り返しを用いたり、setValue()によりセルに値を入力したりの応用の場面では後述のやり方の方が扱いやすいため、慣れておいた方が良いと思います。

今回はA1セルを指定していますので、Logger.logで「A1セル」が確認できます。

次に、

var b2=sh.getRange(2, 2).getValue();
Logger.log(b2);//「B2セル」

の部分では、getRange(row, column)を利用して、シートの先頭行を1行目として数えて何行目で、シートの先頭列を1列目として数えて何列目か、という方法でセルを指定してセルを取得しています。

次に、

var from_a1_to_b2=sh.getRange(1,1,2,2).getValues();
Logger.log(from_a1_to_b2);//「[[A1セル, B1セル], [A2セル, B2セル]]」

の部分では、getRange(row, column, numRows, numColumns)を利用して、シートの先頭行を1行目として数えて何行目で、シートの先頭列を1列目として数えて何列目のセルを基準に何行何列の範囲なのかという方法で範囲を指定して範囲を取得しています。今回は、A1セルを基準に2行2列、すなわちA1セルからB2セルまでの4セルを指定して二次元配列として取得しています。ここで気をつけていただきたいのは、赤字でも強調している、getValues()です。複数のセルから一括で配列として取得したい場合にはこちらを使わなければなりません。

次に、

var from_a1_to_c3=sh.getRange(1,1,3,3).getValue();
Logger.log(from_a1_to_c3);//「A1セル」

の部分では、一つ前と同様にgetRange(row, column, numRows, numColumns)を利用していますが、getValue()を使っているため、取得できているのは左上のセルであるA1セルだけとなっています。

最後に、

var data_range=sh.getDataRange().getValues();
Logger.log(data_range);//「 [[A1セル, B1セル, C1セル], [A2セル, B2セル, C2セル], [A3セル, B3セル, C3セル]]」

の部分では、getDataRange()を利用して、シート内のデータがある範囲を指定して取得しています。シート内のデータがある範囲とは、A1セルを選択した状態で全選択(Windowsの場合はコントール+A、Macの場合はコマンド+A)をして選択される範囲となります。今後、スプレッドシートの情報を利用してWebアプリケーションを開発したり、Gmailやカレンダーとの連携を考える際にはgetDataRange()を多用することになると思いますので、慣れておいた方が良いでしょう。

まとめ

以上が、GASを使ってスプレッドシートのセルの値を取得する方法になります。

再度まとめると、

getRange(a1Notation) セル番地を直接指定してセルを取得
getRange(row, column) シートの先頭行を1行目として数えて何行目で、シートの先頭列を1列目として数えて何列目か、という方法でセルを指定してセルを取得
getRange(row, column, numRows, numColumns) シートの先頭行を1行目として数えて何行目で、シートの先頭列を1列目として数えて何列目のセルを基準に何行何列の範囲なのかという方法で範囲を指定して範囲を取得
getDataRange() シート内のデータがある範囲を指定して取得

となります。

 

この記事が気に入ったら
いいね!しよう

最新情報をお届けします

Twitter で生産性総合研究所をフォローしよう!