日本語の氏名をローマ字表記に変換する作業は、英語での書類作成や海外とのやり取りでよく必要になります。複数の名前を手作業で変換するのは時間がかかりますが、Google Spreadsheetを使えば簡単に一括変換できます。この記事では、その方法を詳しく解説します。
目次
- 基本的な方法:関数を使用する
- 外部ツールを利用する方法
- Google Apps Scriptを使った高度な変換方法
- よくある問題と解決策
1. 基本的な方法:関数を使用する
必要な準備
- 日本語の氏名が入力されたGoogle Spreadsheet
- インターネット接続
手順
1-1. GOOGLETRANSLATE関数を使う方法
最も簡単な方法は、Google Spreadsheetの翻訳機能を利用することです。
=GOOGLETRANSLATE(A2, "ja", "en")
この関数を使うと、A2セルの日本語テキストを英語に翻訳します。ただし、この方法では名前の音訳ではなく意味訳になる場合があります。例えば「田中」が「rice field middle」のように翻訳されてしまうことがあります。
1-2. ROMANJI関数(カスタム関数)を作成する
より正確なローマ字変換のためには、カスタム関数を作成しましょう。
- スプレッドシートで「ツール」→「スクリプトエディタ」を選択
- 以下のコードを貼り付け
/**
* 日本語をローマ字に変換する関数
* @param {string} input 日本語テキスト
* @return {string} ローマ字テキスト
* @customfunction
*/
function ROMANJI(input) {
if (!input) return "";
// Google翻字APIを使用
var url = "https://inputtools.google.com/request?text=" +
encodeURIComponent(input) + "&itc=ja-t-i0-und&num=1";
try {
var response = UrlFetchApp.fetch(url);
var data = JSON.parse(response.getContentText());
if (data[0] === "SUCCESS") {
var result = data[1][0][1][0];
return result;
}
return input;
} catch (e) {
return "Error: " + e.toString();
}
}
- 保存して閉じる
- スプレッドシートに戻り、ローマ字に変換したいセルに以下の関数を入力
=ROMANJI(A2)
この方法では、Google翻字APIを使って、より正確なローマ字変換が可能です。
2. 外部ツールを利用する方法
多くの名前を処理する場合は、外部ツールを利用する方法も効果的です。
手順
- 日本語の氏名データをCSVでエクスポート
- 以下のようなオンラインツールを利用
- 変換されたデータをGoogle Spreadsheetにインポート
3. Google Apps Scriptを使った高度な変換方法
より細かいカスタマイズが必要な場合は、Google Apps Scriptを使用して独自の変換ロジックを実装できます。
/**
* 日本語の氏名をヘボン式ローマ字に変換するスクリプト
*/
function convertNamesToRomaji() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const dataRange = sheet.getDataRange();
const values = dataRange.getValues();
// ヘボン式変換マップ
const hepburnMap = {
'あ':'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', 'ぢ':'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'
};
// カタカナ変換用の対応表
const katakanaMap = {
'ア':'あ', 'イ':'い', 'ウ':'う', 'エ':'え', 'オ':'お',
'カ':'か', 'キ':'き', 'ク':'く', 'ケ':'け', 'コ':'こ',
'サ':'さ', 'シ':'し', 'ス':'す', 'セ':'せ', 'ソ':'そ',
'タ':'た', 'チ':'ち', 'ツ':'つ', 'テ':'て', 'ト':'と',
'ナ':'な', 'ニ':'に', 'ヌ':'ぬ', 'ネ':'ね', 'ノ':'の',
'ハ':'は', 'ヒ':'ひ', 'フ':'ふ', 'ヘ':'へ', 'ホ':'ほ',
'マ':'ま', 'ミ':'み', 'ム':'む', 'メ':'め', 'モ':'も',
'ヤ':'や', 'ユ':'ゆ', 'ヨ':'よ',
'ラ':'ら', 'リ':'り', 'ル':'る', 'レ':'れ', 'ロ':'ろ',
'ワ':'わ', 'ヲ':'を', 'ン':'ん',
'ガ':'が', 'ギ':'ぎ', 'グ':'ぐ', 'ゲ':'げ', 'ゴ':'ご',
'ザ':'ざ', 'ジ':'じ', 'ズ':'ず', 'ゼ':'ぜ', 'ゾ':'ぞ',
'ダ':'だ', 'ヂ':'ぢ', 'ヅ':'づ', 'デ':'で', 'ド':'ど',
'バ':'ば', 'ビ':'び', 'ブ':'ぶ', 'ベ':'べ', 'ボ':'ぼ',
'パ':'ぱ', 'ピ':'ぴ', 'プ':'ぷ', 'ペ':'ぺ', 'ポ':'ぽ',
'キャ':'きゃ', 'キュ':'きゅ', 'キョ':'きょ',
'シャ':'しゃ', 'シュ':'しゅ', 'ショ':'しょ',
'チャ':'ちゃ', 'チュ':'ちゅ', 'チョ':'ちょ',
'ニャ':'にゃ', 'ニュ':'にゅ', 'ニョ':'にょ',
'ヒャ':'ひゃ', 'ヒュ':'ひゅ', 'ヒョ':'ひょ',
'ミャ':'みゃ', 'ミュ':'みゅ', 'ミョ':'みょ',
'リャ':'りゃ', 'リュ':'りゅ', 'リョ':'りょ',
'ギャ':'ぎゃ', 'ギュ':'ぎゅ', 'ギョ':'ぎょ',
'ジャ':'じゃ', 'ジュ':'じゅ', 'ジョ':'じょ',
'ビャ':'びゃ', 'ビュ':'びゅ', 'ビョ':'びょ',
'ピャ':'ぴゃ', 'ピュ':'ぴゅ', 'ピョ':'ぴょ',
'ッ':'っ', '・':'', ' ':' '
};
// 氏名をローマ字に変換する関数
function nameToRomaji(name) {
// まず、APIを使ってひらがなに変換
const url = "https://inputtools.google.com/request?text=" +
encodeURIComponent(name) + "&itc=ja-t-i0-und&num=1";
try {
const response = UrlFetchApp.fetch(url);
const data = JSON.parse(response.getContentText());
if (data[0] === "SUCCESS") {
let kana = data[1][0][1][0];
// ひらがなをヘボン式ローマ字に変換(独自の変換ロジック)
// さらに氏名のフォーマットをするロジックを追加できます
// 例:「たなか はなこ」→「Tanaka Hanako」
return kana.toUpperCase(); // ここでは簡易的に大文字にするだけ
}
return name;
} catch (e) {
return "Error: " + e.toString();
}
}
// スプレッドシートのデータを処理
for (let i = 1; i < values.length; i++) { // ヘッダー行をスキップ
const name = values[i][0]; // A列から氏名を取得
if (name) {
const romaji = nameToRomaji(name);
sheet.getRange(i+1, 2).setValue(romaji); // B列にローマ字を設定
}
}
}
このスクリプトを実行するには、「実行」ボタンをクリックするか、カスタムメニューを作成して実行できます。
4. よくある問題と解決策
4-1. 長音の扱い
日本語の「ー」(長音)の扱いは注意が必要です。一般的には以下のルールを適用します:
- 「あ」の後の長音 → ā または aa(例:「おかあさん」→「okāsan」または「okaasan」)
- 「い」の後の長音 → ī または ii(例:「おにいさん」→「onīsan」または「oniisan」)
- 「う」の後の長音 → ū または uu(例:「しゅうり」→「shūri」または「shuuri」)
パスポート表記ではマクロンを使わないのが一般的です。
4-2. 特殊な名前の処理
読み方が複数ある名前(例:「上野」が「うえの」か「かみの」か)は正確に変換できないことがあります。以下の方法で対処します:
- 事前に読み方(ふりがな)を別列に用意する
- ふりがなからローマ字への変換を行う
まとめ
Google Spreadsheetを使って日本語の氏名を一括でローマ字変換する方法は複数あります。シンプルな方法から高度なスクリプトを使う方法まで、状況に応じて適切な方法を選ぶことができます。
特に多くの名前を処理する必要がある場合は、Google Apps Scriptを使ったカスタム関数が非常に便利です。ぜひ試してみてください。
コメントを残す