【保存版】Power QueryとVBAでExcelセルの言語を自動検出する完全ガイド

Excelで多言語データを管理する際、言語の自動検出は非常に便利な機能です。多言語データセットの整理、顧客フィードバックの分析、コンテンツのカテゴリー分類など、さまざまな業務シーンで活躍します。
このチュートリアルでは、Power QueryまたはVBAを使用して、Excelのセル内テキストの言語を自動的に検出する方法を、手順を追ってわかりやすく解説します。
Power Queryで言語を自動検出する方法
Power Queryは、Excelに標準搭載されている強力なデータ処理ツールです。データのインポート・クレンジング・変換だけでなく、外部APIの呼び出しも可能です。ここでは無料で使えるDetectLanguage APIを例に説明しますが、LibreTranslate APIなどの他のAPIや有料サービスにも同じ手法を応用できます。
ステップ1:無料のAPIキーを取得する
- DetectLanguage.comにアクセスします。
- 無料でサインアップし、ダッシュボードからAPIキーをコピーします。

ステップ2:データテーブルを準備する
検出したいテキストのリストをExcelシートに入力します。
- データ範囲を選択します。
- 挿入タブ → テーブルを選択します。
- 先頭行をテーブルの見出しとして使用するにチェックを入れます。
- OKをクリックします。

続いて、テーブル名を変更します。
- テーブルデザインタブ → テーブル名ボックスにLanguage_Listと入力します。

ステップ3:Power Queryで言語を検出する
- テーブル内の任意のセルを選択します。
- データタブ → テーブル/範囲からを選択します。

- ホームタブ → 新しいソース → その他のソース → 空のクエリを選択します。
- クエリ名をAuto Detect Languageに変更します。

- ホームタブ → 詳細エディターを選択します。
- 以下のコードをコピーして貼り付けます。
- 完了をクリックします。
let
APIKey = "YOUR_API_KEY", // ← ここを自分のAPIキーに置き換える
Source = Excel.CurrentWorkbook(){[Name="Language_List"]}[Content],
AddJson = Table.AddColumn(Source, "JsonBody", each
Text.ToBinary("q=" & Uri.EscapeDataString([Text]))
),
AddResponse = Table.AddColumn(AddJson, "Response", each
Json.Document(
Web.Contents("https://ws.detectlanguage.com/0.2/detect", [
Headers = [
#"Authorization" = "Bearer " & APIKey,
#"Content-Type" = "application/x-www-form-urlencoded"
],
Content = [JsonBody]
])
)
),
ExtractLang = Table.AddColumn(AddResponse, "Language", each try [Response][data][detections]{0}[language] otherwise "error"),
Final = Table.SelectColumns(ExtractLang, {"ID", "Text", "Language"})
in
Final
- コード内の「YOUR_API_KEY」を、実際に取得したAPIキーに置き換えてください。

- 閉じて読み込むをクリックします。すると、検出された言語コード(en=英語、fr=フランス語など)が表示されるLanguage列が追加されます。

VBAで言語を自動検出する方法
VBAを使っても言語の自動検出が可能です。VBAでは、無料・有料を問わずさまざまなAPIを呼び出せるほか、独自のユーザー定義関数(UDF)を作成して言語を判定することもできます。
- 開発タブ → Visual Basicを選択します。

