Google App Script(GAS)を使ってみよう Part 2

あなたはGASのことを、どのくらい知っていますか?
この記事では、GAS初心者から基本的な操作方法を学ぶことができます。
もしよかったら試しながら読み進めてみてください。

Part 1では、コードを書くときのお作法やスプレットシート操作などの説明をしました。
今回は、シート操作について説明していきます。

目次

スプレッドシートを開こう

Spreadsheetを開き ⇨ 拡張機能 ⇨ Apps Scriptを選択するとApps Script「無題のプロジェクト」画面が出てきます。
それでは、コードgsにコードを入力して行きましょう!

拡張機能⇨App Script
無題のプロジェクトが開く

シート操作

GASでシート操作を行う主な理由は、効率化・自動化・カスタマイズ・および協力を促進するためです。
GASを活用することで、手動で行うよりも格段に効率的で精度の高いデータ管理が可能になります。
時間短縮にもつながるので、時間と労力が削減できますよ!

シートを取得する

スプレッドシートには複数のシートが含まれていることがあります。
特定のシートを操作するには、そのシートを正しく取得する必要があります。
下記の例では「Date」のシートを取得しています。

function getSheetByCertainSheetName( ){

 SpreadsheetApp.openById(‘スプレッドシートID’).getSheetByName(‘シート名’)

}

指定したスプレッドシートIDとシート名を使用して、そのシートを取得します。

function getSheetByActiveSheet( ){

 SpreadsheetApp.openById(‘スプレッドシートID’).getActiveSheet( )

}

指定したスプレッドシートIDから現在表示しているシートを取得します。
getActiveSheet( )メソッドは、ユーザーが表示しているシートを取得するために使います。

意図したシートを取得できているか

function checkSheetNameByGetSheetByCertainSheetName( ){

 console.log(SpreadsheetApp.openById(‘スプレッドシートID’).getSheetByName(‘シート名’).getName( ))

}

指定したスプレッドシートIDとシート名を基に、そのシートを取得します。
これにより、特定のシートが正しく取得できているかどうかを確認することができます。

function checkSheetNameByGetSheetByActiveSheet( ){

 console.log(SpreadsheetApp.openById(‘スプレッドシートID’).getActiveSheet( ).getName( ))

 }

指定したスプレッドシートIDから現在表示しているシートを取得し、現在表示しているシート名を取得します。
getName( ) メソッドは、シートの名前を取得するために使用します。

全シートを取得する

下記の例では「Date・Sheet 1・Sheet 2」のシートを取得しています。

function getAllSheets( ){

 SpreadsheetApp.openById(‘スプレッドシートID’).getSheets( )

}

指定したスプレッドシートIDからgetSheets( )メソッドを使ってスプレッドシートのすべてのシートを取り出します。

function checkAllSheetNamesByGetAllSheets( ){

 const sheets = SpreadsheetApp.openById(‘スプレッドシートID’).getSheets( )

 const sheetNames = [ ]

 for ( let sheet of sheets ){
sheetNames.push(sheet.getName( ))
}

 console.log(sheetNames)

}

指定したスプレッドシート内のすべてのシート名を取得します。

なにこれ?

①なにこれ? ⇨ const sheets = SpreadsheetApp.openById(‘スプレッドシートID’).getSheets( )

const sheetsとは、 sheetsという名前の箱(何かを入れるために箱を用意)
sheetという名前の箱に、全シート情報を格納する

const sheetsとは、sheetsという名前をつけた箱にxを格納する。
(格納することで、後続の処理で再利用が可能になります。)
つまり、const sheets = SpreadsheetApp.openById(‘スプレッドシートID’).getSheets( )は、sheetsという名前をつけた箱に、スプレッドシートの中の全シートを格納したことになります。

②なにこれ? ⇨ [ ] 

複数の何かを1つの箱に入れておくための空箱だと思ってください。
ちなみに、getSheetsで取得した全シートは[ ]の中に入っています。
 イメージ: [シート1, シート2, シート3…..]

③なにこれ? ⇨ for ( let sheet of sheets ){ }
これは、[ ]に入っている複数のものを1つずつ使って{ }内に書いたコードの処理をしてくれる優れものです。
sheetsという名前の箱に[シート1, シート2, シート3]が入っているとします。

その場合、
1回目: シート1(sheetsの中の1番目)を使って{ }内の処理を実行
2回目: 1回目実行後、シート2(sheetsの中の2番目)を使って{ }内の処理を実行
3回目: 2回目実行後、シート2(sheetsの中の3番目)を使って{ }内の処理を実行
sheetsの中には3つしか入っていないことを機械が理解しているので、4回目以降は実行されず、3回目の処理後、for( ){ }での処理は自動終了します。

