表計算ソフトのエクセルでできる文字列操作
下のスナップショットにあげた例では、[Sheet1] がチェック対象です。
[Sheet1] も、複数あるシート [REF1][REF2][REF3] … もフォーマットは同じ。
[B列] に日本語、[C列] に英語という組み合わせが行ごとにリスト化されたものです。
[Sheet1] の[B列] + [C列] の組み合わせが、複数シート [REF1][REF2][REF3] … のどこかに存在するかしないかを確認したい
それが目的です。
MEMO:
この確認は、翻訳業界で言う、既存翻訳との統一性の確認です。
[Sheet1] がチェック対象となる新規の翻訳。複数あるシート [REF1][REF2][REF3] … が既存翻訳という関係です。
普通ならば翻訳メモリーツールを使いたいことですが、それが使えないとしたら…

マクロによる自動検索とその結果を同じシート上に出力してやろうと言うわけです。
- [Sheet1] の [B列] を順番に読み取り、
- 複数シート [REF1][REF2][REF3] …の [B列] にある日本語と比較
- 同じものがあれば見つかった [REF1][REF2][REF3] …のシート名と対訳 [C列] の内容を[Sheet1] の[D列] + [E列] へ出力
- さらに [C列] と [D列] の内容を比較して同じならOKの青、違っていたらNGの赤 に文字色を変更します
[Sheet1] の [B1]のテキストの検索・確認を [REF1][REF2][REF3] …の全シートに対して行い、
その検索工程を[B2], [B3], [B4], [B5]… と連続して行います。
Excel VBAのヒント
シートの行数を取得するには
シートの全行を上から下へ連続して読み取る - そのためには
Worksheets(“Sheet1”).Range(“A1”).Currentregion.Rows.Count
が定型文。
この関数がシートの値が入っている行の数を返してくれますから、その数値を受けるための変数を用意しておきます。
MEMO:
このとき注意が必要なのは、Currentregion.Rows.Count で得られる行数は、データが連続している行の最終行だということ。
つまり、全体が100行だとしても、90行目が空行だったとすると…
行数は 89 とカウントされるのです。
Dim cnt as Long
cnt という変数をLong型で用意しておいて、行数を
cnt = Worksheets(“Sheet1”).Range(“A1”).Currentregion.Rows.Count
[Sheet1] の [B列] の全行を上から下へ連続して読み取るには、行を1行ずつたどっていく行のカウンターになる変数をもう1つ用意します。
Dim cnt as Long
Dim i as Long ‘行をたどるカウンター
With Worksheets(“Sheet1”) ‘With で挟まれた内容はすべてワークシートに関するもの
cnt = .Range(“A1”).Currentregion.Rows.Count ‘行数を確認して
for i = 1 to cnt ‘1行目から最終行まで
If .Range(“A” & i).Text …… then ‘所定の処理を行います
ここに必要な処理内容をコーディングします
end If
next i ‘for … next
end With
チェック対象の [Sheet1] も、検索対象の複数シート [REF1][REF2][REF3] … も、どちらもこの行数確認が今回の作業のはじまりで必要です。
そして、エクセルで翻訳(+翻訳チェック)の超基本のはじまりです。