Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

スプレットシート上でひらがなをローマ字に変換する関数が作りたい!

解決したいこと

スプレットシート上でひらがなをローマ字に変換するkana2romajiが動かない。

発生している問題・エラー

TypeError: Cannot read property 'split' of undefined
kana2romaji @ kana2romaji.gs:3

こちらsplitがUndefinedになってしまい、動きません。

該当するソースコード

 function kana2romaji(string) {

    var arrayedString = string.split('');
    var value = '';

    var triTable = {
        'う゛ぁ': 'va','う゛ぃ' : 'vi', 'う゛ぅ' : 'vu','う゛ぇ' : 've', 'う゛ぉ' : 'vo'
    };

    var biTable = {
        'きゃ' : 'kya','きゅ' : 'kyu','きょ' : 'kyo',
        'ぎゃ' : 'gya','ぎゅ' : 'gyu','ぎょ' : 'gyo',
        'しゃ' : 'sha','しゅ' : 'shu','しょ' : 'sho',
        'じゃ' : 'ja','じゅ' : 'ju','じょ' : 'jo',
        'ちゃ' : 'cha','ちゅ' : 'chu','ちょ' : 'cho',
        'ぢゃ' : 'dya','ぢゅ' : 'dyu','ぢょ' : 'dyo',
        'でゃ' : 'dha','でゅ' : 'dhu','でょ' : 'dho',
        'にゃ' : 'nya','にゅ' : 'nyu','にょ' : 'nyo',
        'ひゃ' : 'hya','ひゅ' : 'hyu','ひょ' : 'hyo',
        'びゃ' : 'pya','びゅ' : 'byu','びょ' : 'byo',
        'みゃ' : 'mya','みゅ' : 'myu','みょ' : 'myo',
        'りゃ' : 'rya','りゅ' : 'ryu','りょ' : 'ryo',
        'てぁ' : 'tha','てぃ' : 'thi','てぇ' : 'tee',
        'う゛' : 'vu','あ゛' : 'a"',
        'っか' : 'kka','っき' : 'kki','っく' : 'kku','っけ' : 'kke','っこ' : 'kko',
        'っさ' : 'ssa','っし' : 'sshi','っす' : 'ssu','っせ' : 'sse','っそ' : 'sso',
        'った' : 'tta','っち' : 'cchi','っつ' : 'ttu','って' : 'tte','っと' : 'tto',
        'っな' : 'nna','っに' : 'nni','っぬ' : 'nnu','っね' : 'nne','っの' : 'nno',
        'っは' : 'hha','っひ' : 'hhi','っふ' : 'ffu','っへ' : 'hhe','っほ' : 'hho',
        'っま' : 'mma','っみ' : 'mmi','っむ' : 'mmu','っめ' : 'mme','っも' : 'mmo',
        'っや' : 'yya', 'っゆ' : 'yyu','っよ' : 'yyo',
        'っら' : 'rra','っり' : 'rri','っる' : 'rru','っれ' : 'rre','っろ' : 'rro',
        'っわ' : 'wwa',
        'っが' : 'gga','っぎ' : 'ggi','っぐ' : 'ggu','っげ' : 'gge','っご' : 'ggo',
        'っざ' : 'zza','っじ' : 'jji','っず' : 'zzu','っぜ' : 'zze','っぞ' : 'zzo',
        'っだ' : 'dda','っぢ' : 'ddi','っづ' : 'ddu','っで' : 'dde','っど' : 'ddo',
        'っば' : 'bba','っび' : 'bbi','っぶ' : 'bbu','っべ' : 'bbe','っぼ' : 'bbo',
        'っぱ' : 'ppa','っぴ' : 'ppi','っぷ' : 'ppu','っぺ' : 'ppe','っぽ' : 'ppo'

    };

    var uniTable = {
        'あ' : 'a','い' : 'i','う' : 'u','え' : 'e','お' : 'o',
        'か' : 'ka','き' : 'ki','く' : 'ku','け' : 'ke','こ' : 'ko',
        'さ' : 'sa','し' : 'shi','す' : 'su','せ' : 'se','そ' : 'so',
        'た' : 'ta','ち' : 'chi','つ' : 'tsu','て' : 'te','と' : 'to',
        'な' : 'na','に' : 'ni','ぬ' : 'nu','ね' : 'ne','の' : 'no',
        'は' : 'ha','ひ' : 'hi','ふ' : 'fu','へ' : 'he','ほ' : 'ho',
        'ま' : 'ma','み' : 'mi','む' : 'mu','め' : 'me','も' : 'mo',
        'や' : 'ya','ゆ' : 'yu','よ' : 'yo',
        'ら' : 'ra','り' : 'ri','る' : 'ru','れ' : 're','ろ' : 'ro',
        'わ' : 'wa','を' : 'wo','ん' : 'n',
        'が' : 'ga','ぎ' : 'gi','ぐ' : 'gu','げ' : 'ge','ご' : 'go',
        'ざ' : 'za','じ' : 'ji','ず' : 'zu','ぜ' : 'ze','ぞ' : 'zo',
        'だ' : 'da','ぢ' : 'di','づ' : 'du','で' : 'de','ど' : 'do',
        'ば' : 'ba','び' : 'bi','ぶ' : 'bu','べ' : 'be','ぼ' : 'bo',
        'ぱ' : 'pa','ぴ' : 'pi','ぷ' : 'pu','ぺ' : 'pe','ぽ' : 'po',
        'ぁ' : 'xa','ぃ' : 'xi','ぅ' : 'xu','ぇ' : 'xe','ぉ' : 'xo',
        'ゃ' : 'xya','ゅ' : 'xyu','ょ' : 'xyo','っ' : 'xtsu'
    };

    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;
}

自分で試したこと

https://github.com/cloneko/kana2romaji/blob/master/kana2romaji.js
に記載されているソースコードを流用しましたが、反応しませんでした。

もしよろしければご検討いただけますと幸いです。

0 likes

1Answer

このコードには問題はなく、kana2romaji(〜〜)の〜〜がundefinedということです。

1Like

Comments

  1. @yoshitaka216

    Questioner

    つまり初心者がコピペで使えるようなツールではないような形でしょうか?
  2. ??? 別に初心者が使えないツールではないです。

    どんな状況で使おうとしているかは分かりませんが、掲載していただいている`kana2romaji`関数の問題ではなく、その関数を呼び出している部分で、値がundefinedの変数を引数にしていることで発生しているエラーです。

    関数を呼び出している部分を掲載していただければ的確なアドバイスができると思いますが……。
  3. @yoshitaka216

    Questioner

    丁寧なコメントを頂きましてまことにありがとうございます。
    こちらですがスプレットシートシート上で下記のように普通の関数同様に使えればと考えております。「関数を呼び出して」とありますが、当方で行っている作業としては本文内に掲載しているソースコードをそのままScriptEditorに貼り付けているのみです。(Excel歴は長いのですが、プログラミング関連はからきしです...)


    セルに下記のように関数を入力して
    =kana2romaji(A2)
    A2セルに記載されているひらがなをローマ字に変換したく思います。

    お手数をおかけしますが、もし何かご助言頂ければ幸いです。

  4. 引数を指定していない呼び出し(`=kana2romaji()`のようになっている箇所)はありませんか?

    もしくは、以下のようにデフォルト引数に空文字を指定すれば解決するかもしれません。

    ```js:
    function kana2romaji(string = '') {
    // 省略
    }
    ```
  5. @yoshitaka216

    Questioner

    デフォルト引数に空文字を指定したら解決いたしました!ありがとうございます!

Your answer might help someone💌