VBAとは?JavaScriptとは?共通項を徹底解説!

エンジニア
マネージャー
VBAとは?
VBAとは、Visual Basic for Applicationの略で、Excel、Wordなどに付属している、ドキュメントを自動操作するためのスクリプトのことです。マクロとも呼びます。
Excel VBAを扱うことの方が非常に多く、一般にVBAというとExcel VBAのことを指します。
この記事でも、Excel VBAを扱っていきます。
JavaScriptとは?
JavaScriptとは、Webブラウザで動作するWebの表示を変えるためのスクリプトのことです。
名前が似ていますが、JavaとJavaScriptとは何の関係もありません。
今のブラウザ(Bing、Internet Explorer、Chrome、Firefox、Safariなど)ではデフォルトでJavaScriptが有効になっています。また、今どきのホームページで、JavaScriptを使っていないホームページはありません。
Webの開発者になりたいなら、JavaScriptは必須の知識と言えるでしょう。
VBAとJavaScriptの共通項
VBAはExcelの中で動くスクリプトでJavaScriptはブラウザの中で動くスクリプトです。即ち、動く用途があらかじめ決まっています。それ以外のことには使えません。
しかしExcelは様々な用途に使われますし、Webも様々な用途のものがあります。
言語としての用途が決まっていても、VBAもJavaScriptも、単体で「プロ」になって稼げるくらい仕事の幅は広いのです。
これがVBAとJavaScriptの共通項です。
VBAでスクレイピング
では、VBAとJavaScriptの共通項がよく分かるものとして、VBAでのスクレイピングの例を見ていきましょう。
スクレイピングでは、ホームページの内容を読み込み、ホームページをDOM=Document Object Modelというものに分解して解析します。DOMの操作はJavaScriptが最も活用される場面です(ホームページの表示の操作がJavaScriptの目的でした)。VBAでもDOMを操作できるのです。
VBAとJavaScriptの技術の一端を紹介します。
スクレイピングの方法
VBAでスクレイピングするには、Internet Explorerを使います。
VBAからInternet Explorerを起動し、そこにホームページを読み込ませて、その読み込んだホームページを解析するのです。
Internet Explorerの準備は
Dim ie As New InternetExplorer
ie.Visible = True
です。
VisibleをFalseにするとInternet Explorerは表示されませんが、裏側で何をしているか分からなくなるため、可能な限り表示させておくことをおすすめします。
実際にホームページを読み込むのには、次のようなコードを書きます。
Private Declare Sub Sleep _
Lib “kernel32” (ByVal dwMilliseconds As Long)
Private Function readHTML(ByRef ie As InternetExplorer, ByVal url As String) As HTMLDocument
Err.Clear
On Error Resume Next
ie.navigate url
If Err.number <> 0 Then
Set readHTML = Nothing
ThisWorkbook.Worksheets(1).Cells(errRow, 1).Value = Str(Now) + url + “の読み込み時にエラーが発生しました”
errRow = errRow + 1
Else
Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Set readHTML = ie.document
End If
'// 1秒スリープ
Call Sleep(1000)
End Function
ie.navigate url
でurlのページをIEに読み込ませます。
その後、読み込みが終わるまで
Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE
DoEvents
Loop
で待ちます。
Set readHTML = ie.document
で関数の戻り値としてホームページの内容を返しています。documentオブジェクトがDOMモデルになっています。JavaScriptのdocumentオブジェクトと同じです。
最後に、続けて読み込むとサーバーに負荷をかけるため(サーバーに過大な負荷をかけるのは犯罪に問われかねません)Sleepしています。これはWindowsのシステムコールを読んでいます。上の方にある宣言
Private Declare Sub Sleep _
Lib "kernel32" (ByVal dwMilliseconds As Long)
はシステムコールを呼ぶための宣言です。
DOM要素の分析の仕方
docにホームページのDOMオブジェクトが代入されているとして、それを分析する方法を解説します。
コードを一部抜粋します。
Dim li, l As Object
…(略)…
Set li = doc.getElementsByClassName(“product_grid”)(0).getElementsByClassName(“product_grid_item”)
For Each l In li
image = l.getElementsByClassName(“product_grid_image”)(1).getAttribute(“src”)
…(略)…
getElementsByClassName
はJavaScriptの
getElementsByClassName
と同じです。クラス名に一致する要素の配列を取り出す関数です。
このとき、VBAでは通常は添え字1から始まる配列が0から始まりますので、混乱しないようにしてください。
getAttribute
はJavaScriptの
getAttribute
と同じです。その要素の属性を取得する関数です。
このようにしてスクレイピングしていきます。だいたいDOM操作の仕方はJavaScriptと似ています。
エンジニア
マネージャー
仕事の幅を広げよう
VBAとJavaScriptの技術の一端として、共通する技術であるスクレイピングの紹介をしました。
VBAで技術を深めると、Accessとの連携、複雑な会計システム設計などを手掛けることになり、それなりに開発規模も大きくなります。例えば官公庁でも、VBAで基幹システムを作っているところは存在します。業務システムの根本を手掛ける重要なエンジニアともいえるでしょう。
またJavaScriptは、CSSと連携した表示効果の演出の他にも、動的な(HTML自体をJavaScriptで生成する)Webページ生成を可能にするVue.jsやReact.jsでの開発などがあり、大変応用範囲が広く、JavaScriptは大変奥が深い技術です。
JavaScriptでは、サーバーサイドをJavaScriptで構築するNode.jsという技術もあります。フロントエンドだけではなく、バックエンドもこなしてしまうということです。JavaScriptを扱うことによって、仕事の幅を広げることが可能です。
VBAとJavaScriptを覚えて、仕事の幅を広げましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


JavaScript新着案件New Job
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅)開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)ECサイトの開発/HTML/東京都千代田区/【WEB面談可】/在宅勤務
月給26万~26万円東京都千代田区(秋葉原駅)官公庁向けシステム運用保守/C#/東京都府中市/【WEB面談可】
月給50万~60万円東京都府中市(中河原駅)官公庁向けシステム開発のテスター/C#/東京都府中市/【WEB面談可】
月給25万~35万円東京都府中市(中河原駅)システム開発部門でWeb系のプログラマー/埼玉県川越市/【WEB面談可】/在宅勤務
月給63万~63万円埼玉県川越市(南大塚駅)