- 挿入メニュー → 標準モジュールを選択します。
- 以下のVBAコードをコピーして貼り付けます。
VBAコード:
Function Detect_Language(text As String) As String
On Error GoTo handleErr
Dim http As Object
Dim url As String
Dim response As String
Dim apiKey As String
apiKey = "YOUR_API_KEY" ' ← 自分のAPIキーに置き換えてください!
url = "https://ws.detectlanguage.com/0.2/detect?q=" & URLEncode(text)
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "GET", url, False
.setRequestHeader "Authorization", "Bearer " & apiKey
.send
response = .responseText
End With
' JSONレスポンスから "language" コードを抽出
Dim startPos As Integer
Dim endPos As Integer
startPos = InStr(response, """language"":""") + Len("""language"":""")
If startPos > Len("""language"":""") Then
endPos = InStr(startPos, response, """")
Detect_Language = Mid(response, startPos, endPos - startPos)
Else
Detect_Language = "unknown"
End If
Exit Function
handleErr:
Detect_Language = "ERROR: " & Err.Description
End Function
' URLエンコード用ヘルパー関数(基本的なUnicodeに対応)
Function URLEncode(str As String) As String
Dim i As Long
Dim ch As String
Dim encoded As String
For i = 1 To Len(str)
ch = Mid(str, i, 1)
Select Case AscW(ch)
Case 48 To 57, 65 To 90, 97 To 122 ' 0-9, A-Z, a-z
encoded = encoded & ch
Case Else
encoded = encoded & "%" & Hex(AscW(ch))
End Select
Next i
URLEncode = encoded
End Function

- コードを保存して、Excelシートに戻ります。
- セルC2を選択し、以下のように作成したUDF関数を入力します。
例:=Detect_Language(B2)
このカスタム関数は、セル内のテキストの言語を自動的に判別し、言語コードを返します。

おまけ:DETECTLANGUAGE関数を使う(Microsoft 365・Web版限定)
Microsoft 365版ExcelまたはExcel for the webを利用している場合は、組み込みのDETECTLANGUAGE関数を使うのが最も簡単です。この関数はセル内テキストの言語を自動的に識別し、2022年後半以降に展開された比較的新しい機能です。
- 任意のセルを選択し、以下の数式を入力します。
例:=DETECTLANGUAGE(A2)
この関数はWeb経由で結果を取得し、テキストの言語を自動的に検出します。


利用可能な環境:DETECTLANGUAGE関数は、以下の環境でのみ使用できます。
- Excel for the web(Excel Online)
- Microsoft 365(一部のデスクトップビルドのみ。すべてのユーザーには提供されていません)
- Excel 2019、Excel 2016、およびそれ以前の永続ライセンス版では利用不可
まとめ
以上の方法を使えば、Excelのセル内テキストの言語を自動的に検出できます。Power Queryを活用すれば、多言語データ処理のワークフローを大幅に効率化でき、安定性・拡張性・直接データ変換の面で優れています。そのため、ほとんどのユーザーにはPower Queryがおすすめです。一方、VBAは軽量でローカル環境での手軽な利用に最適なので、用途に応じて使い分けるとよいでしょう。
無料の高度なExcel演習問題と解答はこちらから!
-
LinuxでPDFファイルを結合する方法 – pdftkコマンドの使い方を解説
複数のPDFドキュメントを1つのファイルにまとめたい——これは多くのユーザーにとってごく一般的なニーズです。では、Linux上でそれを実現するにはどうすればよいのでしょうか?この記事では、そのために必要なツールと、タスクを完了するための非常にシンプルなコマンドを紹介します。 主役は「pdftk」 pdftkは、単なるドキュメント結合ツールではありません。自らを「電子ホッチキス外し・パンチ・製本器・暗号解読リング・X線メガネ」と称するほど多機能なツールです。具体的には、PDFドキュメントの結合や分割、ファイルの暗号化・復号化、PDFフォームへの入力、背景ウォーターマーク(透かし)の追加、PDFメ
-
Officeの更新が「更新中です。しばらくお待ちください」で止まる時の対処法
Microsoft Officeは、デフォルトで自動更新されるように設定されています。しかし、「Officeを更新しています。しばらくお待ちください」というメッセージが表示されたまま消えない、あるいはOfficeが自動更新されないといったトラブルに遭遇することがあります。この記事では、その問題を解決するための具体的な方法を詳しく解説します。 この問題は、更新機能が手動で無効化されていたり、グループポリシーによって管理されていたりする場合に発生します。また、更新関連のファイルが破損していることが原因の場合もあります。状況によっては、Officeアプリケーションエラー0xc0000142が続いて発