
Google Cloud Translation APIで Excel を丸ごと翻訳してみた
こんにちは、けーまです。
Excel で作った集計表や一覧を、レイアウトと数式を保ったまま別の言語に翻訳したい場面があります。
製品比較表や実績データを、見た目と計算を崩さずに英語化したい、といった要件です。
ただ、セルのテキストだけを抜いて翻訳すると、数式が消えたり、シートの構成が崩れたりします。
さらに、製品名やキャラクター名のような独自の固有名詞は、毎回決まった訳に揃えたいことも多いです。
以前、Google Cloud の Cloud Translation API が持つ Document Translation 機能で PDF を翻訳する記事を書きました。
この機能は PDF だけでなく、Word・Excel・PowerPoint にも対応しています。
そこで本記事では、同じ機能を使って Excel(XLSX)をファイルのまま翻訳し、数式やグラフ、シートのタブ名がどう扱われるのか、用語集で独自用語を固定できるのかを、実際に動かして確かめました。
本記事は、ドキュメント翻訳を形式別に検証するシリーズの Excel 編です。
仕様や挙動は Google Cloud の公式ドキュメントで確認し、該当箇所を引用しています。
そのうえで、公式の記載どおりになるかを実際に動かして検証しました。
シリーズ記事
| 形式 | 記事 |
|---|---|
| PDF 編 | Cloud Translation API で PDF をレイアウトを保ったまま翻訳する |
| Word 編 | Cloud Translation API で Word をレイアウトを保ったまま翻訳する |
| Excel 編(本記事) | - |
対象読者:Excel 文書の翻訳自動化を検討している方
1. 結論:公式ドキュメントの記載と実証結果
急いで結論だけ知りたい方向けに、Excel(XLSX)の翻訳について、Google Cloud 公式ドキュメントの記載と、実際に翻訳して確認した結果を先にまとめます。
詳しい手順や翻訳前後の画像は §3 以降にあります。
| 観点 | 公式ドキュメントの記載 | 実証結果(本記事で確認) |
|---|---|---|
| 本文・データ・シートタブ名 | フォーマットとレイアウトを保持して翻訳する | 翻訳され、シートタブ名も英語化された |
| クォータの単位 | XLSX・XLS はページでなく文字数クォータが適用される | 公式の記載どおり、ページ数ではなく文字数で扱われる |
| 数式 | (明記なし) | 完全に保持され、翻訳後も再計算された。数式内の文字列(IF の "高評価" など)は翻訳されず、翻訳直後はセルの表示だけ英語になるが、再計算すると日本語に戻る |
| グラフ | (明記なし。PDF では「グラフは崩れうる」と言及) | タイトル・軸・凡例は日本語のまま。Excel のグラフ機能で作ったグラフはデータ系列が失われることがあった |
| 画像 | (明記なし) | 画像内の文字はテキストデータではないため、翻訳されずそのまま残った |
| テキストボックス(図形) | (Word は「翻訳されない」と明記) | Word と同じく日本語のまま残った |
| 用語集(独自用語の固定) | 用語集で訳語を固定できる | 全シートで登録した訳に統一された |
数式が保持・再計算される点と、グラフが翻訳されない(さらにデータが失われることがある)点が、Excel ならではの結果です。
また、画像として貼り付けたものはテキストデータではないため翻訳の対象外です。
急ぎの方は、この表と §4 の画像で概要がつかめます。
2. Cloud Translation API のドキュメント翻訳とは
Cloud Translation API の Document Translation は、ファイルをそのまま渡すと書式やレイアウトを保ったまま翻訳して返す機能です。
DOCX や XLSX、PPTX、PDF に対応しています。
機能の概要や認証(API キーは使えず ADC かサービスアカウント)、用語集の作り方は、前回までの記事で扱いました。
引用元: DevelopersIO: Cloud Translation API で PDF をレイアウトを保ったまま翻訳する
Excel(XLSX)には、他の形式と違う点が1つあります。
PDF や DOCX はページという単位があり、ドキュメント翻訳のクォータはページを基準にしますが、XLSX と XLS はページの概念がないため、文字数のクォータだけが適用されます。
Note: For Document Translation, Cloud Translation also checks that the number characters don't exceed your character quotas. For XLSX and XLS files, only the character quotas apply (not the page quotas).
引用元: 公式ドキュメント: Quotas and limits | Google Cloud
3. 検証の準備
3.1 前提環境
前提環境は Word 編と同じです(macOS、Python 3.12 系の venv、google-cloud-translate 3.26.0、課金を有効化した個人プロジェクト)。
API の有効化、ADC 認証、venv へのライブラリ導入の手順も Word 編・PDF 編と共通です。
3.2 サンプル文書(オリジナルの架空アニメ)
検証用に、架空アニメ「星霊物語 ルミナ・クロニクル」の設定資料という体で、Excel ブックを Claude に作ってもらいました。
PDF 編・Word 編と同じ世界観で、固有名詞(造語)も揃えています。
実在の作品・人物・団体とは一切関係のない、完全オリジナルの内容です。
ブックは4つのシートで構成し、Excel ならではの検証要素を詰め込んでいます。
- シート1「星霊図鑑」:データ表、色つき文字、条件付き書式(カラースケール)、合計・平均・最高・順位(RANK)の数式
- シート2「人気ランキング」:割合の数式、棒グラフ(Excel ネイティブのグラフと、画像として貼ったグラフの2種類)
- シート3「話数一覧」:IF 関数で評価を出し分ける数式、平均視聴率の数式
- シート4「用語集」:造語の一覧、テキストボックス(図形)に入れた文章
今回翻訳した Excel は、全4シートの構成です。
翻訳前の全シートを載せておきます。

