.net column

.NET開発者のためのブログメディア

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

2020年06月19日

SE
VBAでできること、JavaScriptでできることの共通項はあるのでしょうか?

PM
仕事でも幅広く利用できるので、習得することで市場価値の高い人材を目指せます。

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 InternetExplorerie.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 DoEventsLoopで待ちます。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と似ています。

SE
VBAとJavaScriptの技術は多くの仕事で必要とされているのですね。

PM
そうですね。VBAとJavaScriptを覚えて、幅広い活躍を目指しましょう!

仕事の幅を広げよう

VBAとJavaScriptの技術の一端として、共通する技術であるスクレイピングの紹介をしました。VBAで技術を深めると、Accessとの連携、複雑な会計システム設計などを手掛けることになり、それなりに開発規模も大きくなります。例えば官公庁でも、VBAで基幹システムを作っているところは存在します。業務システムの根本を手掛ける重要なエンジニアともいえるでしょう。

またJavaScriptは、CSSと連携した表示効果の演出の他にも、動的な(HTML自体をJavaScriptで生成する)Webページ生成を可能にするVue.jsやReact.jsでの開発などがあり、大変応用範囲が広く、JavaScriptは大変奥が深い技術です。JavaScriptでは、サーバーサイドをJavaScriptで構築するNode.jsという技術もあります。フロントエンドだけではなく、バックエンドもこなしてしまうということです。JavaScriptを扱うことによって、仕事の幅を広げることが可能です。

VBAとJavaScriptを覚えて、仕事の幅を広げましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)