【GASの小技】GASでスプレッドシートを自動整形!.trim().normalize(‘NFKC’).replace().toLowerCase()の使い方

GAS
【GASの小技】GASでスプレッドシートを自動整形!.trim().normalize('NFKC').replace().toLowerCase()の使い方

こんにちは!イカPOです。

スプレッドシートに存在する、半角と全角が混在したデータ余分な空白を自動で整形(除去)するGoogle Apps Script(GAS)を紹介します。


コード全文

function normalizeTextInSheet() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getDataRange();
  const dataValue = dataRange.getValues();
  const headers = dataValue.shift(); // ヘッダーを取り出す

  for (let i = 0; i < dataValue.length; i++) {
    dataValue[i] = dataValue[i].map(function (value) {
      return typeof value === "string" ? value.trim().normalize('NFKC').replace(/\s+/g, "").toLowerCase() : value;
    });
  }

  sheet.getRange(2, 1, dataValue.length, dataValue[0].length).setValues(dataValue);
}

📌 このコードが行うこと

  • 全角・半角の統一normalize('NFKC')
  • 不要なスペースの削除replace(/\s+/g, "")
  • 英字を小文字に変換toLowerCase()
  • 文字列の前後の空白削除.trim()
  • 整形後のデータをスプレッドシートに書き戻す

🔍 コードの動作イメージ

📌 修正前

商品番号商品名
AB123ワイヤレスイヤホ ン Pro
abCD456スマートフォンケース クリア
123456モバイルバ ッテリー 10000mAh

スクリプトを実行すると…

📌 修正後

商品番号商品名
ab123ワイヤレスイヤホンpro
abcd456スマートフォンケースクリア
123456モバイルバッテリー10000mah

📝 どんな場面で使う?

  • スプレッドシートの データがバラバラ(全角・半角が混ざっている)
  • 無駄なスペース が入っている
  • 英字の 大文字・小文字を統一 したい
  • 手作業で修正するのが面倒

このスクリプトを実行すれば、データが自動的に整形されて 統一感のあるデータ になります!🚀


💡 コードの詳細解説

1️⃣ スプレッドシートのデータを取得

const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const dataRange = sheet.getDataRange();
const dataValue = dataRange.getValues();
const headers = dataValue.shift();
  • SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()現在のシートを取得
  • sheet.getDataRange()データ範囲(Rangeオブジェクト)を取得
  • dataRange.getValues()セルの値を取得して2次元配列に格納
  • dataValue.shift()ヘッダー(1行目)を取り除く

2️⃣ データの整形(正規化)

for (let i = 0; i < dataValue.length; i++) {
  dataValue[i] = dataValue[i].map(function (value) {
    return typeof value === "string" ? value.trim().normalize('NFKC').replace(/\s+/g, "").toLowerCase() : value;
  });
}

ループ処理の詳細

  • for ループを使い、スプレッドシートの各行を順番に処理
  • dataValue.length行数(データの数) を取得し、その回数だけループ
  • dataValue[i] には各行のデータ(配列)が格納されている

typeof value === “string” ? について

  • typeof value でデータ型を判定
  • 文字列(string)の場合のみ正規化処理を実行
  • 数値や空のセル(null)などは変更せずそのまま保持

map() を使う理由 スプレッドシートのデータは二次元配列のため、dataValue[i] の各セルを処理するために map() を使用。

  • 適用する処理
    1. .trim()前後の空白を削除
    2. .normalize('NFKC')全角カタカナ・英数字を半角に統一
    3. .replace(/\s+/g, "")すべての空白を削除
    4. .toLowerCase()英字を小文字に変換

3️⃣ 整形後のデータをスプレッドシートに書き戻す

sheet.getRange(2, 1, dataValue.length, dataValue[0].length).setValues(dataValue);
  • .getRange(2, 1, dataValue.length, dataValue[0].length)
    • 2,1A2セル(2行目・1列目)から書き込み開始(ヘッダーを除外)
    • dataValue.length行数(データの行数)
    • dataValue[0].length列数(データの列数)
  • .setValues(dataValue)スプレッドシートに書き戻す

データ構造のポイント

  • スプレッドシートのデータは2次元配列の形で扱われる。
  • dataValue[[値1, 値2, ...], [値1, 値2, ...], ...] という形式。
  • そのまま .setValues()値をセットできるため、手間がかからない。

📝 GASでデータを整形する各処理の具体例【初心者向け】

.trim() を使って前後の空白を削除する方法

let str = "  テストデータ  ";
console.log(str.trim());

出力:

"テストデータ"

.normalize('NFKC') を使って全角カタカナ・英数字を半角に統一する方法

let str = "ABC123";
console.log(str.normalize('NFKC'));

出力:

"ABC123"

.replace(/\s+/g, "") を使ってすべての空白を削除する方法

let str = "テ ス ト  デ ー タ";
console.log(str.replace(/\s+/g, ""));

出力:

"テストデータ"

.toLowerCase() を使って英字を小文字に変換する方法

let str = "TESTdata";
console.log(str.toLowerCase());

出力:

"testdata"

🚀 まとめ

  • .trim() → 前後のスペースを削除
  • normalize(‘NFKC’) → 全角→半角に変換
  • replace(/\s+/g, “”) → すべての空白を削除
  • toLowerCase() → 小文字に変換
  • typeof value === “string” で文字列だけ変換対象にする
  • ループ処理でデータを一括整形

このスクリプトを使えば、スプレッドシートのデータを一瞬で整形できるので、手作業の手間を大幅に削減できます!🚀

ぜひ活用してみてください!

この記事についてのご意見や間違いのご指摘は、ぜひX(旧Twitter)でお知らせください!

皆さまのフィードバックをお待ちしています。以下のアカウントまでお気軽にメッセージをお寄せください。

この記事には筆者の個人的な解釈も一部含まれています。一つの参考としてお読みいただきつつ、最終的にはご自身や担当の方としっかり相談の上で判断いただけますと幸いです。

皆様の声で情報をアップデートしていきます。よろしくお願いします。

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