翻訳前のExcel シート1「星霊図鑑」:データ表、色つき文字、条件付き書式(カラースケール)、合計・平均・最高・順位(RANK)の数式

翻訳前のExcel シート2「人気ランキング」:割合の数式、Excel ネイティブの棒グラフと画像として貼った棒グラフ

翻訳前のExcel シート3「話数一覧」:IF 関数で評価を出し分ける数式、平均視聴率の数式

翻訳前のExcel シート4「用語集」:造語の一覧、黄色い枠のテキストボックス(図形)
4. Excel(XLSX)を翻訳してみる
翻訳に使うスクリプトは、Word 編と同じものです。拡張子から MIME タイプを判定するので、入力を XLSX にするだけで動きます。
translate_document_handson.py の全文(クリックすると展開します)
from __future__ import annotations
import argparse
import time
from pathlib import Path
from google.cloud import translate_v3 as translate
# 用語集・カスタムモデルは us-central1 に置く必要がある。
DEFAULT_LOCATION = "us-central1"
# 拡張子 → MIME タイプ(Document Translation 対応形式)
MIME_BY_SUFFIX = {
".pdf": "application/pdf",
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
}
def mime_for(path: str) -> str:
"""入力ファイルの拡張子から MIME タイプを返す。未対応拡張子は ValueError。"""
suffix = Path(path).suffix.lower()
if suffix not in MIME_BY_SUFFIX:
raise ValueError(f"未対応の拡張子: {suffix}(対応: {', '.join(MIME_BY_SUFFIX)})")
return MIME_BY_SUFFIX[suffix]
def parse_args() -> argparse.Namespace:
p = argparse.ArgumentParser(description="Cloud Translation API ドキュメント翻訳(同期)")
p.add_argument("--project", required=True, help="GCP プロジェクト ID")
p.add_argument("--input", required=True, help="入力ファイルパス")
p.add_argument("--output", required=True, help="出力ファイルパス(用語集なしの結果)")
p.add_argument("--source", default="ja", help="原文言語コード(既定: ja)")
p.add_argument("--target", default="en", help="訳文言語コード(既定: en)")
p.add_argument("--location", default=DEFAULT_LOCATION, help=f"ロケーション(既定: {DEFAULT_LOCATION})")
p.add_argument("--glossary-id", default=None, help="用語集 ID(指定時は用語集あり/なし両方を出力)")
return p.parse_args()
def build_request(args: argparse.Namespace, content: bytes) -> dict:
"""translate_document のリクエスト辞書を組み立てる。
用語集を指定する場合は原文言語の指定が必須(公式仕様)。
"""
parent = f"projects/{args.project}/locations/{args.location}"
mime_type = mime_for(args.input)
request: dict = {
"parent": parent,
"source_language_code": args.source,
"target_language_code": args.target,
"document_input_config": {"content": content, "mime_type": mime_type},
}
if args.glossary_id:
glossary_path = (
f"projects/{args.project}/locations/{args.location}"
f"/glossaries/{args.glossary_id}"
)
request["glossary_config"] = translate.TranslateTextGlossaryConfig(glossary=glossary_path)
return request
def write_bytes(path: str, data: bytes) -> None:
Path(path).parent.mkdir(parents=True, exist_ok=True)
Path(path).write_bytes(data)
def main() -> None:
args = parse_args()
content = Path(args.input).read_bytes()
print(f"入力: {args.input}({len(content):,} bytes, {args.source}→{args.target})")
client = translate.TranslationServiceClient()
request = build_request(args, content)
started = time.perf_counter()
response = client.translate_document(request=request)
elapsed = time.perf_counter() - started
base = response.document_translation
write_bytes(args.output, base.byte_stream_outputs[0])
print(f"処理時間: {elapsed:.2f} 秒")
print(f"出力(用語集なし): {args.output}({len(base.byte_stream_outputs[0]):,} bytes)")
# 用語集あり: 1回の呼び出しで glossary_document_translation に別出力が返る
if args.glossary_id and response.glossary_document_translation.byte_stream_outputs:
out = Path(args.output)
glossary_out = str(out.with_name(f"{out.stem}_glossary{out.suffix}"))
write_bytes(glossary_out, response.glossary_document_translation.byte_stream_outputs[0])
print(f"出力(用語集あり): {glossary_out}")
if __name__ == "__main__":
main()
まずは用語集なしで翻訳します。
python translate_document_handson.py \
--project <YOUR_PROJECT_ID> \
--input hoshirei_ja.xlsx \
--output hoshirei_en.xlsx
# 出力例
入力: hoshirei_ja.xlsx(105,812 bytes, ja→en)
処理時間: 1.09 秒
出力(用語集なし): hoshirei_en.xlsx(100,967 bytes)
翻訳後のシートを確認すると、見出し・データ・シートタイトルが英訳され、シートのタブ名まで翻訳されていました。
4.1 数式は保持されるが、数式内の文字列は翻訳されない
数式の挙動が、Excel でいちばん確かめたかった点です。
翻訳後のファイルを開いて数式を確認すると、合計(SUM)・平均(AVERAGE)・最高(MAX)・順位(RANK)・割合・IF など、すべて数式として保持され、翻訳後も正しく再計算されていました。
セルの値だけを置き換えるのではなく、数式の構造ごと保持されます。
シート1「星霊図鑑」の翻訳前後を比べます。
合計(6935)・平均(1387)・最高(2050)・順位(RANK)の数式結果がそのまま表示され、条件付き書式のカラースケールも維持されています。

