Power Query で Microsoft 日本語公式サイトから列挙体を取得する

 Microsoft の公式サイト,英語なら取得は容易であるが,当然日本語は取得できない.今回は日本語サイトから英語と日本語の両者を取得しようと試みた.

 結論から言うと,この記事で述べた方法で全ての日本語と英語とが分離できたわけではない.2 バイト文字と 1 バイト文字との分離という手法を用いたが,最終的には手動での対応が必要だった.

Power Query のユーザーインターフェース

『データの取得と変換』の『Web から』

 『データの取得と変換』の『Web から』をクリックする.

『データの取得と変換』『Web から』
『データの取得と変換』『Web から』

URLを貼り付け

 URL を貼り付ける.

URLを貼り付け
URLを貼り付け

『ナビゲーター』ではテーブルを選択

 ナビゲーターに遷移するので,フォルダーの階層下にあるうち,テーブルらしきアイコンを選択する.

ナビゲーターでテーブルを選択
ナビゲーターでテーブルを選択

『データの変換』

 『データの変換』をクリックする前に,よくプレビューを観察しよう.列は 3 列あり,列名はそれぞれ [名前Name], [値Value], [説明Description] である.このうち,[名前Name] と[値Value] とは同じ文字列が 2 回繰り返されている.

 ここまで分かれば,前二者は文字列長を数えて半分の長さの文字列を切り出せば良いな,と見当がつく.

 3 列目の [説明Description] が少々手こずる.前半が日本語,後半が英語である.間に半角スペースでもあれば簡単なのだが,そういう訳にも行かない.文字コードにまで踏み込む必要がありそうだ.

データの変換
データの変換

型の自動変換を削除して1ステップ戻る

 Power Query の補完機能の一つ,型の自動変換は数字を扱う際に邪魔になることがある.今回のように最初は文字列として扱いたいので,『適用したステップ』で最後の『編集された型』を削除して文字列に戻す.

『クエリの設定』『適用したステップ』で『変更された型』を削除
『クエリの設定』『適用したステップ』で『変更された型』を削除

テキスト関数を使ってカスタム列に抽出

ワークシート関数の LEFT 関数に該当するのは Text.Middle 関数

 EXCEL のテーブルなら LEFT 関数を使うが,M 言語の場合は Text.Middle 関数になる.文字列長をカウントするには Text.Length 関数である.こちらのサイトがわかりやすい.

まずカスタム列を追加

 『列の追加』タブから『全般』の『カスタム列』をクリックする.

カスタム列の追加
カスタム列の追加

Text とタイプして関数の候補をポップアップさせる

 『新しい列名』には Name とタイプし,『カスタム列の式』に  Text とタイプすると,インテリセンスが働いて自動的に候補の関数がポップアップする.ここをスクロールして Text.Middle を選択する.

関数の記述
関数の記述

関数のネスト

 さらに ( とタイプして引数のカッコを開き, Text とタイプして Text.Length 関数を選択する.

関数は入れ子にできる
関数は入れ子にできる

 そして ( とタイプして引数のカッコを開き, [ とタイプすると今度は『使用できる列』がポップアップするので,[名前Name] を選択する.

候補を選択
候補を選択

Text.Length 関数の結果を 2 で割る

 重複削除のために文字列長を半分にしている.この後,図示してはいないが,Text.Middle 関数の引数に [名前Name], 0 を与えて式を完成している.

重複を削除するため文字列長を半分にしている
重複を削除するため文字列長を半分にしている

日本語と英語を分離するには文字コードに踏み込む

『列の分割』の最後4項目がヒント

 『説明Description』列を選択した状態で『列の分割』を押下すると下図のような選択肢が出現する.『数字以外から数字による分割』を選択する.

『数字以外から数字による分割』
『数字以外から数字による分割』

 上記処理の数式を数式バーで編集する.初期状態では下記コードのような状態である.

 1 バイト文字は下記コードで指定している.FromNumber 関数のカッコ内の引数は文字コードであり,ISO/IEC 8859 (Wikipedia)に詳しい.

 文字コードの歴史については,それだけで数記事が書けるくらいである.1 バイトは 7 ビットなのになぜ 255 まであるのかとか,今の筆者には答えられない.

 この方法は Twitter のフォロワーの方に教えていただいた.

結果

『クエリと接続』閉じて読み込んだ結果
『クエリと接続』閉じて読み込んだ結果

 エラーが 1 件見える.これは rgbBlack の値が .00 であることが原因であり,手動で直すほかない.もう一つ,下図のように LightGoldenrodYellow には日本語が存在しないため,英語のみ重複して記載されている.

1件だけ分割できていない行がある
1件だけ分割できていない行がある

 実際に取得された結果を示す.重複が数件あるようだが,特に訂正はしていない.Value の数値は RGB() 関数で分解できる気がする.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください