おじさんのITテクニック

プログラム挫折常連者がプログラムを完成させるまで

自動化の実装

実装はコピペだけでいけることもある

Outlookから社内スケジュールに予定を転記する工程を細分化し、工程をキーワードにWEB検索すると以下のことがわかりました。

  • VBAOutlookからスケジュールを一括抽出し、エクセル一覧にすることができる
  • Selenium BasicというVBAのライブラリを使用すればエクセルとWEB連携ができる

一括抽出した情報は玉石混淆ですので、一度人間の目で精査する工程を追加することにしました。
従って、開発工程は下記のような流れとなります。

  1. VBAOutlookからスケジュールを一括抽出し、エクセル一覧にする
  2. エクセル一覧を精査する
  3. VBAでエクセル一覧の内容を社内スケジュールに反映する

工程1はOutlookというパブリックなツールから、取得した情報をこれもパブリックなツールであるエクセルに貼り付けるプログラムですから、何も考慮しなくてもそのまま動くはずなので、理屈を理解する必要もありません。コピペでOKでした。

工程2はユーザにお任せします。

工程3は社内スケジュールはWebの入力フォームなので、エクセルのこのセルはこのフォームに入れるみたいなやり方で実現できました。

下記のサイトを参照し、少し変更しました。

excel-ubara.com

Sub Hatena()
  Dim Driver As New Selenium.WebDriver
  Dim sKey As New Selenium.Keys
  Dim elm As Selenium.WebElement
  Dim word As String
  Driver.Start "Edge", "https://it.ojisan999.com/"
  Driver.Get "/"
  word = Range("A2").Value
  Set elm = Driver.FindElementByXPath("/html/body/div[2]/div/div/div/aside/div/div[2]/div[2]/form/input[1]")
  elm.Clear
  elm.SendKeys word
  elm.SendKeys sKey.Enter
  Driver.Close
  Set Driver = Nothing
End Sub

実際にはフォームのXPath[]内の数字とセルのアドレス番号が順次数字が増えていく形式でしたので、forを使用しました。

XPathというのは初めて知ったのですが、Goolge Chromeを使えば簡単に取得できます。

  1. 調べたいフォームにカーソルを置いて、右クリックすると「検証」が表示される
  2. 表示をクリック

  3. 検証ツール(ディベロッパーモード)が開かれる
  4. フォームにカーソルを置いた状態で、ソース部分を右クリック
  5. 「コピー」>「完全なXPathをコピー」をクリック

  6. クリップボードに完全なXPathが保存される
  7. プログラムに貼り付ける

うまくページが落ち着くまで待ち時間が必要とか、一度クリックが必要など、サイトによってクセがあったりするので何度も実行しながら調整します。
一箇所状況によって、Web上のタブのURLが変化する部分がありました。ここは「必殺、メッセージボックス」による半自動化で対応しました。

このような内容でも1日作業ですが、初めてそれっぽいプログラムが動作して、嫌いな作業が楽になりました。このときはしっかり習得してない自分が、こんなコピペのプログラムを作っていいのかなと思ってました。

何個か作って分かりました。職業プログラマーじゃありませんから、業務改善レベルなら良いんです。挫折しないプログラミングというのが自分の中で定義されました。

 

考え方を少し変えると、プログラムに挫折というものはなくなります。