メディア掲載: レバテックフリーランス様のサイトで当ブログが紹介されました

GAS: セルや範囲、その値を取得する

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") // 黄
range.setBackgroud("red") // 赤
setBorder(top, left, bottom, right, vertical, horizontal, color, style)罫線を設定するrange.setBorder(true, true, true, true, true, true, "red", SpreadsheetApp.BorderStyle.DASHED) // 赤, 破線, 格子
range.setBorder(true, true, true, true, false, false, "blue", SpreadsheetApp.BorderStyle.SOLID_THICK) // 青, 太実線, 外枠のみ
setFontColor(color)文字色を設定するrange.setFontColor("#ffff00") // 黄
range.setFontColor("red") // 赤
setFontWeight(fontWeight)文字の太さを設定するrange.setFontWeight("bold") // 太字
range.setFontWeight("normal") // 通常
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列目の値で昇順ソート
range.sort({column: 2, ascending: false}); // 2列目の値で降順ソート

コメント

タイトルとURLをコピーしました