こんにちは!イカ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()
を使用。
- 適用する処理:
.trim()
→ 前後の空白を削除.normalize('NFKC')
→ 全角カタカナ・英数字を半角に統一.replace(/\s+/g, "")
→ すべての空白を削除.toLowerCase()
→ 英字を小文字に変換
3️⃣ 整形後のデータをスプレッドシートに書き戻す
sheet.getRange(2, 1, dataValue.length, dataValue[0].length).setValues(dataValue);
.getRange(2, 1, dataValue.length, dataValue[0].length)
2,1
→ A2セル(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)でお知らせください!
皆さまのフィードバックをお待ちしています。以下のアカウントまでお気軽にメッセージをお寄せください。
この記事には筆者の個人的な解釈も一部含まれています。一つの参考としてお読みいただきつつ、最終的にはご自身や担当の方としっかり相談の上で判断いただけますと幸いです。
皆様の声で情報をアップデートしていきます。よろしくお願いします。