earthpg:GAS専門のプログラミングスクール

Google Apps Scriptで全角半角を楽々判定する方法とは?

GASで全角と半角を判定する方法を探しているんですが、どうやって始めたらいいのか全然わからなくて…
猫男
猫男
catman
catman
よし、catmanに任せな!

GASで全角半角を判定する基本

全角と半角の判定は、文字コードを利用して行うことができます。これは正規表現を使うと便利だ。

正規表現を使った全角と半角の判定

GASで正規表現を使い、文字列が全角か半角かを判定する方法を紹介する。


function isFullWidth(text) {
  return /[^\x00-\x7F]/.test(text);
}

function isHalfWidth(text) {
  return /^[\x00-\x7F]*$/.test(text);
}

このスクリプトの仕組み

  • isFullWidth関数は全角判定を行います。正規表現で「[^\\x00-\\x7F]」を使って、文字列に1つでも全角文字が含まれているかを検査します。
  • isHalfWidth関数は半角判定を行います。「^[\\x00-\\x7F]*$」の正規表現を使って、文字列が全て半角文字で構成されているかをチェックします。
これで、全角と半角を区別できるんですね!でも、もう少し詳しく知りたいです。
猫男
猫男

実践的な使い方

次はこいつを応用してみます。

スプレッドシートでの応用

スプレッドシートの特定のカラムをチェックし、全角と半角を分けて処理したい場合に使えます。


function checkColumn() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getRange("A1:A10");
  const values = range.getValues();

  values.forEach((row, index) => {
    const cellValue = row[0];
    if (isFullWidth(cellValue)) {
      Logger.log(Row ${index + 1}: 全角);
    } else if (isHalfWidth(cellValue)) {
      Logger.log(Row ${index + 1}: 半角);
    } else {
      Logger.log(Row ${index + 1}: 混在);
    }
  });
}

スクリプトの解説

  • まず、SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()で現在開いているスプレッドシートのアクティブシートを取得します。
  • getRange(“A1:A10”)で、A1からA10までのセル範囲を指定します。
  • getValues()を使って、選択された範囲の値を二次元配列で取得します。
  • 各行の最初のセルの値を、先ほどのisFullWidthisHalfWidth関数で判定し、結果をログに出力します。
これでスプレッドシートのデータを全角と半角に分けて処理できそうです!うれしい!
猫男
猫男

練習問題

スプレッドシートの「B列」に入力されたデータを全角か半角で判定し、C列に結果をセットするスクリプトを書いてください。

解答・解説


function checkAndSetColumn() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const dataRange = sheet.getRange("B1:B10");
  const values = dataRange.getValues();
  
  const resultRange = sheet.getRange("C1:C10");
  const results = [];

  values.forEach(row => {
    const text = row[0];
    if (isFullWidth(text)) {
      results.push(["全角"]);
    } else if (isHalfWidth(text)) {
      results.push(["半角"]);
    } else {
      results.push(["混在"]);
    }
  });

  resultRange.setValues(results);
}

このスクリプトの説明

  • getRange(“B1:B10”)でデータが入力されている範囲を指定し、getValues()でその範囲のデータを取得します。
  • 判定結果を入れるために、C列の範囲を
    getRange("C1:C10")

    で指定し、結果を保存するために配列を用意します。

  • それぞれの行について全角・半角の判定を行い、結果をC列のデータ範囲に
    setValues(results)

    でセットします。

catman
catman
こんな感じでGASを活用して、全角半角を判定しよう!しっかり練習してマスターするのだ!