④なにこれ? ⇨ push( )
[ ]の中に( )内で指定したものを追加してくれます。

sheetNames.push(‘シート’)は、sheetNamesという名前をつけた箱には空箱[ ]があり、その空箱にシートという文字を追加してくれます。

イメージ
最初は[ ]に何も入っていない状態です。
シートという文字を入れると [‘シート’]となります。
仮に、シートという文字を2つ入れると[‘シート’,’シート’]となります。

練習問題

スプレッドシートにシート名「Sheet 1・Sheet 2」を追加し、下記の2つの関数を実行をし、シートIDを取得しましょう。そのシートIDを使用してURLを手動生成しブラウザで開いてみてください。

スプレッドシートIDとシートIDは、下記のとおりです。
https://docs.google.com/spreadsheets/d/[スプレッドシートID]/edit#gid=[シートID]

問題1


function checkSheetIdByGetSheetByCertainSheetName( ){

 console.log(SpreadsheetApp.openById(‘スプレッドシートID’).getSheetByName(‘シート名’).getSheetId( ))

}

説明

各シートのスプレッドシートURLのシートIDは違います。
スプレッドシートIDとシート名を指定することで、指定したシート名のシートIDが表示されます。

例 DateのシートID:https://docs.google.com/spreadsheets/d/1ykcvrJ8AWKv2haaQkoS_B_VHDd3I_DwODndv_Sfe8ro/edit?gid=0#gid=0

例 Sheet 1のシートID:https://docs.google.com/spreadsheets/d/1ykcvrJ8AWKv2haaQkoS_B_VHDd3I_DwODndv_Sfe8ro/edit?gid=500731624#gid=500731624

答え

下記では、Sheet 1のシートIDを取得しています。
スプレッドシートIDとSheet 1を指定したことによりSheet 1のシートIDが情報(500731624)に表示されました。
これにより、下記のURLが取得できます。

https://docs.google.com/spreadsheets/d/1ykcvrJ8AWKv2haaQkoS_B_VHDd3I_DwODndv_Sfe8ro(スプレッドシートID)/edit#gid=500731624(シートID)

問題2


function checkSheetIdByGetSheetByActiveSheet( ){

console.log(SpreadsheetApp.openById(‘スプレッドシートID’).getActiveSheet( ).getSheetId( ))

 }

説明

情報に「0」と表示されています。

これは、シート名「Date」のシートIDが表示されているからです。
もし、Sheet 1・Sheet 2のシートIDを上記のコードで取得したい場合は、シートを入れ替える必要があります。
なぜ、他のシートIDを取得するのにシートを入れ替える必要があるかというと、getActiveSheet( )関数は、現在表示しているシートを取得するための関数だからです。
スプレッドシートを開いたとき、通常は一番左のシートがアクティブとみなされ、そのシートが取得されます。
これは、スプレッドシートを開いた直後の状態が反映されるためです。

表示させたいシートを左に移動させることでシートIDを取得できます。
答え

下記では、一番左側「Date」のシートIDを取得しています。

https://docs.google.com/spreadsheets/d/1ykcvrJ8AWKv2haaQkoS_B_VHDd3I_DwODndv_Sfe8ro(スプレッドシートID)/edit#gid=0(シートID)

もし、各シートIDを表示したい場合は、下記のコードで表示させることも可能です。
(上記のようにシートを入れ替える必要はありません。)

function checkSheetIdByGetSheetByActiveSheet( ){

console.log(SpreadsheetApp.getActiveSpreadsheet( ).getActiveSheet( ).getSheetId( ))

}

入力の際の注意

・スプレッドシートIDを間違えない
(スプレッドシートIDとは、URL:https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxx/edit のdの後ろxxxxxxxxxxxx 部分のことです。)
・空箱[ ]の中に複数の配列やリストの要素を区切る際、カンマ(,)で区切る
( イメージ [シート1, シート2, シート3…..])
・文字を入力するときはシングルクォーテーションマーク[‘ 文字‘]で囲むのを忘れない

弊社では、Google Apps Script を使用した、業務効率化自動化を行う部門があります。Google Work Spaceをご利用の企業様、個人事業主様、自動化などでお困りでしたら、弊社までお問い合わせください。
何百の自動化プログラムを組んできたエンジニアが、お客様の業務自動化をご支援いたします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次