シート1:左が翻訳前(日本語)、右が翻訳後。見出し・データは英訳され、合計・平均・最高・順位の数式が保持・再計算される。条件付き書式も維持される
シート3「話数一覧」も同様に、IF 関数による評価の出し分けと平均視聴率の数式が保持されました。

シート3:左が翻訳前、右が翻訳後。サブタイトルが英訳される。評価列(IF 関数)も翻訳後は Good / Highly rated と英語で表示されるが、これはキャッシュされた表示値で、数式自体は日本語のまま(後述)
一方で、数式の中に書いた文字列リテラルの扱いは、少し変わった挙動でした。
シート3の評価列には =IF(D3>=7.5,"高評価","好調") という数式を入れています。
翻訳後のファイルを開くと、評価列は「Good」「Highly rated」と英語で表示され、一見すると翻訳されているように見えます。
ところが、セルを選んで数式バーを見ると、数式そのものは =IF(D3>=7.5,"高評価","好調") のままで、"高評価" "好調" は翻訳されていません。

翻訳後:評価列のセルは「Good」と英語で表示されるが、数式バーを見ると数式は =IF(D3>=7.5,"高評価","好調") のままで、中の文字列は日本語
英語で表示されているのは、セルにキャッシュされていた表示値が翻訳されたためです。
実際にセルを再計算すると、数式が日本語の "高評価" "好調" を返すため、表示が日本語に戻りました。

