自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/ExcelVBA/JavaScript/Raspberry Piなどで色んなことを自動化

【ExcelVBAでスクレイピング入門】Googleで検索順位を自動取得してみる① ~IEを開く、待つ、閉じるまで~

スクレイピングとは?

ウェブスクレイピング。ウェブサイトのHTMLから欲しい情報を指定して取得すること。

簡単に言うと手作業でウェブサイトからExcelにデータをコピペコピペコピペ・・・という地獄の作業を自動化してしまおうというものです。最近流行りの業務の自動化という考え方 RPA(Robotic Process Automation)にも通ずる というかRPAツール使わなくてもVBAでRPAできるってこと。

そもそもプログラム勉強するの嫌だけど仕事は自動化したいという人のために作られたのがRPAツールなので、プログラム勉強するモチベーションがある人は、是非とも仕事を自動化するプログラムを作ることに全力を注いでほしいです。(ただし、自分以外の仕事を自動化するという場合はメンテナンスが問題になるのでそこはご注意ください

 

さて、本連載ではmarumoの得意分野をさらに磨くべく、ExcelVBAでここまでできるんだぞと布教するべく、検索順位チェックツールのようなものを作っていきます。今回はデータ取得が主ですが、リンクをクリックするメソッドなどもあるのでWEBベースのシステムを使った業務であれば応用次第で割と簡単に業務自動化を実現できるかもしれませんね。

API使えや・・・という意見もあるかと思いますが、やっぱりブラウザ経由のスクレイピングは汎用性が高くて便利。あとJSONのパースとかしなくていい。APIキー取得しなくていい。APIで提供されていない項目も取得できる。 などの理由もあり今回はわかりやすい題材として検索順位を取得対象にしています。

APIでのデータ取得もそのうちやりたいな。楽天市場の検索APIとかね。

  • スクレイピングとは?
    • この連載記事でできるようになること
    • もしかしたら、おまけでやるかもしれないやーつ
  • 設計~Google検索するまで
    • やりたいことと処理の流れをイメージ
      • 処理フロー概要
    • VBAで書いていくよ
      • VBE(VBAを書くやつ)を起動してModule1を作成
      • ブックをxlsm形式で保存
      • 前準備(参照設定)
      • Internet ExplorerでGoogleを開く
      • Internet Explorerを閉じる
      • 「待つ」処理を追加する
        • sleepメソッドで3秒待つ
        • Waitメソッドで3秒待つ
    • まとめ
この連載記事でできるようになること
  • 指定したキーワードでGoogleの検索順位を一括取得
  • 次のページへのリンクをクリックしてページ移動しながら取得
  • スクレイピングに便利なCSSセレクタを知る
  • Seleniumの使いどころを知る

 

もしかしたら、おまけでやるかもしれないやーつ
  • 指定文字列を含むリンクタグを取得するFunction
  • JavaScriptを実行させる方法
  • 要素取得のリトライ処理(Seleniumみたいな使い勝手にしたい)

 

設計~Google検索するまで

第一回目では「Googleで検索する」ところまでをやっていきたいと思います。

一気に記事書くと説明が雑になりそう、後半力尽きて雑になりそう、飽きてきて雑になりそうなどの理由です。楽しくなってくるのは第二回目でシートに情報を書き込んで行くところからかなーと思います。

 

続きを読む

【落書き】勢いでExcelVBA使って神龍Webテストを再現してみた

qiita.com

神龍何回名乗るんだよww と思いながらも面白そうだったのでチャレンジ。

VBAのClassモジュールは初めて使ったけど作り込んだら便利そう。

mainモジュール

Sub callDragon()

    Dim 我が名は神龍 As New ieDoragon
        我が名は神龍.URLにアクセスしてやろう "https://kids.yahoo.co.jp/"
        我が名は神龍.フィールドに入力してやろう "調べたいことばをいれてみよう!", "ねこ"
        我が名は神龍.クリックしてやろう "さがす", "button"
        我が名は神龍.テキストがあるか確認してやろう "ネコ - Wikipedia"
        我が名は神龍.入力フィールドに文字を追加してやろう "調べたいことばを入れてみよう!", " 買い方"
        我が名は神龍.クリックしてやろう "さがす", "button"
        我が名は神龍.テキストがあるか確認してやろう "さがしているのは"
        我が名は神龍.クリックしてやろう "猫の飼い方", "a"
        我が名は神龍.入力フィールドに文字が入っているか確認してやろう "調べたいことばを入れてみよう!", "猫の飼い方"
        我が名は神龍.フィールドに入力してやろう "調べたいことばを入れてみよう!", "不倫"
        我が名は神龍.クリックしてやろう "さがす", "button"
        我が名は神龍.テキストがあるか確認してやろう "このページは表示できません。"
        我が名は神龍.スクリーンショットを撮ってやろう ThisWorkbook.Path
        
End Sub
続きを読む

MOS Excel 2016 Expert に合格しました

  この教材を会社に買ってもらってひたすら模試。 これで多少は転職に有利になるかなぁ。

Microsoft Office Specialist Microsoft Excel 2016 Expert 対策テキスト&問題集 (よくわかるマスター)

Microsoft Office Specialist Microsoft Excel 2016 Expert 対策テキスト&問題集 (よくわかるマスター)

  • 作者: 富士通エフ・オー・エム株式会社(FOM出版)
  • 出版社/メーカー: FOM出版 富士通エフ・オー・エム
  • 発売日: 2017/10/20
  • メディア: 大型本
  • この商品を含むブログを見る

まぁエキスパートとは言ってもVBAなんてまったく出てこない内容だったし 実際会社にインパクト与えるほど劇的な生産性向上をもたらすにはVBAでの業務自動化が必須。

これからも精進します。

ExcelVBAでセルの文字列の折り返しを解除する方法.WrapText = False

この記事でできるようになること

  • セル内改行を含むエクセルのシートをVBAで折り返し解除する

セル内改行があると勝手にセルの文字列が折り返される

f:id:maru0014:20171128034043p:plain

VBAで商品ページデータなどを処理することが最近多いんですが、このようなHTMLを含むセルはCSVを読み込んだ段階で画像のように文字の折り返しが勝手に有効化されてしまいます。

これを読み込んだ直後にシート全体の文字の折り返しを解除するマクロがこれ

.WrapText = False

Sub Macro1
  Cells.WrapText = False
End Sub

これを実行すると以下のように文字列の折り返しが解除されます。

f:id:maru0014:20171128040957p:plain

ちなみに折り返し解除するだけでは手動でセルを編集すると、再度折り返しが有効化されて行の高さが変わってしまいます。

行の高さを固定するには直接シート全体の行の高さを指定します。

Sub Macro2
  Rows.RowHeight = 18
End Sub

たったこれだけのことですが、毎回手で高さ指定するのが面倒ならVBAでやってしまえば便利ですね。