【GAS】半角文字列を全角文字列に変換する方法(ExcelのJIS関数) (Gスプレッドシート)

コピペでできるGAS

GAS応用の一覧

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

【初めてのGAS 1.】セルの値を操作する(取得と設定 setValue,getValue)
  • GAS(Google Apps Script)でスプレッドシートを扱う際の基本的なことがわかります。
  • セルの値を取得したり設定することができます。
  • 今回は、とっても価値の高い方法をお伝えします。


    これを知ることであなたは、

    • GAS(Google Apps Script)を使い、あなた独自のスプレッドシート関数が作れてしまいます。
    • 半角文字列を全角文字列に変換できる関数が作れます。

    なので、こんな風に「半角文字」を
    「全角文字」に変換できちゃいます。

     

     

    逆に、知らないと

    あなた:「さーて、半角文字を全角文字に変換しようかな。」

    あなた:「えーと、なんて関数だったかな?」

    あなた:「JISだったかな・・・・・・」

    あなた:「あれ???? ないやん」

    てなことになります。

    Excelには、JIS関数と言って「半角から全角」に
    変換する関数があるのですが、残念ながら
    スプレッドシートには「半角から全角」に変換する
    関数がないのです。

    でも、諦めないでください。

    ちょっと手を伸ばせば、そこに全く新しい
    世界があります。

    なので、ぜひ自作関数にチャレンジして
    みてください。

    そして、

    こんな風に答えてみてください。

    ちなみに全角→半角変換は、
    =ASC()
    という関数でできます。

     

     

     

    では、動画です。

    動画はこちら

    【GAS】スプレッドシートで初心者がいきなりExcelのJIS関数(半角文字列を全角文字列に変換する)を作成する

    動画で使用したシート

    動画で使用したスクリプト

    
    /**
    半角文字列を全角文字列に変換します。
    *
    * @param {"abc"} 半角文字列 変換する半角の文字列を指定します。
    * @return {全角文字列} str 全角文字列
    * @customfunction
    */
    function myJIS(半角文字列) {
    
      let str = 半角文字列
    
      str = toFullWidth(str);//英数字を半角から全角に変換
      
      str = kana2upper(str);//半角カナを全角カナにする
    
      return(str);
    }
    
    
    
    
    //半角から全角に変換
    function toFullWidth(value) {
      if (!value) return value;
      return String(value).replace(/[!-~]/g, function(all) {
        return String.fromCharCode(all.charCodeAt(0) + 0xFEE0);
      });
    }
    
    
    //半角カナを全角カナにする
    function kana2upper(string) {
    
    	var arrayedString = string.split('');
    	var value = '';
    
    	var triTable = {
    	};
    	var biTable = {  
    	};
    /**
     * 半角カタカナを全角カタカナに変換
     * 
     * @param {String} str 変換したい文字列
     */
    	var uniTable = {
            'ガ': 'ガ', 'ギ': 'ギ', 'グ': 'グ', 'ゲ': 'ゲ', 'ゴ': 'ゴ',
            'ザ': 'ザ', 'ジ': 'ジ', 'ズ': 'ズ', 'ゼ': 'ゼ', 'ゾ': 'ゾ',
            'ダ': 'ダ', 'ヂ': 'ヂ', 'ヅ': 'ヅ', 'デ': 'デ', 'ド': 'ド',
            'バ': 'バ', 'ビ': 'ビ', 'ブ': 'ブ', 'ベ': 'ベ', 'ボ': 'ボ',
            'パ': 'パ', 'ピ': 'ピ', 'プ': 'プ', 'ペ': 'ペ', 'ポ': 'ポ',
            'ヴ': 'ヴ', 'ヷ': 'ヷ', 'ヺ': 'ヺ',
            'ア': 'ア', 'イ': 'イ', 'ウ': 'ウ', 'エ': 'エ', 'オ': 'オ',
            'カ': 'カ', 'キ': 'キ', 'ク': 'ク', 'ケ': 'ケ', 'コ': 'コ',
            'サ': 'サ', 'シ': 'シ', 'ス': 'ス', 'セ': 'セ', 'ソ': 'ソ',
            'タ': 'タ', 'チ': 'チ', 'ツ': 'ツ', 'テ': 'テ', 'ト': 'ト',
            'ナ': 'ナ', 'ニ': 'ニ', 'ヌ': 'ヌ', 'ネ': 'ネ', 'ノ': 'ノ',
            'ハ': 'ハ', 'ヒ': 'ヒ', 'フ': 'フ', 'ヘ': 'ヘ', 'ホ': 'ホ',
            'マ': 'マ', 'ミ': 'ミ', 'ム': 'ム', 'メ': 'メ', 'モ': 'モ',
            'ヤ': 'ヤ', 'ユ': 'ユ', 'ヨ': 'ヨ',
            'ラ': 'ラ', 'リ': 'リ', 'ル': 'ル', 'レ': 'レ', 'ロ': 'ロ',
            'ワ': 'ワ', 'ヲ': 'ヲ', 'ン': 'ン',
            'ァ': 'ァ', 'ィ': 'ィ', 'ゥ': 'ゥ', 'ェ': 'ェ', 'ォ': 'ォ',
            'ッ': 'ッ', 'ャ': 'ャ', 'ュ': 'ュ', 'ョ': 'ョ',
            '。': '。', '、': '、', 'ー': 'ー', '「': '「', '」': '」', '・': '・'
    	};
    
    	if(triTable[string] !== undefined){
            return triTable[string];
    	} else if(biTable[string] !== undefined) {
            return biTable[string];
    	}
    
        var biCheck = new Object();
        for (var k in biTable){
            var tmp = k.split('');
            biCheck[tmp[0]] = true;
        }
    
        var triCheck = new Object();
        for (var tk in triTable){
            var tmp = tk.split('');
            triCheck[tmp[0] + tmp[1]] = true;
            biCheck[tmp[0]] = true; 
        }
        
    
    	var buf = '';
    	for(var i = 0; i < arrayedString.length ; i++){
            var str = arrayedString[i];
            buf += str;
            if(buf.length == 3){
                if(triTable[buf] !== undefined){
                    value += triTable[buf];
                } else {
                    tmp = buf.split('');
                    value += biTable[tmp[0] + tmp[1]];
                    value += uniTable[tmp[2]] === undefined ? tmp[2] : uniTable[tmp[2]];
                    
                }
    
            } else if(buf.length == 2) {
                if(triCheck[buf] !== undefined) { 
                } else if(biTable[buf] !== undefined) {
                        value += biTable[buf];
                        buf = '';
                    } else {
                        tmp = buf.split('');
                        value += uniTable[tmp[0]]; 
                        value += uniTable[tmp[1]] === undefined ? tmp[1] : uniTable[tmp[1]]; 
                        buf = '';
                    } 
            } else if(biCheck[buf] !== undefined){
            } else { 
                    value += uniTable[str] === undefined ? str : uniTable[str];
                    buf = '';
            }
    
    
            }
    
            value += buf !== '' ? uniTable[buf] : '';
    
        value = value.replace(/([aiueo])ー/gi,'$1');
    	return value;
    }

    マインドセットします。

    マインドセット
    物事には必ず解決策がある

     

    正直、スクリプトは意味不明だったと思います。
    私も完全には理解できていません^^

    でも、とにかくmyJIS()ってのを
    スプレッドシートに入力するだけで
    変換する事ができたと思います。

    では、今回のGoogleシートマスターへの究極の方法です。

    Step1.
    スクリプトエディタを開く

    Step2.

    スクリプトをコピペする

    Step3.

    myJIS()を使ってみる

    では、早速、スクリプトエディタを開いてください
    今すぐです。

    最後までご覧いただきありがとうございます。

    つぎはこちら

    【GAS30】指定した文字列をすべて置換する方法 replace
    Googleフォーム登録時の自動返信メールに複数回、登録者の名前を表示させることができるようになります。

     

    GAS応用の一覧



    2023/05/21

    myJISのコメントを少し変更しました。

    これによりmyJIS使用時に以下のような説明が表示されるようになりました。

    コメント変更方法はこちら

    【GAS基礎講座】独自(カスタム)関数の説明をかっこよくする方法(JSDOC)
  • カスタム関数作成時にスプレッドシートから使いやすいドキュメントを作成することができます。
  • スプレッドシート内の関数の説明と同様のドキュメントを作成できます。
  •  

    【GAS】アルファベットや数字のフリガナをふる関数を作成する(連想配列)
  • GAS(Javascriptにおける)連想配列の基本的な使い方がわかります。
  • 数字およびアルファベットのフリガナをふる関数が作れます。
  •  

    濁点対応 2023/10/25

    匿名さまよりご指摘があり

    「パ」や「ギ」が一文字として表示されず、
    「ハ°」「キ゛」のように「ハ」と「°」の2文字に別れて変換されてしまう

    頑張ろうかと思ったのですが、すでに完成形のロジックがありましたので
    以下を使用していただくのがよろしいかと存じます。

    上記サイトのf7conv で半角カナ→全角カナは変換できます。

    一応以下のようにやれば、すべての半角に対応します。

    function myJIS(半角文字列) {
    
    let str = 半角文字列
    
    str = toFullWidth(str);//英数字を半角から全角に変換
    
    str = f7conv(str)
    // str = kana2upper(str);//半角カナを全角カナにする
    
    return (str);
    }

    参考サイト

    アドオン「文字変換くん」

    【Google スプレッドシート】表の中で全角と半角がバラバラ! 一括で統一する方法
     全角文字と半角文字が混在している表、ありますよね。複数人での入力や、他の表からコピー&ペーストした場合に起こりがちです。住所録などであれば、あるはずのデータが検索にヒットしなかったり、正しく並べ替えできなかったりと、データベースとして使う際に不都合です。また、計算式が含まれている表であれば、計算結果も正しく表示されま...

    全角変換

    Google Spreadsheet 半角から全角に変換 - Qiita
    GAS.gs function toFullWidth(value) { if (!value) return value; return String(value).replace(//g, function(a...

    全角カナ変換

    google spreadsheet で半角カナを全角カナにする関数 kana2upper() を作成
    google spreadsheet で半角カナを全角カナにする関数 kana2upper() を作成 - kana2upper.js.gs

    全角カナ変換時に濁点が分離しません

    Googleスプレッドシートで半角カタカナを全角カタカナに変換する関数「f7conv」をGASで作る
    概要Googleスプレッドシート上で「半角カタカナ」を「全角カタカナ」に変換したくなった。色々探したが、先人が作成したものは「ガ」などの濁音の変換時に「カ」と「濁点」に分割されてしまい、そのまま使用で...

     

    コメント

    1. ゆるまる より:

      こんばんは
      YouTubeからきました。
      いつも興味深く拝見してます。
      これからも宜しくお願い致します。

      • hiroshi より:

        ゆるまるさん
        コメントありがとうございます。
        こちらこそよろしくおねがいします。

    2. 匿名 より:

      タイトルが違うので修正してください。。。
      「【GAS】全角文字列を半角文字列に変換する方法(JIS関数)」ではなく
      “半角”を”全角”にですよね。

    3. 匿名 より:

      大変参考になりました。
      1つ質問なのですが、全角に変換されたあとの「パ」や「ギ」が一文字として表示されず、
      「ハ°」「キ゛」のように「ハ」と「°」の2文字に別れて変換されてしまうのですが
      解決方法はございますでしょうか?
      お手数ですがもしよろしければご教示いただけますと幸いです。

      • hiroshi より:

        確かにいただけないですね。
        できているサイトがありました。
        https://hi3103.net/notes/google/1394

        とりあえず上記サイトのコードをコピペし

        function myJIS(半角文字列) {

        let str = 半角文字列

        str = toFullWidth(str);//英数字を半角から全角に変換

        str = f7conv(str)
        // str = kana2upper(str);//半角カナを全角カナにする

        return (str);
        }

        とやればうまくいきます。
        ※いずれ上記を取り込んだものを作成します。

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