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

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

 

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 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と似ています。

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分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

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

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

Search

Popular

reccomended

Categories

Tags