GASでスプレッドシートの指定セルから値を取得する方法と注意点まとめ

Google Apps Script(GAS)を触ってると、必ず出てくるのがgetValue()メソッドばい!スプレッドシートのデータを取得するための基本中の基本じゃけど、意外と落とし穴があるっちゃね。今回は、このgetValue()の基本から応用まで、わかりやすく解説していくばい!

スポンサーリンク

getValue()って何するメソッド?

簡単に言うと、指定したセルの値を取得するメソッドたい。例えば、スプレッドシートのA1セルの値を取ってくるコードはこんな感じさ。

const sheet = SpreadsheetApp.getActiveSheet();
const value = sheet.getRange("A1").getValue();
Logger.log(value);

めっちゃシンプルじゃろ?でも、シンプルだからこそ、使い方を間違うとエラーやパフォーマンスの問題にハマるとよ。

getValue()の基本的な使い方

単一セルの値を取得

function getSingleValue() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const value = sheet.getRange("B5").getValue();
  Logger.log("B5の値: " + value);
}

このコードで、B5セルの値を取得してログに出力するばい。特に難しいことはないけど、実際に使うときはデータ型に気をつけんといかんさ!

取得するデータ型に注意!

getValue()は、セルの内容に応じて返すデータ型が変わるとよ。

セルの内容返されるデータ型
数値(123)Number型
文字列(”Hello”)String型
TRUE/FALSEBoolean型
日付(2024/12/01)Dateオブジェクト

例えば、セルが「2025/03/05」みたいな日付の時、getValue()Dateオブジェクトを返すばい。これを文字列として使いたいなら、Utilities.formatDate()を使うと良かけ。

const dateValue = sheet.getRange("C3").getValue();
const formattedDate = Utilities.formatDate(dateValue, Session.getScriptTimeZone(), "yyyy/MM/dd");
Logger.log("フォーマット後の日付: " + formattedDate);

getValue()の応用編

複数セルの値を取得したい?

getValue()は1セルしか取れんばい。複数セルをまとめて取るときは、getValues()を使うのがオススメ!

function getMultipleValues() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const values = sheet.getRange("A1:A10").getValues();
  Logger.log(values);
}

この方法なら、A1からA10の値を一気に取れるばい。ループ処理を使うときも、この方法のほうが高速じゃけ。

条件付きでセルの色を変更!

取得した値を使って、条件を満たしたセルに色を付けることもできるばい。

function highlightCells() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const values = sheet.getRange("A1:C10").getValues();
  
  values.forEach((row, rowIndex) => {
    row.forEach((cellValue, colIndex) => {
      if(cellValue > 100) {
        sheet.getRange(rowIndex + 1, colIndex + 1).setBackground("#FF0000");
      }
    });
  });
}

このコードを使えば、100以上の値が入ってるセルに赤色を付けられるばい!

getValue()の落とし穴と対策

1. getValue()をループで使うのはNG!

こんなコードを書いてないかい?

for (let i = 1; i <= 100; i++) {
  let value = sheet.getRange("A" + i).getValue();
  Logger.log(value);
}

この方法、めちゃくちゃ遅いばい!getValues()を使えば、一気に取得できて処理が速くなるさ。

const values = sheet.getRange("A1:A100").getValues();
values.forEach(value => Logger.log(value));

2. 存在しないセルを取得しようとするとエラー!

指定した範囲が無効だと、getValue()はエラーを出すばい。エラーを防ぐには、例外処理を入れるのがオススメさ。

try {
  const value = sheet.getRange("Z1000").getValue();
  Logger.log(value);
} catch (e) {
  Logger.log("エラー発生: " + e.message);
}

まとめ

getValue()はシンプルだけど、データ型やパフォーマンスを意識せんと意外とハマるメソッドばい。以下のポイントを押さえれば、スマートに使いこなせるさ。

  • getValue()は1セル専用、複数セルならgetValues()を使う!
  • 取得するデータ型を意識する!
  • ループでgetValue()を使わず、まとめて取得して高速化する!
  • 例外処理を入れてエラー対策をする!

GASを使いこなして、効率よくスプレッドシートを操作しようばい!

コメント

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