· シン · column · 6 min read
コードは正しいのに動かない?日付の「型」に振り回されないためのトラブル対処法
GoogleスプレッドシートやGASでコードが正しいのに動かない原因は「型」の自動判定かも?見た目に騙されない対策と、6分の壁を越える高速化の鉄則を解説。

こんにちは、e-Shikumi-Laboの シン です。 このブログでは、スプレッドシート&GAS、Chrome拡張機能をはじめとする自動化のTipsや、日々の現場での気づきを公開しています。
先日、現場のデータ処理中にExcel VBAで日付判定エラーが発生しました。 AIにコードを見せても「間違っていない」と言う。しかし動かない。 ウォッチウィンドウでデータを1つずつ確認したところ、ダウンロードしたマスタデータの日付列の型が、1列だけ「文字列型」になっていたのが原因でした。
見た目は全く同じ日付に見えるため、非常に気づきにくい罠です。 「GoogleスプレッドシートやGAS(Google Apps Script)なら、こうした問題は起きないのだろうか?」と思われるかもしれませんが、GASでも同様のことが起こります。
1. GASでも起きる「自動判定の罠」
GASでも、Excelと同様に自動判定の罠が存在します。 getValue() でセルから値を取得する際、スプレッドシート側で日付と認識されていれば「日付型(Dateオブジェクト)」になりますが、文字列と認識されていれば「文字列型(String)」として取得されてしまいます。
まさに**「見た目に騙されるな」**という世界で、画面上の表示が日付っぽく見えていても、内部の型が異なればその後の計算や判定でエラーになります。
2. 対策:後処理で型を明示的に設定する
データを取り込んだ後、処理を行う前に型を明確に設定するのが一番確実な対策です。たとえば、以下のようなアプローチがあります。
getDisplayValue()を使う:セルの見た目通りの文字列として一律で強制取得し、スプレッドシート側の自動判定を無効化する。new Date()を使う:取得したデータを明示的に日付型(Dateオブジェクト)に固定してから処理を始める。
3. GAS特有の注意点:1つずつ処理すると時間制限にかかる
GASで対策する際、VBAの感覚でループ(For文)を使って1セルずつ型判定・変換を行うと、別の問題が発生します。 GASには「6分間の実行時間制限」があるため、セルへのアクセスを繰り返すと、数千件のデータでも処理が間に合わなくなります。
GAS的鉄則:「一括取得 ➔ 配列処理 ➔ 一括書込」
GASではセルを直接何度もいじらず、一度すべてのデータを配列(メモリ上)に吸い上げてから一括処理するのが基本です。
function safeDateProcessor() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const lastRow = sheet.getLastRow();
if (lastRow < 2) return;
// 1. データを配列として一括取得
const range = sheet.getRange(2, 1, lastRow - 1, 1);
const values = range.getValues();
// 2. 配列(メモリ)上で高速判定&変換
const processedValues = values.map(row => {
let val = row[0];
if (typeof val === 'string' && val.trim() !== '') {
let parsed = new Date(val.trim());
if (!isNaN(parsed.getTime())) return [parsed];
}
return [val];
});
// 3. 一括書き戻し
range.setValues(processedValues);
}配列処理にすることで、アクセス回数が最小限になり、処理時間を劇的に短縮できます。
まとめ:原因不明のエラーに遭遇したら
「コードは合っているはずなのに、なぜか動かない」 そんなときは、以下のステップでデータを疑ってみてください。
データを出力してみる
console.log()(またはLogger.log())を使って、実際の値を出力して確認する。型を見てみる 型を出力する関数(
typeofなど)を入れて、内部でどう認識されているかを確認する。
今回は日付のケースでしたが、この手のエラーは「数字」でも全く同じように起こります。(見た目は数値なのに、1つだけ文字列型になっていて計算や不一致が起きるなど)
システムからダウンロードしたデータを扱うときは、処理の前にまず「型を確認・明示する」。これだけで、原因不明のエラーで時間を溶かすリスクを大幅に減らすことができます。