IT業界6年目で初めてのVBA。
ほんとは初めてじゃないんだけど、100%初めてに近いです。5行ぐらい書いて実行して妥協した経験を持っています(`・ω・)=3
とまぁ、ほとんどLinux関連のOSしか触っていない&業務PCはMacな私が突然VBAな理由として。会社の案件でエクセルでとあるウェブサービスに情報を登録していかないといけない作業ができた。
んで、その作業なんだけど、APIがないらしく(あるっぽいけど使い方がよくわからない)ブラウザからぽちぽち作業しなきゃいけないということ。また量も多く複数人で分担して行っている。
先月初めて対応したが、とてもじゃないがだるいので、ブラウザを自動で動作させるならSeleniumがあるじゃないか!と思い、「Selenium VBA」であまり期待せずに検索したわけですよ。
すると。。。
まじかGoogle(°Д°;
この世でログを残してくれた人たちに感謝してとりあえずVBAとSeleniumという黒魔術みたいなことを試してみる。
環境
VBAを勉強する
意気込んだのはいいとして、そもそも私はVBAやらWindows関係のソフトウェアは無知識に等しい。
とはいえ、構文を理解しないとはかどらないことはわかっていたので入門サイトをさがす。
神サイトにありました。
休憩入れなければ&他プログラミング言語を理解している人が試せば1時間ぐらいでなんとなく把握できると思う。
- コメントは
'
(シングルクォーテーション)の後にコメントを書く Dim Name As String
でDim
は宣言、Name
は変数名、As String
が型名になります- データ型は色々。
String
、Integer
、Date
、Boolean
、Variant
(どんな値か不明な場合に使う)、Array
、Object
がある。 Object
の変数に値を代入する場合は、Set Name = Object
みたいにSet
を使わなければいけない- ループやら条件分岐、イテレーションみたいな処理などの他言語でもできる基本的なことはおk。
- 関数はある。あと良く使うだろうと思うのは
Sub getTest()
みたいに宣言するプロージャーと呼ばれるもの - プロージャーは返り値がない処理メソッド(?)、関数は返り値を返すことができるメソッド
- 関数で返り値を返す場合は関数名を使って返さなければいけない(これがあんまり好きではない)
Sub testSub() Dim result As Integer result = Call plusSub(1 + 1) 'Call で、他プロージャー、関数を呼ぶ Debug.Print result End Sub Function plusSub(ByVal one As Integer, ByVal two As Integer) plusSub = one + two '関数名と同じ名前の変数に値をいれて、処理が終了するとそれが返り値になる End Function
ちょっと慣れないとアレだなってのがあるが、とりあえずおkです。これでコードは読めそう。
Selenium-VBA をインストールする
次にVBA上からSeleniumを操作できるようにライブラリを取得します。
Google Codeなのが心配ですが(近々サービス終了する)、ここで最新のexeファイルを落としてインストールしました。
Google Code Archive - Long-term storage for Google Code Project Hosting.
次にVBAで使用できるように、インポート的なことをやります(VBAではアーリーバインドって言うらしい...)
ツール => 参照設定 => SeleniumWrapper Type Library にチェックをいれてOKを押せばおk
使ってみる
Sub startChrome() Dim driver As New SeleniumWrapper.WebDriver Call driver.Start ("chrome", "http://www.google.com") Call driver.get("") End Sub
これを実行するとGoogle Chromeが起動して、Googleのトップページが表示すると思います。
色々試して見たところ、いまいちデータの構造が理解できていないので、中々前に進まないのが現状かな。明日から本気だす。
とりあえず以上です。