Softex CelwareTech Blog
Google Apps Script2026-04-15

GASで全角半角・大文字小文字を無視して検索する方法

Google Apps Scriptで全角半角・大文字小文字の違いを吸収する正規化検索を実装。コピペですぐ使えるコード付き。

GAS検索正規化全角半角Unicode

はじめに

GAS(Google Apps Script)でWebアプリや検索機能を作っていると、ユーザーが「A」と入力しても「A」と入力しても同じ結果を返したい、という場面がありますよね。

日本語環境では全角英数字と半角英数字が混在しがちです。さらに大文字・小文字の違いまで加わると、単純な文字列比較ではヒットしないケースが続出します。

そこで、検索前に文字列を正規化(normalize)する関数を用意しておくと、表記揺れを気にせず検索できるようになります。

こんな場面で使えます

  • スプレッドシートのデータを検索・フィルタリングするWebアプリ
  • ユーザー入力のキーワードとデータベースの値を突合する処理
  • 「ABC」「abc」「ABC」をすべて同じものとして扱いたいとき
  • 日本語入力環境で全角英数が混ざりやすいフォーム検索

実装コード

正規化関数

以下の関数を追加するだけで、全角英数→半角英数の変換と大文字→小文字の統一ができます。

/**
 * 文字列を正規化(大文字→小文字、全角英数→半角英数)
 */
function normalize_(str) {
  return String(str)
    .toLowerCase()
    .replace(/[A-Za-z0-9]/g, function(s) {
      return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
    });
}

仕組みを簡単に説明します。

  1. toLowerCase() で英字の大文字を小文字に統一
  2. 正規表現 /[A-Za-z0-9]/g で全角英数字にマッチ
  3. Unicodeコードポイントから 0xFEE0 を引くことで半角に変換

0xFEE0 という数値は、全角英数と半角英数のUnicodeコードポイントの差分です。たとえば「A」(U+FF21) から 0xFEE0 を引くと「A」(U+0041) になります。

検索での使い方

検索する側・される側の両方を normalize_ に通してから比較します。

// ユーザー入力とデータの両方を正規化してから比較
var normalizedQuery = normalize_(userInput);
var normalizedTarget = normalize_(dataValue);

if (normalizedTarget.indexOf(normalizedQuery) !== -1) {
  // ヒット!
}

使い方・カスタマイズ

スプレッドシートデータの検索に組み込む例

function searchData(keyword) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('データ');
  var data = sheet.getDataRange().getValues();
  var normalizedKeyword = normalize_(keyword);
  var results = [];

  for (var i = 1; i < data.length; i++) {
    var name = normalize_(data[i][0]);  // A列の名前を正規化
    if (name.indexOf(normalizedKeyword) !== -1) {
      results.push(data[i]);
    }
  }
  return results;
}

カタカナの全角/半角も統一したい場合

現在の関数は英数字のみ対応しています。カタカナ(「カ」と「カ」など)も統一したい場合は、変換テーブルを追加する必要があります。

注意点・ハマりポイント

  • GASでは String.prototype.normalize('NFKC') が使えない場合があります。モダンブラウザなら使える便利なメソッドですが、GASのサーバーサイドでは動作が不安定なため、今回のように手動変換するのが確実です
  • この関数はあくまで「検索用の比較」に使うものです。表示用のデータまで変換してしまわないよう注意してください
  • カタカナの全角/半角変換は文字の対応関係が複雑なため、必要になったら別途実装しましょう

まとめ

  • normalize_ 関数を通すだけで、全角半角・大文字小文字の違いを吸収できる
  • 検索する側・される側の両方を正規化してから比較するのがポイント
  • GASでは normalize('NFKC') が不安定なため、手動変換が確実

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →