Google Apps Scriptでセルの値を取得したり、セルへ値の入力、書式の設定・・・などの操作を行う場合、まずは対象のセル・範囲を取得する必要があります。
この記事では、セル・範囲を取得する方法と、その値を取得する(コード)を紹介します。
前提として、先にスプレッドシートおよびシートを取得している必要があります。
その方法がわからない場合は、以下の記事を参照してください。
単一セルを取得する
セルを取得するには、getRangeメソッドを使用します。
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadSheet.getSheetByName('シート名');
// C2セルを取得する例
const cell = sheet.getRange("C2"); // 例1: C2 を指定
const cell = sheet.getRange(2, 3); // 例2: 2行目, 3列目 を指定
セルを取得した後、セルの値を取得するにはgetValueメソッドを使用します。
const cell = sheet.getRange("C2");
const value = cell.getValue();
// getRangeとつづけて記述することも多い
const value = sheet.getRange("C2").getValue();
補足
ちなみに、例1のようにA1形式でセルを取得する場合、取得したsheetを使わずに、シート名を直接指定することもできます。
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
// 例3: C2セルを取得する例(シート名も指定する例)
const cell = spreadSheet.getRange("シート1!C2");
また、getCurrentCellメソッドで、現在選択しているセルを取得することも可能です。
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
// 例4: 現在選択しているセルを取得する例
const cell = spreadSheet.getCurrentCell();
範囲を取得する
範囲を取得する際にも、主にgetRangeメソッドを使用します。
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadSheet.getSheetByName('シート名');
// 範囲 C2:G4 を取得する例
const range = sheet.getRange("C2:G4"); // 例1: C2:G4 を指定
const range = sheet.getRange(2, 3, 3, 5); // 例2: 2行目, 3列目 を起点に 3行分, 5列分を指定
範囲を取得した後、範囲内のセルの値を取得するにはgetValuesメソッドを使用します。
const range = sheet.getRange("C2:G4");
const values = range.getValues();
// getValuesに続けて記述することも多い
const values = sheet.getRange("C2:G4").getValues();
getValuesメソッドでセルの値を取得した場合、値は2次元配列として取得されます。
[
[あ, い, う, え, お],
[か, き, く, け, こ],
[さ, し, す, せ, そ]
]
よって、この2次元配列の中からデータを取得する際は、下記のようにします。
// 「け」(2行目, 4列目)を取得する
const ke = values[1][3];
補足
なお、例1のようにA1形式で範囲を取得する場合、取得したsheetを使わずに、シート名を直接指定することもできます。
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
// 範囲 C2:G4 を取得する例(シート名も指定する例)
const range = spreadSheet.getRange("シート1!C2:G4");
また、getActiveRangeメソッドで、現在選択している範囲を取得することも可能です。
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
// 現在選択している範囲を取得する例
const range = spreadSheet.getActiveRange();
その他、getDataRangeメソッドを使って、A1からデータが入っている最後のセルまでの範囲を取得することもできます。
シートをデータベースのように扱っている場合に非常に便利です。
const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadSheet.getSheetByName('シート名');
// A1セルからデータが入っている最後のセルまでの範囲を取得
const range = sheet.getDataRange();
[
[ '', '', '', '', '', '', '' ],
[ '', '', 'あ', 'い', 'う', 'え', 'お' ],
[ '', '', 'か', 'き', 'く', 'け', 'こ' ],
[ '', '', 'さ', 'し', 'す', 'せ', 'そ' ]
]
セル・範囲を取得することによって可能になること
ここまで紹介してきたコードによって、セルや範囲を取得することができました。
これによって、セルの値を取得したり、セルに値を入力したり、書式を変更したり等と、様々な操作をスクリプトで行うことができるようになります。
以下はほんの一例ですが、行うことができる処理(メソッド)を紹介します。
メソッド | 説明 | 使用例 |
---|---|---|
clear() | セルの値と書式をクリアする | range.clear() |
clearContent() | セルの値をクリアする | range.clearContent() |
copyTo(destination) | コピーして別の範囲に貼り付ける | range1.copyTo(range2) |
deleteCells(shiftDimension) | 範囲のセルを削除し、上または左に詰める | range.deleteCells(SpreadsheetApp.Dimension.COLUMS) |
getA1Notation() | 範囲のA1形式の文字列を取得 | range.getA1Notation() |
getDisplayValue() | 単一セルの値(表示値)を取得 | cell.getDisplayValue() |
getDisplayValues() | 範囲内のセルの値(表示値)を2次元配列で取得 | range.getDisplayValues() |
getValue() | 単一セルの値を取得 | cell.getValue() |
getValues() | 範囲内のセルの値を2次元配列で取得 | range.getValues() |
merge() | セルを結合する | range.merge() |
setBackground(color) | 背景色を設定する | range.setBackgroud("#ffff00") // 黄 |
setBorder(top, left, bottom, right, vertical, horizontal, color, style) | 罫線を設定する | range.setBorder(true, true, true, true, true, true, "red", SpreadsheetApp.BorderStyle.DASHED) // 赤, 破線, 格子 |
setFontColor(color) | 文字色を設定する | range.setFontColor("#ffff00") // 黄 |
setFontWeight(fontWeight) | 文字の太さを設定する | range.setFontWeight("bold") // 太字 |
setFormula(formula) | 式を入力する | setFormula("=SUM(A1:A3)") |
setNumberFormat(numberFormat) | セルの書式設定(数値または日付) | // 少数点第2位までの数値形式 range.setNumberFormat("0.00"); |
setValue(value) | セルに値をセット(すべて同じ値) | range.setValue("あ"); |
setValues(values) | セルに値をセット(それぞれ異なる値) | range.setValues([ ["あ","い","う"], ["か","き","く"], ["さ","し","す"] ]); |
sort(sortSpecObj) | 範囲をソートする | range.sort(1); // 1列目の値で昇順ソート |
コメント