Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

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

【保存版】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キーをコピーします。

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

ステップ2:データテーブルを準備する

検出したいテキストのリストをExcelシートに入力します。

  • データ範囲を選択します。
  • 挿入タブ → テーブルを選択します。
  • 先頭行をテーブルの見出しとして使用するにチェックを入れます。
  • OKをクリックします。

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

続いて、テーブル名を変更します。

  • テーブルデザインタブ → テーブル名ボックスにLanguage_Listと入力します。

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

ステップ3:Power Queryで言語を検出する

  • テーブル内の任意のセルを選択します。
  • データタブ → テーブル/範囲からを選択します。

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

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

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

  • ホームタブ → 詳細エディターを選択します。
  • 以下のコードをコピーして貼り付けます。
  • 完了をクリックします。
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キーに置き換えてください。

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

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

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

VBAで言語を自動検出する方法

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

  • 開発タブ → Visual Basicを選択します。

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

  • 挿入メニュー → 標準モジュールを選択します。
  • 以下の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

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

  • コードを保存して、Excelシートに戻ります。
  • セルC2を選択し、以下のように作成したUDF関数を入力します。
    例:=Detect_Language(B2)

このカスタム関数は、セル内のテキストの言語を自動的に判別し、言語コードを返します。

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

おまけ:DETECTLANGUAGE関数を使う(Microsoft 365・Web版限定)

Microsoft 365版ExcelまたはExcel for the webを利用している場合は、組み込みのDETECTLANGUAGE関数を使うのが最も簡単です。この関数はセル内テキストの言語を自動的に識別し、2022年後半以降に展開された比較的新しい機能です。

  • 任意のセルを選択し、以下の数式を入力します。
    例:=DETECTLANGUAGE(A2)

この関数はWeb経由で結果を取得し、テキストの言語を自動的に検出します。

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

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

利用可能な環境:DETECTLANGUAGE関数は、以下の環境でのみ使用できます。

  • Excel for the web(Excel Online)
  • Microsoft 365(一部のデスクトップビルドのみ。すべてのユーザーには提供されていません)
  • Excel 2019、Excel 2016、およびそれ以前の永続ライセンス版では利用不可

まとめ

以上の方法を使えば、Excelのセル内テキストの言語を自動的に検出できます。Power Queryを活用すれば、多言語データ処理のワークフローを大幅に効率化でき、安定性・拡張性・直接データ変換の面で優れています。そのため、ほとんどのユーザーにはPower Queryがおすすめです。一方、VBAは軽量でローカル環境での手軽な利用に最適なので、用途に応じて使い分けるとよいでしょう。


無料の高度なExcel演習問題と解答はこちらから!
  1. LinuxでPDFファイルを結合する方法 – pdftkコマンドの使い方を解説

    複数のPDFドキュメントを1つのファイルにまとめたい——これは多くのユーザーにとってごく一般的なニーズです。では、Linux上でそれを実現するにはどうすればよいのでしょうか?この記事では、そのために必要なツールと、タスクを完了するための非常にシンプルなコマンドを紹介します。 主役は「pdftk」 pdftkは、単なるドキュメント結合ツールではありません。自らを「電子ホッチキス外し・パンチ・製本器・暗号解読リング・X線メガネ」と称するほど多機能なツールです。具体的には、PDFドキュメントの結合や分割、ファイルの暗号化・復号化、PDFフォームへの入力、背景ウォーターマーク(透かし)の追加、PDFメ

  2. Officeの更新が「更新中です。しばらくお待ちください」で止まる時の対処法

    Microsoft Officeは、デフォルトで自動更新されるように設定されています。しかし、「Officeを更新しています。しばらくお待ちください」というメッセージが表示されたまま消えない、あるいはOfficeが自動更新されないといったトラブルに遭遇することがあります。この記事では、その問題を解決するための具体的な方法を詳しく解説します。 この問題は、更新機能が手動で無効化されていたり、グループポリシーによって管理されていたりする場合に発生します。また、更新関連のファイルが破損していることが原因の場合もあります。状況によっては、Officeアプリケーションエラー0xc0000142が続いて発