VBA×○○○の魅力

記事
IT・テクノロジー
VBAは主にOffice系(ExcelやPowerPoint)を自動化する言語であり、Office以外の自動化となると極端にできることが少なくなります。しかしそんなVBAでも別の何らかと連携させることでできることの幅が大きく広がります。
ここではそんなVBAと連携させることで機能が拡張できる"別の何らか"をいくつかご紹介します。

Windows API

SetLayeredWindowAttributes_Image.png

Windows APIとは簡単にいえばWindowsに用意されている機能がまとまっているセットのようなもので、VBAからそれらを呼び出すことでWindowsに用意されている様々な機能を使用することができます。これら機能はほとんどの場合、VBAだけでは実現できないものばかりです

VBAではWindowAPIを呼び出すための定型文、いわゆる"おまじない"をコード上に記載するだけすぐに呼び出すことが可能です。

ウィンドウを操作(サイズ変更、透明化など)したり、クリップボードを操作したり、マウスやキーボードの制御、画像や図形の描画などのようなVBAでは実現できない非常に多くの操作を可能にしてくれます。

ポインタやメモリといったC++言語寄りの考えが出てきたり、外部アプリケーションに影響を与える関数なども存在するためある程度の知識を付けておく必要があります。


自作DLL (Dynamic Linking Library)

スクリーンショット 2023-08-12 164852.png

WindowsAPIはWindowsに標準装備されているDLLファイル内にある関数を呼び出しているだけなのですが、DLLファイルは自作することも可能です。
たとえば自作DLL内で画像処理が得意なOpenCVを使った顔認識の関数を作成すれば、VBA上でWindowsAPIと同じようにその関数を呼び出すことが可能になります。
DLLはC++言語で作成可能なので、あらゆる操作の実現が可能になります。
(※イメージとしてはDLLがメイン処理でVBAはそのDLLを実行するスタートポイントとなっているだけ)


Exeファイル

ocr_directory.png

TesseractOCR_Result.png

VBAでは指定のExeファイルの実行が可能です。
たとえばGoogleが開発した文字認識アプリの「TesseractOCR」はExeファイルを実行すると引数で渡した画像(パス)内の文字を認識してテキスト形式で出力してくれます。

これをうまく利用することでVBAからTesseractOCRを起動し、その結果のテキストファイルを読み取ることでVBAでの文字認識を可能とします。
ExcelVBAxTesseractOCR.png

これはあくまで一例でExeファイルでインプットとアウトプットが単純なものであればなんでも応用ができます。またDLLファイルと同じでExeファイルの自作も可能のためVBA呼び出し専用の中間ファイル的なアプリケーションを自作することも可能です。


UIAutomation

VBAxUIAxMage.png

UIAutomation(UIA)はユーザーインターフェース(UI)自体を操作可能にするAPIで、VBAでは参照設定を行うことで簡単に呼び出すことができます。
(※上画像はVBAでAIによる画像生成を自動化したもの)

Excelのブックの上書き保存を手作業で行う場合、左上のファイルメニューをクリックし、表示されたメニューから「上書き保存」をクリックすることで実現が可能です。(ショートカットキー等その他の道筋もありますが)

UIAはこの手作業でやっている操作をそのまま自動化することができます
VBAでは通常この処理を行う場合、「WorkBookオブジェクト」を取得し「Saveメソッド」を使うことで実現ができるためあまり恩恵を受けられませんが、Webサイトや社内アプリといようなAPIが提供されていないアプリケーションであってもGUI経由で自動化することができるというのがUIAの強みです。

いわゆるプログラム言語で行う自動化というよりは、RPAのような手作業の操作をまったくそのまま自動化するようなイメージです。


最後に

VBAと連携できる"何かしら"は上記以外にも様々なものがあります。
個人的にはVBAにこだわりはなく、よりよい方法で自動化できる別解があるのであればそちらを推奨します。

ただ、会社によってはVBAは許可されていても、しっかりとしたアプリの開発(C++やC#、VB.Netなどの)は予算や保守の関係でNGとしているところも少なくないのが現状です。

そういった状況に置かれている方は、上記でいうWindowsAPIやUIAは知識を付けるだけでVBAの機能を拡張することができるのでぜひオススメです。開発環境はVBAが開発できる環境があればそれ以上は基本不要で、VisualStudioなどを入れる必要もありません。

これらの連携機能を使いこなすにはVBAの知識だけでは足りません。
ぜひ、これらの内容に興味のある方は勉強してみて下さい。もし独学で限界を感じているという方は、上記の内容も含めて詳しく解説しますので、興味があればその旨のメッセージを頂ければと思います。

また、単純なツールの開発は下記より受け付けているので、是非あわせてご一考ください。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す