再計算後:数式が返す "好調" "高評価" が表示され、評価列が日本語に戻る
つまり、翻訳が反映されるのはセルの表示値(キャッシュ)だけで、数式の中身は翻訳されません。
再計算すると数式どおりの日本語に戻るため、評価のような出し分けの文言を確実に翻訳したい場合は、数式に文字列を直書きせず、別表を参照する作りにするなどの工夫が必要になります。
4.2 グラフは翻訳されず、データが失われることもあった
シート2には、Excel のグラフ作成機能で作ったグラフ(セルのデータを参照するネイティブのグラフ)と、画像として貼り付けた棒グラフ(日本語入りの PNG)の2つを置いています。
ここではグラフ機能で作った方の挙動を確認します(画像の方は次の §4.3 で扱います)。

シート2:左が翻訳前(日本語)、右が翻訳後。表のデータは英訳される。右上の画像として貼ったグラフは画像なので翻訳されず日本語のまま残り、下の Excel のグラフ機能で作ったグラフは翻訳後にデータ系列が失われてバーが消えている
Excel のグラフ作成機能で作ったグラフ(下の大きいグラフ)は、翻訳後にデータ系列の値が失われ、バーが表示されなくなっていました。
実際の Excel で開いても同じで、グラフの枠やタイトルは残るものの、肝心のデータが空になっています。
グラフはセルのデータを参照していますが、翻訳でシートやセルの構造が変わった結果、その参照がうまく引き継がれなかったとみられます。
また、グラフのタイトル・軸ラベル・凡例・カテゴリ名は日本語のまま残りました。
4.3 画像は翻訳の対象外
シート2の右上に置いた画像として貼り付けた棒グラフ(日本語入りの PNG)は、翻訳されずそのまま残りました。
画像内の文字はテキストデータではないため、Document Translation では扱えません。
グラフに限らず、画像として貼り付けたものは翻訳の対象外です。
日本語が入った画像をブックに含める場合は、翻訳後に画像を差し替えるか、画像の外にテキストで説明を添えるなどの対応が必要になります。
4.4 テキストボックスは翻訳されない(Word と同じ)
シート4「用語集」には、黄色い枠のテキストボックス(図形)を1つ置いています。
本文(セル)は英訳されているのに、テキストボックスの中身は日本語のまま残りました。

