見出し画像

How to 日本語化~vlookup篇

はじめに

一人で日本語化する場合もGoogleスプレッドシートを使用する場合もあるでしょう。開発が終了している場合は問題はありませんが、思わずアーリーアクセスに手を出してしまった、継続的にアップデートがされ、ゲーム内文章が更新されている場合、日本語化のためにゲーム内文章も更新しなければなりません。

更新分がファイル最後に追加されるだけならいいですが、ファイル途中に追加された場合、原文自体に変更が入った場合などWinMergeなどの比較ツールを使い変更箇所を洗い出す必要があります。ただどうしても手作業になる部分もあるためミスが発生することもあります。

それを極限まで減らすためにvlookupの使い方を紹介しようと思います。

利用する前に

前提条件としてゲーム内文章がGoogleスプレッドシートで扱いやすいものかどうかが重要になります。
テキストファイルとして存在しそれがTSVかCSVファイルまたはINIファイルだったり、バイナリタイプでもunpackツールで出力されるものが上記形式になるものであれば問題ありません。もし、XMLやJSONだった場合はTSVかCSVファイルに変換し、もとに戻せる仕組み(ツール)を作る必要があるでしょう。

Googleスプレッドシートでの作業

ゲーム内文章は大まかに単一言語のファイル構成、複数言語のファイル構成の2つに分かれると思います。
とはいえ、単一言語も複数言語もやり方は基本的に同じなのでしっかり読み込んで試してみましょう。

サンプル(単一言語の場合)

単一言語の場合、KEY(もしくはID)と文章がセットになっており、Googleスプレッドシート上では上記のように元文章の横に日本語を入力できる場所を作り作業をしていると思います。
元文章を日本語に置き換えるのはやめたほうがいいです。なぜなら元の文章に変更があった場合、元文章ファイルのバックアップがなければ変更された場所がわからなくもなります。そのため、基本は上SSのような形をとり、別シートに出力用を作ります。

アップデート後の新しいゲーム内文章(一部)

さて、アップデートでゲーム内文章の更新があった場合、古いデータのシート名を「旧」やゲームverなどにします。次に新しいゲーム内文章を新しいシートを作成し取り込みます。この時点で旧と新のシートができることになります。新のほうは当然翻訳もされていない状態ですが、ここからがvlookupの出番となります。

=vlookup(検索値, 範囲, 列番号, 検索の型)

これがvlookupの形です。検索文字列や範囲は引数と呼ばれるもので、それぞれ指定する必要があります。
検索値はそのままの意味で選択したい文字や値を意味します。文字列、セル指定が使用できます。
範囲は検索値に指定したものが1列目になるように指定します。日本語訳が含まれている列まで指定すればOK。
列番号は少し間違えやすいですが、範囲指定した一番左の列から何番目かを意味し、A列からの順番ではないことに注意しましょう。
検索の型は基本的に「false」です。日本語化で使う場合はまずこれで問題ありません。

関数の入力

vlookup関数を入力するのは新しいシートとなります。旧から日本語訳を抽出してきたいので「C2」セルへ入力するようになります。

検索値はこの場合2つの方法が考えられます。1つはKEY、もう1つは英文そのもの。
前者の場合、基本的にユニーク値(1つしか存在しない値)なので間違えなく1対1でデータをもってこれます。ただし、英文に変化があった場合は少し手間をかける必要があります。
後者の場合、英文に変化があった場合はデータが表示されないため、変化に気が付くということです。ただし、同じテキストがあった場合、先に見つかったほうが使用されると思われます(同じ英文があっても翻訳が違う場合もあるかもしれません。そのため、逆にミスにつながる場合があります)。

KEYを検索値とする場合の旧シート(赤枠が範囲)

=vlookup(A2, '旧'!$A$1:$C$20, 3, false)

上記の式がC2セルに入力されることになります。
範囲は旧シートのA1~C20まですべて、抽出したい列は3列目ということです。ここで注意しなければならないのは範囲です。上記はセルアドレスに$がついていることに気が付きましたか? これは絶対参照と呼ばれるものです。指定の仕方によってはつける必要がない場合もありますが、関数をコピーして使用する際には範囲が自動的に変化しないように絶対参照になるように注意してください(なお、これは範囲を指定した後にファンクションキー「F4」をアドレスの上で一度押せば変更することが可能です)。

英文を検索値とする場合の旧シート(赤枠が範囲)

次に英文を検索値にする場合は

=vlookup(B2, '旧'!$B$1:$C$20, 2, false)

先に記載の通り、範囲は検索値が1列目となるようにしなければならないためB列から始まっています。そして、列番号が2に変化していることに注意してください。

入力が終わったら3行目以降に関数をコピーします(C2をクリックした後、Ctrl+Shiftを押して矢印キー「下」を押せば一番下まで選択範囲なります。その状態でCtrl+Dで最初に選択したセルの内容がコピーされます。自動的に検索値のセル指定が1つずつ増えますが、範囲は絶対参照になっているまで変化しません)。

英文を検索値とした場合

上記SSは英文を検索値としていますが、一部セルに「#N/A」というエラーが表示されています。これは検索値として指定したものが見つからなかったということです。KEYを検索値にした場合は英文が修正されていても元の翻訳が表示されます。これを打開するにはif分を使ってチェックする必要があります。

=if(B2='旧'!B2, vlookup(A2, '旧'!$A$1:$C$20, 3, false), "修正/追加あり")

上記の式はKEYを検索値にした場合です。

=if(論理式、true値、false値)

これがifの基本的な形です。
論理式というのは2つの何かを比較することだと思ってください。上記の場合、新のB2セルと旧のB2セルが同一かどうかをチェックしています。
true値は論理式の結果がtrue(この場合だと同一値だったら)であれば、vlookupを実行し、false(違っていたら)であれば「修正/追加あり」とセルに表示するという意味になります。

ifとvlookupを組み合わせた場合

C7セルに「修正/追加あり」となっているのがわかりますか? KEYがない場合も同様の文字列が入ります。もし何も表示したくなければfalse値の部分を「"修正/追加あり"」から「""」にすると空白(スペースではなく完全になにもない状態)になります。

次に英文を検索値にした場合に表示される「#N/A」を表示したくない場合は

=iferror(vlookup(B2, '旧'!$B$1:$C$20, 2, false), "")

とiferrorを使用します。引数は2つ。ifとは違い少しわかりにくいですが、そのセルの結果がエラー(今回のような#N/A)にならなければ最初の引数を実行し、エラーになったら2つ目の引数を実行するというものです。
上記例だとエラーになった場合は空白になるということです(何か表示したい場合は最後の「””」を「”表示したい文字列”」とします)。

反映はアッという間に終わりますので、終了したら式は不要となります。
C列を選択し右クリックから「コピー」→再度右クリックをして「特殊貼り付け→値のみ」をするだけで式が削除され値のみがセルにはいります(ショートカットであれば、選択した後「Ctrl+C→Shift+Ctrl+V」でできます)。

この方法を使えば新しく追加された文章や変更された文章も簡単に旧データから取り込むことが可能です。特に文章の変更は目視では気づきにくい場合もあります。また前述のとおり、ゲーム内文章の間に追加された場合でも抽出できます。

最後に

今回は単一言語の場合で説明していますが、複数言語が1つのシートにある場合も同様です。基本となる言語(基本は英語)、日本語が含まれる列が範囲となります(KEYを含めるならほとんどの場合A列からとなるでしょう)。

3つほどの関数を覚えるだけでアップデートが来ても安心・簡単にゲーム内テキストを更新することが可能になりますので、ぜひともチャレンジしてほしいと思います。

またExcelでも可能だとは思いますがテストはしていませんのでご了承ください。

内容が気になりましたらぜひサポートをお願いします。そのサポートが継続の力になります。よろしくお願いします。