ecoslymeです。
Web上にある表テーブルの情報を取ってきて、エクセルにコピペしてから何らかの作業を行ったことのある人は多いのではないでしょうか?
Webから情報を取ってくるのが一度だけならよいですが、毎日その作業をしていると結構面倒ですよね。
Web上にある表からデータを取得してくる方法は「Webスクレイピング」と呼ばれていますが、マクロを使いこなせないとそのやり方が分かりません。
また、後輩に仕事を引き継ぐときにハードルが高くなってしまう可能性があります。
そこでこの記事では、エクセルのPower Query(パワークエリ)という機能を利用して、Webから表を取得してくる方法をご紹介します。
めちゃくちゃ便利な機能なので、是非覚えて下さい。
また、マクロでWebスクレイピングを行う方法もご紹介しています。
※記事の最後の方でエクセルマクロのダウンロードができます
元データと結果
(Web上の為替相場表)
⇓
(パワークエリ実行後のエクセル)
Power Query(パワークエリ)でWebスクレイピングが出来る環境
まずは、このPower Query(パワークエリ)でWebスクレイピングが出来る環境についてご紹介します。
以下の環境以外の方は、利用できない可能性があります。
- パワークエリでWebスクレイピングが利用できる環境
・Windows(Macではできない)
・Office 365、Excel 2019、Excel 2016、Excel 2010以上(アドイン必要)
※利用環境については別の記事でまとめる予定です
Macではパワークエリは利用出来ましたが、Webスクレイピングが利用できませんでした。
Office 365は利用可能なことを確認しましたが、他は未確認です。
Web上のデータ(表)をエクセルに取得してくる方法
それでは、Web上のデータ(表)をエクセルに取得してくる方法についてご説明します。
例として、伊予銀行の外国為替相場の推移表を利用してみます。
Webからデータ取得
エクセルで、以下の要領で「Webから」を選択して下さい。
・データ ⇒ データの取得 ⇒ その他のデータソースから ⇒ Webから
URL入力
URLの欄に、Web上の欲しいデータ(表)があるURLを入力します。
その後、OKをクリックします。
ナビゲーターからデータの変換
ナビゲータの画面に行きますので、欲しいデータをクリックしながら見ていきましょう。
例の場合、「Table 0」が欲しいデータ(表)になっていました。
データ選択後、データの変換をクリックします。
データ修正後、データを閉じて読み込む
データを修正できるエディターが表示されます。
このエディターでデータの修正が出来ます。
イメージとしては、ACCESSでの処理と似たようなものです。
データを扱うスキルの差が生じてくる部分かと想定しています。
今回は「閉じて読み込む」をいきなりクリックして、編集を終了します。
名前の修正
クエリで名前の修正を行いたい場合は、該当する項目名をダブルクリックして名前を編集しましょう。
Web上で、以下のように改行して表示されている名前(イギリスポンド、スイスフラン)は、名前の部分が少しおかしく表示されてしまいます。
名前から無駄なスペースを削除しておきましょう。
⇒(項目名から無駄なスペースを削除)
Webスクレイピングしてきたデータのエクセルへの表示
Webスクレイピングしてきたデータが、エクセルに表示されました。
クエリの編集を行いたい場合
クエリの編集を行いたい場合、下図のように画面右側に表示される「クエリと接続」の該当するクエリをダブルクリックすれば、エディター画面が再度表示されます。
表示形式の微修正
表示形式の微修正はわざわざクエリの方で行わずとも、エクセルの方で微修正行うことが出来ます。
今回の例の場合、A列の「月」の部分の表示がおかしいので、A列を選択後に「Ctrl + 1」と押して表示形式の修正を行います。
ユーザー定義で「mm”月”」と入力しておけば良いでしょう。
表示形式について詳しく知りたい方は、以下の記事をご覧ください。
ecoslymeです。日々の業務の中で、スケジュール表を毎月更新もしくは毎年更新することってありませんか?昨年度のエクセル(Excel)のスケジュール表を使い回したはいいけれども、年度が違えば曜日が変わっていて、その曜日を修[…]
クエリを更新する方法
パワークエリは更新しなければ最新のデータにはなりません。
自動更新する方法(エクセルを開くとデータが勝手に自動で更新されている方法)は別の記事でご紹介させて頂く予定です。
今回はパワークエリを手動で更新する方法をご紹介します。
パワークエリのデータを更新する方法は至って単純です。
これでデータが更新されます。
Webスクレイピングをマクロで行う方法
上の説明では、パワークエリでWebスクレイピングを行いましたが、今度はエクセルのマクロでWebスクレイピングを行う方法をご紹介します。
上でご紹介した例と同じ例でWebスクレイピングのマクロを実施しましたが、データが少しおかしくなってしまいました。
Webスクレイピングは、マクロよりもパワークエリで行った方が安定性が高いのかと思います。
A列の「03月」のセルはWeb上では一つしか書かれていないので、おかしなデータの読み取り方をしてしまったのでしょう。
例えば3~11行目は「03月」が表示されていないので、1列分左へズレてしまっています。
(参考:Web上のデータ)
今回の例ではうまくできませんでしたが、他のWeb上のデータだとうまくいく可能性もありますので、マクロは何も修正せずにしています。
Webスクレイピング マクロのコード
参考に、Webスクレイピング マクロのコードを載せておきます。
- Webスクレイピング マクロのコード
Sub WebScraping()
Application.ScreenUpdating = False
‘Web(IE)の起動
Dim objIE As Object
Set objIE = GetObject(“”, “InternetExplorer.Application”)
objIE.Visible = True
objIE.navigate “https://www.iyobank.co.jp/kinri-gaikokukawasesoba-market/gaikokukawasesoba/nakane-rireki.html” ‘ URLを指定する
‘ ページの表示完了待ち。
While objIE.readyState <> 4 Or objIE.Busy = True
DoEvents
Wend
On Error Resume Next ‘エラーを回避する
i = 1 ‘開始行を指定
K = 0
J = objIE.document.all.Length ‘要素の数を知る
Cells(i, 1).Value = “No”
Dim A As Object
For Each A In objIE.document.getElementsByTagName(“tr”)
For K = 0 To 60
Cells(i, K + 1) = A.Children(K).innerText
Next
i = i + 1
Next
On Error GoTo 0
Cells.WrapText = False
Application.ScreenUpdating = True
Application.StatusBar = False
objIE.Quit
End Sub
Webスクレイピング マクロのダウンロード
Webスクレイピング マクロのダウンロードをしたい方は、以下のリンクをクリックしてください。
エクセルでダウンロードが可能です。
<マクロ>
最後に
いかがでしたでしょうか。
もしかしたら、エクセルではエクセル間もしくはそのエクセル内にあるデータからしかデータの編集ができない、と思っていた人も多いのではないでしょうか。
Webからデータを取得できるという機能は非常に便利で、今後無視できない存在になってくると思います。
RPA(WinActorなど)を利用している人にとっては、相性が良ければWebからのデータ取得が安定し、更にロボット稼働時間も短縮するかもしれません。
固定観念にとらわれずに、幅広い視点を持って業務の効率化に挑戦してみましょう。