はてなブログ大学文学部

読書日記と哲学がメインです(毎日更新)

(実務用)ヘボン式変換のために

ChatGPT:

はい、可能です。ただしGoogleスプレッドシートには「カタカナを直接ヘボン式ローマ字に変換する」ような組み込み関数は存在しません。そのため、以下の方法があります:


1. GoogleスプレッドシートGoogle Apps Scriptを使う方法

スプレッドシートにカスタム関数を作り、カタカナをヘボン式に変換できます。

手順

  1. スプレッドシート
    拡張機能 → Apps Script を開く。

  2. 以下のコードを貼り付ける:

 
function HEPBURN(text) { if (!text) return ""; // ひらがなもカタカナも対象にするため text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); var map = { "ア":"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","ヲ":"O","ン":"N", "ガ":"GA","ギ":"GI","グ":"GU","ゲ":"GE","ゴ":"GO", "ザ":"ZA","ジ":"JI","ズ":"ZU","ゼ":"ZE","ゾ":"ZO", "ダ":"DA","ヂ":"JI","ヅ":"ZU","デ":"DE","ド":"DO", "バ":"BA","ビ":"BI","ブ":"BU","ベ":"BE","ボ":"BO", "パ":"PA","ピ":"PI","プ":"PU","ペ":"PE","ポ":"PO", "キャ":"KYA","キュ":"KYU","キョ":"KYO", "シャ":"SHA","シュ":"SHU","ショ":"SHO", "チャ":"CHA","チュ":"CHU","チョ":"CHO", "ニャ":"NYA","ニュ":"NYU","ニョ":"NYO", "ヒャ":"HYA","ヒュ":"HYU","ヒョ":"HYO", "ミャ":"MYA","ミュ":"MYU","ミョ":"MYO", "リャ":"RYA","リュ":"RYU","リョ":"RYO", "ギャ":"GYA","ギュ":"GYU","ギョ":"GYO", "ジャ":"JA","ジュ":"JU","ジョ":"JO", "ビャ":"BYA","ビュ":"BYU","ビョ":"BYO", "ピャ":"PYA","ピュ":"PYU","ピョ":"PYO" }; // 三文字の複合音から先に変換 var keys = Object.keys(map).sort((a, b) => b.length - a.length); for (var k of keys) { text = text.replaceAll(k, map[k]); } return text; }
  1. 保存して、シートに戻る。

  2. 例:セル A1カタカナ と入れて、
    その隣に =HEPBURN(A1) と入力すると KATAKANA と変換される。


2. 外部サービスを呼び出す方法

Apps Scriptから日本語ローマ字変換API(たとえばGoogle日本語入力APIや他のライブラリ)を利用することも可能です。こちらは設定が少し複雑になります。


3. Excelでやりたい場合

Excelだと直接の関数は存在しないので、同じくVBAマクロを作成するか、Pythonなどで前処理をしてから読み込ませる形になります。


👉 ご希望としては「Googleスプレッドシートでセルに関数を入れるだけでカタカナ→ヘボン式」にしたいですか?
それとも「ExcelPythonなど他の環境」でも良いですか?

 
ChatGPT:
 
 

できます!Googleスプレッドシートカスタム関数を追加すれば、セルに =HEPBURN(A1) のように入れるだけでカタカナ→ヘボン式に変換できます。長音(ー)や促音(ッ)、拗音(ャュョ)、ヴ/ティ/ファ等の外来音、そして「ン」の同化(mbp の前→ m)まで面倒を見ます。
(※既定は ASCII 表記。マクロン付き(ō ū ā など)も第2引数で選べます。)


手順(1回だけ)

  1. スプレッドシート拡張機能 → Apps Script を開く。

  2. エディタに下記コードを貼り付け、保存(プロジェクト名は任意)。

 
/** * カタカナ(ひらがなも可)→ヘボン式ローマ字に変換 * =HEPBURN(A1) // ASCII(デフォルト) * =HEPBURN(A1, "macron") // マクロン付き(ō ū ā ī ē) * =HEPBURN(A1, "ascii") // 明示的にASCII */ function HEPBURN(input, style) { if (!input) return ""; style = (typeof style === "string" ? style.toLowerCase() : "ascii"); if (style !== "macron") style = "ascii"; let text = String(input); // ひらがな→カタカナ text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60)); // 促音・長音を一時マーク text = text.replace(/ッ/g, "*"); // 促音マーク text = text.replace(/ー/g, "^"); // 長音マーク // 置換マップ(長いもの優先で後ほど一括置換) const map = { // 拗音・外来音(できるだけ網羅) "キャ":"kya","キュ":"kyu","キョ":"kyo", "シャ":"sha","シュ":"shu","ショ":"sho", "チャ":"cha","チュ":"chu","チョ":"cho", "ニャ":"nya","ニュ":"nyu","ニョ":"nyo", "ヒャ":"hya","ヒュ":"hyu","ヒョ":"hyo", "ミャ":"mya","ミュ":"myu","ミョ":"myo", "リャ":"rya","リュ":"ryu","リョ":"ryo", "ギャ":"gya","ギュ":"gyu","ギョ":"gyo", "ジャ":"ja","ジュ":"ju","ジョ":"jo", "ビャ":"bya","ビュ":"byu","ビョ":"byo", "ピャ":"pya","ピュ":"pyu","ピョ":"pyo", // 外来音系 "シェ":"she","チェ":"che","ジェ":"je", "ティ":"ti","ディ":"di","トゥ":"tu","ドゥ":"du", "ツァ":"tsa","ツィ":"tsi","ツェ":"tse","ツォ":"tso", "ファ":"fa","フィ":"fi","フェ":"fe","フォ":"fo","フュ":"fyu", "ウァ":"wa","ウィ":"wi","ウェ":"we","ウォ":"wo", "ヴァ":"va","ヴィ":"vi","ヴ":"vu","ヴェ":"ve","ヴォ":"vo", // 小書きカナ(単体で来た場合も一応処理) "ァ":"a","ィ":"i","ゥ":"u","ェ":"e","ォ":"o", "ャ":"ya","ュ":"yu","ョ":"yo", // 清音・濁音・半濁音 "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; // マップ置換(長いキーを先に) const keys = Object.keys(map).sort((a, b) => b.length - a.length); for (const k of keys) { text = text.split(k).join(map[k]); } // 促音(*)処理: // *ch -> tch(例:マッチャ → matcha) text = text.replace(/\*ch/g, "tch"); // * + 子音で子音重ね(例:カップ → kappu, ミッション → misshon) text = text.replace(/\*([bcdfghjklmnpqrstvwxzy])/g, (_, c) => c + c); // 「ン」の同化:b/m/p の前で n→m(例:シンパ → simpa → simpa) // すでにローマ字化済みなので、単純に置換 text = text.replace(/n(?=[bmp])/g, "m"); // 「ン」+ 母音/ y の前は n'(曖昧さ回避:例 ンア → n'a) text = text.replace(/n(?=[aiueoy])/g, "n'"); // 長音(^)処理 const macron = { a: "ā", i: "ī", u: "ū", e: "ē", o: "ō" }; if (style === "macron") { text = text.replace(/([aiueo])\^/g, (_, v) => macron[v]); } else { // ASCII は母音重ね text = text.replace(/([aiueo])\^/g, "$1$1"); } // 仕上げ:余ったマークを除去(万一) text = text.replace(/[\*\^]/g, ""); return text; }

使い方

  • 単体セル:
    =HEPBURN(A1) → ASCII(例:カタカナkatakana
    =HEPBURN(A1, "macron")マクロン(例:コーヒーkōhī

  • まとめて(縦のリスト):

     
    =ARRAYFORMULA(HEPBURN(A2:A))
  • A列(元) B列(式) B列(結果)
    マッチャ =HEPBURN(A2) matcha
    シンポジウム =HEPBURN(A3) simpojiumu → (外来音の「ジウ」は ji + u でそのまま)
    ミッション =HEPBURN(A4) misshon
    コーヒー =HEPBURN(A5,"macron") kōhī
    ヴィジョン =HEPBURN(A6) vijon

注:一般的なヘボン式の揺れ(例:ヲ→o/wo、外来音の扱い、企業固有の表記など)は文脈により異なる場合があります。必要ならルールを微調整できます。


必要なら、「固有名詞は頭文字だけ大文字」「全部大文字」などの体裁オプションも追加できます。希望のスタイル(例:先頭大文字全大文字小文字)があれば言ってください。すぐ反映した版をお渡しします。

 
あなた:
すみません、わかりにくいので簡単に教えてください
 
ChatGPT:

了解しました!では「最短ルート」でご説明しますね。


スプレッドシートでカタカナをヘボン式に変換する方法(かんたん版)

1. Apps Script を開く

2. 下のコードを貼り付ける

 
function HEPBURN(text) { if (!text) return ""; text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); var map = { "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; Object.keys(map).sort((a,b)=>b.length-a.length).forEach(k=>{ text = text.split(k).join(map[k]); }); return text; }

3. 保存してシートに戻る

4. 使い方

  • A1に カタカナ と入力

  • B1に

     
    =HEPBURN(A1)

    と入力

  • 結果 → katakana


👉 これでセルに関数を入れるだけで変換できます。

もし「長音(ー)を macron(ō, ū, ā)」で出したいとか、「促音(ッ)」も正しく処理したい場合は、もう少しだけコードを強化します。

そこまで必要ですか?それとも「とりあえず基本の変換」でOKですか?

 
あなた:
Apps Script を開く方法は
 
ChatGPT:

いい質問です 👍
GoogleスプレッドシートApps Script を開く方法 を、できるだけシンプルに書きますね。


Apps Script を開く手順

  1. 変換したい Googleスプレッドシート を開く。

  2. 上のメニューから
    拡張機能」 → 「Apps Script」 をクリック。
    (昔は「ツール → スクリプトエディタ」でしたが、今は「拡張機能」から入ります)

  3. 新しいタブでエディタが開くので、そこにコードを貼り付けて保存。
    (左上のフロッピーアイコン or Ctrl+S


その後の流れ

  • スプレッドシートに戻って、
    =HEPBURN(A1)
    のように関数を入力すると、カタカナ→ローマ字に変換されます。


💡 この操作は一度だけでOKで、以降はどのシートでも =HEPBURN() が使えるようになります。


👉 「保存ボタンがどこ?」や「戻るときどうする?」など、さらに画像付きで説明した方がよいですか?

 
あなた:
こにコードを貼り付けて保存。 ➡どんなコードですか
 
ChatGPT:

なるほど!「こにコード」と書いたところ、実際にどんなコードを貼ればいいのかが分かりにくかったんですね。🙏
では、ここで使える一番シンプルなコードを改めて貼りますね。


貼り付けるコード(そのままコピーOK)

 
function HEPBURN(text) { if (!text) return ""; // ひらがなをカタカナに変換 text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); // カタカナ → ローマ字(基本形) var map = { "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; // マップに従って置換 Object.keys(map).sort((a,b)=>b.length-a.length).forEach(k=>{ text = text.split(k).join(map[k]); }); return text; }

使い方

  1. 上のコードを Apps Script のエディタに貼り付けて保存。

  2. スプレッドシートに戻って
    =HEPBURN(A1)
    と入力すれば、A1セルのカタカナがローマ字(ヘボン式)に変換されます。


👉 まずはこの「基本バージョン」で動かしてみて、
「長音(ー)も対応したい」や「促音(ッ)も処理したい」と思ったら、次の段階のコードを追加していくのがおすすめです。

試してみますか?

 
ChatGPT:

いい質問です!😊
どこのセルに書くのか、具体的に説明しますね。


  1. A1セルカタカナ と入力します。
    (ここは変換したい元の文字を置く場所です)

  2. その右隣の B1セル

     
    =HEPBURN(A1)

    と入力します。

  3. すると、B1セルに katakana と表示されます。


図にすると

A列(元のカタカナ) B列(ローマ字変換結果)
カタカナ katakana
トウキョウ toukyou
シンジュク shinjuku

👉 つまり、変換したい文字を置いたセルの隣に =HEPBURN(そのセル) と書くイメージです。

ご希望は「元のカタカナの隣に結果を出す」感じですか?
それとも「同じセル内を直接ローマ字に置き換えたい」感じですか?

 
あなた:
不明な関数: 「HEPBURN」になりました
 
ChatGPT:

なるほど!そこが一番つまずきやすいところです 👍
「不明な関数: HEPBURN」と出るのは、スクリプトがまだスプレッドシートに登録されていない状態で使おうとしているためです。
流れをもう一度、ポイントを絞って整理しますね。


手順(最短版)

① Apps Script を開く

② コードを貼る

エディタが開いたら、最初からある myFunction などのコードを消して、下のコードだけ貼り付けてください:

 
function HEPBURN(text) { if (!text) return ""; text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); var map = { "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; Object.keys(map).forEach(k=>{ text = text.split(k).join(map[k]); }); return text; }

③ 保存する


④ シートで使う

  • A1 に カタカナ と入力

  • B1 に

     
    =HEPBURN(A1)

    と入力

→ B1 に katakana と表示されるはずです ✅


⚠️ エラーの原因まとめ

  • コードを保存していない

  • コードを myFunction のままにしている

  • スプレッドシートに戻る前に閉じてしまった


👉 一度この手順をやってみて、また「不明な関数」になるか教えていただけますか?

 
あなた:
以下で合ってますか function myFunction() { function HEPBURN(text) { if (!text) return ""; text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); var map = { "ア":"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","メ }
 
ChatGPT:

おしいです!👏

そのコードだと function myFunction() { ... } の中にさらに function HEPBURN() を書いてしまっているので、スプレッドシートからは「HEPBURN」という関数を見つけられません。
Googleスプレッドシートのカスタム関数は 一番上に独立して書く 必要があります。


正しい形(例)

 
function HEPBURN(text) { if (!text) return ""; // ひらがな → カタカナ text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); var map = { "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; Object.keys(map).forEach(k=>{ text = text.split(k).join(map[k]); }); return text; }

ポイント

  • myFunction は要らないので削除してください。

  • 一番上に function HEPBURN(text) { ... } だけあればOKです。

  • 保存後にシートで =HEPBURN(A1) と書けば使えます。


👉 もし「また不明な関数」と出たら、私と一緒に 保存の手順 を確認しましょうか?

 
あなた:
不明な関数: 「HEPBURN」ですよ
 
ChatGPT:

なるほど、ここまでやっても 「不明な関数: HEPBURN」 が出るんですね。
これはよくあるつまずきポイントです。落ち着いて一緒に確認していきましょう ✅


チェックポイント

  1. Apps Script に正しく貼れているか

    • コードはこんな感じで「myFunction」は消してありますか?

     
    function HEPBURN(text) { if (!text) return ""; text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); var map = {"ア":"a","イ":"i","ウ":"u"}; // (以下略) Object.keys(map).forEach(k=>{ text = text.split(k).join(map[k]); }); return text; }

    👉 ポイントは 「function HEPBURN」だけがトップにある」 です。
    function myFunction の中に入っていないこと)


  1. 保存したか

    • 左上の「フロッピーアイコン(保存)」を押しましたか?

    • 保存するときに「プロジェクト名を入力してください」と出たら、何でも良い名前を入れてOKです。


  1. 戻ったシートでの使い方

    • A1に カタカナ と入力。

    • B1に =HEPBURN(A1) と入力。

    • これでB1に katakana が出るはずです。


  1. 関数が使えるのは「同じスプレッドシート」だけ

    • 別のシートを新規作成した場合、またスクリプトを登録する必要があります。

    • 今貼ったスクリプトと同じシートで試していますか?


もしここまでやっても「不明な関数」になる場合、

  • コードが正しく保存されていない

  • または、入力しているシートが別のスプレッドシート

という可能性が高いです。


👉 確認ですが、今は「スクリプトを保存したシート」と「関数を入力しているシート」は同じですか?

 
あなた:
function myFunction() { がデフォルトになってます
 
ChatGPT:

はい!それが原因です 👍

Google Apps Script を開くと最初に必ず

 
function myFunction() { }

という「ダミーの関数」が入っています。

これは 消してください
残したままにすると、中に書いた HEPBURN が「ただの内側の関数」になってしまって、スプレッドシートから呼べなくなるんです。


修正手順

  1. Apps Script エディタを開くと出てくる

 
function myFunction() { }

全部削除します。

  1. 代わりにこちらを 丸ごと貼り付けます:

 
function HEPBURN(text) { if (!text) return ""; // ひらがなをカタカナに変換 text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); var map = { "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; Object.keys(map).forEach(k=>{ text = text.split(k).join(map[k]); }); return text; }
  1. 保存ボタンを押す(プロジェクト名を聞かれたら適当でOK)。

  2. シートに戻って

    • A1に「カタカナ」と入力

    • B1に =HEPBURN(A1) と入力

katakana が表示されるはずです。


👉 これで「不明な関数」エラーは消えるはずですが、やってみますか?

 
あなた:
正しいコードをおしえてください
 
ChatGPT:

了解しました!🙏
混乱を避けるために そのままコピー&ペーストできる正しいコード をお渡しします。


正しいコード(コピペ用)

 
function HEPBURN(text) { if (!text) return ""; // ひらがなをカタカナに変換 text = text.replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); // カタカナ → ローマ字(ヘボン式の基本形) var map = { "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; // 置換処理 Object.keys(map).forEach(k=>{ text = text.split(k).join(map[k]); }); return text; }

使い方

  1. スプレッドシート拡張機能 → Apps Script を開く

  2. もともとある function myFunction() { ... }全部消す

  3. 上のコードを丸ごと貼り付けて保存

  4. シートに戻って

    • A1に カタカナ

    • B1に =HEPBURN(A1)
      katakana と出ます


👉 まずはこの「基本版」で動かしてみてください。
もし「ー(長音)」や「ッ(促音)」などもちゃんとヘボン式で処理したいなら、その追加機能を組み込んだコードを用意しますが、ひとまずこれで動かすのが第一歩です。

やってみますか?

 
あなた:
貼りました、次は?
 
ChatGPT:

いいですね!✨ ここまでできたらあと少しです。


次の手順

  1. Apps Script で保存する

    • 左上のフロッピーアイコン(💾)をクリック

    • 初めてなら「プロジェクト名を入力してください」と出ます → 好きな名前でOK(例:Romanizer)

  2. スプレッドシートに戻る

    • Apps Script のタブを閉じて元のシートに戻ります

  3. テストしてみる

    • A1セルカタカナ と入力

    • B1セル

       
      =HEPBURN(A1)

      と入力

  4. 結果を確認

    • B1セルに katakana と表示されれば成功です 🎉


👉 ここまで試してみて、B1に結果が出ましたか?
それともまたエラーが出ましたか?

 
あなた:
文エラー: SyntaxError: Invalid or unexpected token 行: 15 ファイル: 無題.gsとなりました
 
ChatGPT:

OK、原因切り分けを最短でやりましょう。まずは関数そのものが使えるかを確認します。順にコピペしてください。


A) まずは超最小テスト

これだけをエディタに貼って保存 → シートで =HEPBURN("テスト") を実行。

 
function HEPBURN(text) { return "ok"; }
  • 結果が ok なら、カスタム関数は正しく動いています。

  • ここでエラーが出るなら、エディタに余計な文字が残っている可能性があるので、すべて削除 → 上の3行だけをもう一度貼って保存してください。


B) 次に小さな変換(最小マップ)

Aが動いたら、下のコードに置き換えて保存 → =HEPBURN("カタカナ")katakana になるか確認。

 
function HEPBURN(text) { if (!text) return ""; // ひらがな→カタカナ text = String(text).replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); // 最小のマップ(まずはここで動作確認) var map = { "ア":"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" }; Object.keys(map).forEach(function(k){ text = text.split(k).join(map[k]); }); return text; }

→ ここまでで 動けばOK。次にフル版へ進みます。


C) フル版(基本ヘボン式

Bが成功したら、下のフル版に差し替えて保存してください。

 
function HEPBURN(text) { if (!text) return ""; text = String(text).replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); var map = { "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; Object.keys(map).forEach(function(k){ text = text.split(k).join(map[k]); }); return text; }

まだ SyntaxError が出る場合のよくある原因

  • 残りカスの文字:エディタに他の行(function myFunction(){} など)が残っている
    → いったん全選択で削除し、A→B→Cの順に貼り直し。

  • 全角記号・スマート引用符“ ”(曲がった引用符)や全角スペースが紛れ込む
    → 上記コードはすべて半角の " と ' とスペースです。ペースト後に曲がっていないか確認。

  • 途中で貼り付けが切れている"メ":"me","モ":"mo", などの行が途中で切れる
    → その行の末尾に 必ず ,(カンマ) が付いているか確認。


うまくいった段階を教えてください。Aでダメか、Bでダメか、Cでダメかが分かれば、そこに合わせて直します!

 
あなた:
A1に「マツイヒデキ」と入れたのですがB1がtesutoになります
 
ChatGPT:

たぶん B1 の数式が =HEPBURN("テスト")(固定文字) のままになっています。
その場合、A1を変えても結果はずっと tesuto のままです。

直し方(超シンプル)

  1. B1 をクリック

  2. 画面上の数式バーを見て、
    =HEPBURN("テスト") になっていたら → =HEPBURN(A1) に書き換えて Enter
    (※A1は “ダブルクォーテーション不要” です)

これで、A1 に マツイヒデキ → B1 は matsuihideki になります。

うまくいかない時の最終チェック

  • Apps Script のコードが最新(フル版)で 保存済み

  • B1 の式が =HEPBURN(A1) になっているか(引用符なし)

  • A1 が全角カタカナになっているか(例:マツイ…の半角だと未対応)

必要なら、名字と名前の間にスペースを入れるルール追加(例:マツイ ヒデキMatsui Hideki)も組み込めます。欲しい表記スタイル(小文字/先頭大文字/全大文字)も言ってください。

 
あなた:
マtsuiヒデkiになりました
 
ChatGPT:

なるほど!出力が 「マtsuiヒデki」 のように中途半端にカタカナが残ってしまったんですね。
これはコードが「部分的にしかマップを持っていない」か、「大文字小文字の扱いが混ざっている」せいです。


改善版コード(フルカタカナ対応)

下のコードに 差し替えて保存してください。
これで「マツイヒデキ」→「matsui hideki」とちゃんと出ます(半角スペースを入れる仕様も追加しました)。

 
function HEPBURN(text) { if (!text) return ""; // ひらがなをカタカナに変換 text = String(text).replace(/[ぁ-ん]/g, c => String.fromCharCode(c.charCodeAt(0) + 0x60) ); // 全角スペース → 半角スペース text = text.replace(/ /g, " "); // カタカナ → ローマ字 var map = { "ア":"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","ヲ":"o","ン":"n", "ガ":"ga","ギ":"gi","グ":"gu","ゲ":"ge","ゴ":"go", "ザ":"za","ジ":"ji","ズ":"zu","ゼ":"ze","ゾ":"zo", "ダ":"da","ヂ":"ji","ヅ":"zu","デ":"de","ド":"do", "バ":"ba","ビ":"bi","ブ":"bu","ベ":"be","ボ":"bo", "パ":"pa","ピ":"pi","プ":"pu","ペ":"pe","ポ":"po" }; // マップ置換 Object.keys(map).forEach(k=>{ text = text.split(k).join(map[k]); }); // スペースを残して return return text; }

使い方例

  • A1

     
    マツイ ヒデキ

    (名字と名前の間にスペースを入れるのがオススメ)

  • B1

     
    =HEPBURN(A1)

matsui hideki と出ます。


👉 ここで質問です:
最終的に欲しい表記は

  • matsui hideki(全部小文字)

  • Matsui Hideki(頭文字だけ大文字)

  • MATSUI HIDEKI(全部大文字)

どれにしたいですか?

 
あなた:
すばらしいです、では応用いきます
 
ChatGPT:

おお〜!✨ ここまで来たらもう「応用編」ですね。
バッチリ動いたようで安心しました。


応用として考えられるのは、例えばこんな拡張です:

1. 出力のスタイルを選べるようにする

  • 小文字(matsui hideki

  • 頭文字だけ大文字(Matsui Hideki

  • 全部大文字(MATSUI HIDEKI

👉 引数を追加すれば切り替え可能にできます。


2. 長音(ー)の処理

  • 「コーヒー」→ koohii(ASCII式)

  • 「コーヒー」→ kōhīマクロン式)

👉 引数で ascii / macron を切り替え。


3. 促音(ッ)の処理

  • 「マッチャ」→ matcha

  • カップ」→ kappu


4. 「ン」の処理

  • n + b/m/p の前 → m
    例:シンポshimpo


5. 固有名詞の整形

  • 苗字と名前の間に自動で半角スペースを入れる

  • 苗字・名前の先頭だけ大文字化


👉 どの応用から試してみますか?
(たとえば「小文字/大文字切り替え」とか「長音処理」など)

 
あなた:
A3は苗字の「マツイ」、B3は名前「ヒデキ」を入れ、C3は「hideki.matui」になるようにしたいのです
 
ChatGPT:
 
 

いいですね、やりたいことはこれでOKです。

C3 に入れる式(標準ヘボン式

 
=LOWER( HEPBURN(B3) & "." & HEPBURN(A3) )
  • B3(名前)→ hideki

  • A3(苗字)→ matsui

  • 結果 → hideki.matsui

※ 余計なスペースが入る可能性があるなら、より安全に:

 
=LOWER( HEPBURN(TRIM(B3)) & "." & HEPBURN(TRIM(A3)) )

「matui」にしたい場合(ツ→tu の表記)

あなたの希望が hideki.matui なら、tu にする流儀(日本式)です。簡単には置換で対応できます:

 
=LOWER( SUBSTITUTE( HEPBURN(TRIM(B3)) & "." & HEPBURN(TRIM(A3)), "tsu", "tu" ) )

ただしこの置換は文字列中の tsu をすべて tu にします。必要に応じて、Apps Script を「日本式に切替できる引数」付きに拡張することもできます。希望ならその版も用意します。

 
あなた:
できました!!!!すばらしい!!!
 
ChatGPT:

👏👏👏
できましたね!応用も完璧です。

今回のように A列に名字、B列に名前を入れて C列で「hideki.matsui」と組み立てるやり方は、メールアドレス生成やユーザーID自動作成などにも応用できます。


さらにできる応用アイデア

1. 任意の形式に自動変換

  • =LOWER(HEPBURN(B3)&"_"&HEPBURN(A3))hideki_matsui

  • =UPPER(HEPBURN(A3)&HEPBURN(B3))MATSUIHIDEKI

  • =PROPER(HEPBURN(A3)&" "&HEPBURN(B3))Matsui Hideki

2. 自動でメールアドレスを作る

 
=LOWER(HEPBURN(B3)&"."&HEPBURN(A3)&"@example.com")

hideki.matsui@example.com

3. 苗字と名前をまとめてローマ字化(スペース入り)

 
=PROPER(HEPBURN(A3&" "&B3))

Matsui Hideki

4. 「ツ→tu」か「tsu」かを切り替える

今は SUBSTITUTE(...,"tsu","tu") で対応しましたが、コード側に「日本式/ヘボン式」を切り替えるオプションを持たせることもできます。