【GAS】全角カタカナを半角に変換
以下が、タイトルのサンプルです。
/**
* 全角カタカナを半角カタカナに変換する関数(正規表現 + 変換マップ方式)
*
* @param {string} str - 入力文字列
* 例: "アイウエオガギグゲゴ"
* @returns {string} - 全角カタカナ部分が半角カタカナに変換された文字列
* 例: "アイウエオガギグゲゴ"
*
* 本関数は、VBAの StrConv(..., vbNarrow) に近い動作を
* Google Apps Script 上で実現します。
*/
function convertZenKanaToHan(str) {
// 入力が null や undefined の場合は、そのまま返す
if (str == null) {
return str;
}
// ▼ 正規表現の説明
// [ァ-ヶー]+ は「全角カタカナの連続した文字列」を意味します。
// ・ァ〜ヶ : カタカナの基本ブロック
// ・ー : 長音符
// + : 1文字以上の連続
const regex = /[ァ-ヶー]+/g;
// ▼ 全角→半角の対応表
// 濁点・半濁点付き文字も、単独で対応を用意します。
const zen = [
"ガ","ギ","グ","ゲ","ゴ",
"ザ","ジ","ズ","ゼ","ゾ",
"ダ","ヂ","ヅ","デ","ド",
"バ","ビ","ブ","ベ","ボ",
"パ","ピ","プ","ペ","ポ",
"ヴ", // 全角ヴ
"ア","イ","ウ","エ","オ",
"カ","キ","ク","ケ","コ",
"サ","シ","ス","セ","ソ",
"タ","チ","ツ","テ","ト",
"ナ","ニ","ヌ","ネ","ノ",
"ハ","ヒ","フ","ヘ","ホ",
"マ","ミ","ム","メ","モ",
"ヤ","ユ","ヨ",
"ラ","リ","ル","レ","ロ",
"ワ","ヲ","ン",
"ァ","ィ","ゥ","ェ","ォ",
"ャ","ュ","ョ","ッ",
"ー"
];
// 半角側の対応表(上記とインデックスで対応)
const han = [
"ガ","ギ","グ","ゲ","ゴ",
"ザ","ジ","ズ","ゼ","ゾ",
"ダ","ヂ","ヅ","デ","ド",
"バ","ビ","ブ","ベ","ボ",
"パ","ピ","プ","ペ","ポ",
"ヴ",
"ア","イ","ウ","エ","オ",
"カ","キ","ク","ケ","コ",
"サ","シ","ス","セ","ソ",
"タ","チ","ツ","テ","ト",
"ナ","ニ","ヌ","ネ","ノ",
"ハ","ヒ","フ","ヘ","ホ",
"マ","ミ","ム","メ","モ",
"ヤ","ユ","ヨ",
"ラ","リ","ル","レ","ロ",
"ワ","ヲ","ン",
"ァ","ィ","ゥ","ェ","ォ",
"ャ","ュ","ョ","ッ",
"ー"
];
// ▼ オブジェクト形式の変換マップを作成
// 例: map["ア"] = "ア"
const map = {};
for (let i = 0; i < zen.length; i++) {
map[zen[i]] = han[i];
}
// ▼ 実際の置換処理
// 正規表現で見つかった「全角カタカナのかたまり」を
// コールバックで一文字ずつ半角に変換する
const result = str.replace(regex, (match) => {
let out = "";
for (let ch of match) {
// マップに存在すれば変換、なければ元の文字をそのまま残す
out += (map[ch] !== undefined ? map[ch] : ch);
}
return out;
});
return result;
}
/**
* テスト用関数
* Logger.log で結果を確認します。
*/
function testConvert() {
const s = "アイあウエいオガ漢ギグゲ&ゴカ!ナ";
const converted = convertZenKanaToHan(s);
Logger.log(converted);
// 期待される出力例: "アイあウエいオガ漢ギグゲ&ゴカ!ナ"
}
🟩 説明文
1. この関数の目的
Google Apps Script には VBA のような StrConv(..., vbNarrow)
がないため、
全角カタカナ(例:アカサタナ)を半角カタカナ(例:アカサタナ)に変換する機能を自作 しました。
- 日本語入力後にデータを正規化したいとき
- システム連携やファイル出力で半角文字を必要とするとき
に便利です。
2. 処理の流れ
- 入力文字列の中で 全角カタカナが連続している部分を正規表現で検出 します。
/[ァ-ヶー]+/g
がその役割です。
- あらかじめ用意した 変換マップ を使って、該当部分の文字を一文字ずつ変換します。
- 該当しない文字(漢字・英数字・記号など)はそのまま残します。
3. 特徴
- 濁点・半濁点付きの文字(ガ・パなど)にも対応済み
- 長音符(ー)も半角に変換
- 既に半角になっている部分はそのまま残る
- 入力が
null
やundefined
の場合も安全に処理(そのまま返す)
4. テストの仕方
testConvert()
をスクリプトエディタで実行- 実行後に
表示 → ログ
で結果を確認 - 変換が正しく行われているかをテスト文字列で検証できます
5. 応用例
- スプレッドシートのセル内文字列を
getValue()
→convertZenKanaToHan()
→setValue()
で正規化 - 外部連携用 CSV や API リクエストの前処理として文字コードを統一
🟢 ポイントまとめ
- 正規表現で全角カタカナの部分だけを検出し、対象範囲を限定しているため効率的
- 変換マップを用いているので、将来特殊文字を追加する場合も容易
- VBA のように簡単に書けるわけではありませんが、これでほぼ同等の変換が可能です
💡 補足:
スプレッドシート上で直接セル関数として使いたい場合は、次のように書くこともできます。
function ZEN2HAN(input) {
return convertZenKanaToHan(input);
}
シート上で
=ZEN2HAN(A1)
とすれば、A1セルの全角カタカナが半角に変換されます。