シート4:左が翻訳前(日本語)、右が翻訳後。セルは英訳されるが、テキストボックス(黄色い枠)は日本語のまま残る
このテキストボックスが翻訳されない挙動は、Word 編と同じでした。
Word・Excel では図形やテキストボックスの中身は翻訳されない、という共通の傾向が見えてきました。
5. 用語集で独自用語を固定する
固有名詞や独自用語を、決まった訳に固定できるかを確かめます。
用語集を使うには、(1) 原文と訳語の対応を書いた TSV を用意し、(2) それを Cloud Storage に置いて、(3) 用語集リソースを作成します。
5.1 用語集の TSV を用意する
用語集は、原文(日本語)と訳語(英語)をタブ区切りで1行ずつ並べた TSV ファイルとして用意します。
ヘッダー行は不要で、左が原文の造語、右が固定したい訳語です。
今回は、サンプルに散りばめた造語20語を glossary_ja_en.tsv として用意しました。
星霊 Hoshirei
共鳴進化 Reso-Evolution
輝光石 Lumina Shard
雷狼ボルテ Voltefang
焔狐ココ Pyrofox Coco
水亀アクオ Aquortle
草鹿リーフィ Leafawn
輝竜ルミナ Lumidragon
月読の祠 Moonread Shrine
守護者 Warden
星導士 Starwright
星霊守護協会 Hoshirei Warden Guild
共鳴値 Reso-Value
共鳴の灯 Resonance Flame
絆ゲージ Bond Gauge
星霊酔い Hoshirei-sickness
星霊図鑑 Hoshirei Codex
ルミナ群島 Lumina Archipelago
七つの祠 Seven Shrines
共鳴結界 Reso-Barrier
5.2 TSV を Cloud Storage に置いて用語集リソースを作成する
用語集リソースは TSV を直接アップロードするのではなく、いったん Cloud Storage に置き、その GCS の URI を指定して作成します。
バケットは用語集と同じ us-central1 に作っておきます。
# バケットを作成(既にあれば不要)
gcloud storage buckets create gs://<YOUR_BUCKET> \
--project <YOUR_PROJECT_ID> --location us-central1
# TSV をアップロード
gcloud storage cp glossary_ja_en.tsv \
gs://<YOUR_BUCKET>/glossaries/glossary_ja_en.tsv
次に、アップロードした TSV から用語集リソースを作成します。
作成は長時間オペレーション(LRO)なので、クライアントライブラリから実行して完了を待ちます。
次のコードを setup_glossary.py として保存し、venv のまま実行します。
setup_glossary.py の全文(クリックすると展開します)
from google.cloud import translate_v3 as translate
PROJECT_ID = "<YOUR_PROJECT_ID>"
LOCATION = "us-central1" # 用語集は us-central1 のみ
GLOSSARY_ID = "hoshirei-ja-en"
INPUT_URI = "gs://<YOUR_BUCKET>/glossaries/glossary_ja_en.tsv"
client = translate.TranslationServiceClient()
name = client.glossary_path(PROJECT_ID, LOCATION, GLOSSARY_ID)
glossary = translate.Glossary(
name=name,
# 単方向(ja→en)の用語集
language_pair=translate.Glossary.LanguageCodePair(
source_language_code="ja", target_language_code="en"
),
input_config=translate.GlossaryInputConfig(
gcs_source=translate.GcsSource(input_uri=INPUT_URI)
),
)
parent = f"projects/{PROJECT_ID}/locations/{LOCATION}"
operation = client.create_glossary(parent=parent, glossary=glossary)
result = operation.result(180) # 完了を最大180秒待つ
print(f"作成完了: {result.name}(エントリ数: {result.entry_count})")
python setup_glossary.py
# 出力例
作成完了: projects/.../locations/us-central1/glossaries/hoshirei-ja-en(エントリ数: 20)
公式ドキュメントにも、カスタムリソースは us-central1 を使う必要があると明記されています。
Note: All of your resources in a single request to Cloud Translation - Advanced must have the same location. Currently, only global and us-central1 locations are supported. For all custom resources—AutoML models, glossaries, long-running-operations—you must use us-central1.
引用元: 公式ドキュメント: Migrate to Cloud Translation - Advanced (v3) | Google Cloud
5.3 用語集あり/なしを比べる
作成した用語集を指定して翻訳します。
--glossary-id に 5.2 で作成した用語集 ID を渡すと、1回の応答に「用語集なし」と「用語集あり」の両方の結果が返ります。
以降の翻訳結果で「星霊 が Hoshirei に、共鳴値 が Reso-Value になる」といった固定は、この登録内容に対応しています。
python translate_document_handson.py \
--project <YOUR_PROJECT_ID> \
--input hoshirei_ja.xlsx \
--output hoshirei_en.xlsx \
--glossary-id <YOUR_GLOSSARY_ID>
まず用語集なしの結果を見ると、固有名詞の訳がバラついていました(Claude調べ)。
原文に12回出てくる 星霊 を、用語集なしの英訳で数えると、主な訳語の内訳は次のとおりでした。
星霊 の訳(用語集なし) |
出現回数 |
|---|---|
| Star Spirit | 4 |
| star spirit | 3 |
| Celestial Spirit | 2 |
| star spirits | 1 |
| その他の表記 | 数件 |
同じ単語が、大文字小文字や単複も含めて何通りにも分かれています。
用語集ありに切り替えると、これがきれいに統一されました。
訳が実際に変わったのは、シート1のタイトルとシートタブ名です。

左が用語集なし(シートタイトルとタブ名が「Star Spirit Encyclopedia」、星霊 が Star Spirit / Celestial と揺れる)、右が用語集あり(「Hoshirei Codex」に固定され 星霊 が Hoshirei に統一される)
用語集ありでは、星霊 は Hoshirei、共鳴値 は Reso-Value、守護者 は Warden、共鳴進化 は Reso-Evolution と、登録したとおりの訳に固定されました。
用語集は、シートのタイトルからセルのデータ、シートタブ名まで、ブック全体に一貫して適用されました(テキストボックスは元から翻訳対象外です)。
用語集ありの出力を全文で調べたところ、Excel では登録した造語がすべて固定訳に揃っていました(Claude調べ)。
Word 編では 星霊 が1か所だけ取りこぼされましたが、今回の Excel のサンプルでは字義訳の残りは見つかりませんでした。
ただし、取りこぼしは前後の文脈によってまれに起こるため、用語集ありでも完全に100%とは限らない点には注意が必要です。
6. 料金
Excel(XLSX)の料金は、他の Office 形式と扱いが違います。
DOCX・PPTX・PDF のドキュメント翻訳はページ単位(標準の NMT で 0.08 ドル / ページ)ですが、XLSX はページの概念がありません。
§2 で引用したとおり XLSX は文字数で扱われ、料金も NMT の「テキスト翻訳」に含まれて文字数で課金されます。
文字数あたりの単価は次のとおりです。
| 用途(NMT のテキスト翻訳。XLSX ドキュメント翻訳を含む) | 単価 |
|---|---|
| 最初の 50 万文字 / 月 | 無料(毎月 10 ドル分のクレジットとして適用) |
| 50 万文字を超える分 | 100 万文字あたり 20 ドル |
公式の料金ページでも、XLSX のドキュメント翻訳がテキスト翻訳に含まれることが明記されています。
Text translations, which includes: Language detection, Text translation, Batch text translation, XLSX document translation, Romanize text
引用元: 料金ページ: Pricing | Google Cloud
今回のサンプル(4シートのブック)は数千文字程度で、月の無料枠(50 万文字)に十分収まる規模でした。
7. 帰属表示(Machine Translated by Google)について
PDF 編では、翻訳後の PDF の左上に「Machine Translated by Google」という帰属表示が入りました。
今回の Excel(XLSX)では、同じく帰属表示を指定していないにもかかわらず、翻訳後のファイルにこの表示は見当たりませんでした(Word・PowerPoint でも同様です)。
PDF と Office で同じ条件なのに表示の有無が違ったので、仕様を確認しました。
帰属表示の文言は、API のリクエストで customizedAttribution として指定でき、指定しない場合のデフォルトが「Machine Translated by Google」です。
このフィールドは PDF 専用ではなく、translateDocument(ドキュメント翻訳)全体に共通のものです。
customizedAttribution
stringOptional. This flag is to support user customized attribution. If not provided, the default is Machine Translated by Google. Customized attribution should follow rules in https://cloud.google.com/translate/attribution#attribution_and_logos
引用元: API リファレンス: Method: projects.locations.translateDocument | Google Cloud
ここで注意したいのは、customizedAttribution が説明しているのは「帰属表示の文言」だけで、その文言がどの形式の出力に、どう反映されるか(ファイルに焼き込まれるか)は公式ドキュメントに明記が見当たらなかった点です。
形式ごとに帰属表示の有無が変わる理由は、公式には確認できませんでした。
実際に動かした範囲では、帰属表示は PDF(PDF 編ではネイティブ PDF で確認)の出力に焼き込まれ、Office 形式(DOCX/XLSX/PPTX)の出力には入りませんでした。
PDF はレイアウトを保つために訳文をページ上に重ねて再構成する形式で、編集可能な Office 形式とは出力の作られ方が違うため、と推測されますが、公式の記載で裏づけられたものではありません。
もう1点、別の軸として押さえておきたいのが、ブランドガイドライン上の明示義務です。
これは「出力ファイルに焼き込まれるか」とは別で、翻訳結果を利用者に見せるときは、形式にかかわらず機械翻訳であることを明示するよう求めています。
Whenever you display translation results from Google Translate directly to users, you must make it clear to users that they are viewing automatic translations from Google Translate using the appropriate text or brand elements.
引用元: ブランドガイドライン: Attribution requirements | Google Cloud
つまり、Office 形式の出力に帰属表示が焼き込まれないこと自体は問題ありませんが、翻訳結果を公開・配布する場面では、形式にかかわらず機械翻訳であることを明示する責任が利用者側にあります。
8. まとめ
Cloud Translation API の Document Translation は、Excel(XLSX)をファイルのまま渡すだけで、シートのタイトルやデータ、シートタブ名を翻訳してくれました。
用語集を使えば固有名詞の訳もブック全体で固定できます。
一方で、数式の中に直接書いた文字列は翻訳されず、グラフのタイトルや凡例も翻訳されません。
Excel ネイティブのグラフはデータが失われることもありました。
テキストボックスの中身も Word と同じく翻訳されません。
数式の文字列・グラフ・テキストボックスを使ったブックでは、翻訳後の確認と作り直しを前提にしておくのがよさそうです。
テキストボックスが翻訳されない点は Word 編と共通でした。
今後、PowerPoint 編についてもブログを書きますので、あわせてご覧ください。
本記事が、Excel 文書の翻訳自動化を考えている方の参考になればうれしいです。






