【エクセルVBA】Windows APIで外部プログラムを呼び出すための第一歩


eyecatch,windowsapi,vba,excel,error,message,messagebeep,spell

みなさまこんにちは、ノグチです。

エクセルVBAは、慣れてくると色々なことができてとっても便利ですよね。

でも、「エクセルからこの機能を使えたらいいのに…」や、「エクセルとこの機能を組み合わせられたら、もっと便利にできるかも…」ということ、ありませんか?

それ、Windows APIを使えば実現できるかもしれませんよ!

今回はエクセルの便利さを更に便利にできるかもしれない、Windows APIについてご紹介していきます。

スポンサーリンク

Windows APIとは?

まず、APIは、Application Programming Interfaceの頭文字をとったもので、ある機能やデータを外部プログラムから呼び出して利用するための手段であるということは、ブログ内の色々な記事で既にご紹介されている通りです。

Google Apps ScriptでREST APIを使って郵便番号住所変換スプレッドシート関数を作る
Google Apps Scriptを使ってスプレッドシートの自作関数を作っています。今回はREST APIを使って郵便番号から住所を求めるスプレッドシート関数を作ります。API初心者にもおすすめです。

Windows APIはそのWindows版で、WindowsのOSにあらかじめ用意されている色々な機能を呼び出したりする場合の手段で、呼び出し元のプログラムと呼び出したい機能との間の橋渡し役になってくれる優れもの。

もちろんエクセルVBAからも使うことができ、エクセルVBA以外のWindowsの機能やデータを呼び出して使うことができるのです。

Windows APIとDLL

Windows APIを使う際によく聞くであろう単語が、DLLです。

たとえば、User32.DLLといった名前で見たことがあるかもしれません。

DLLは、Dynamic Link Libraryの略で、色々なアプリケーションで汎用的に使える機能や各機能にアクセスする関数をまとめており、エクセルVBAのようなプログラムから呼び出せるようにしてあるものです。

Windows APIを使ってエクセル以外の機能を呼び出す場合、

  1. Windows APIでDLL内の関数を指定して、引数を渡す
  2. WindowsAPIで指定されたDLL内の関数が、目的のプログラムにアクセスして処理をさせる
  3. 目的のプログラムが処理した結果をDLL内の関数からWindowsAPIを通して、エクセルVBAに返す

ざっくりとこんな流れで処理をしてくれます。

大量に用意されているWindows API

Windows APIとして公開されているAPIは、下記マイクロソフト社のページで閲覧することができます。

MSDN Windows API Index

Windows APIを使ってWindowsシステム音を鳴らしてみる

Declareステートメントで使うAPIを宣言する

では実際に、Windows APIのMessageBeepを使って、Windowsのシステム音を鳴らしてみましょう。

エクセルVBAからWindows APIを使うためには、VBAコードの宣言セクションで、「この名前の、ここに格納されている関数を使います」という宣言をする必要があります。

その宣言に使うのが、Declareステートメント

このステートメントを使って、「MessageBeepを使いますよ」という宣言をします。

こちらのDeclareステートメントの記述方法に則って、Windows APIの宣言をしましょう。

Private Declare Function API名 Lib “DLL名” (引数) As

まずは、記述方法のAPI名の部分をMessageBeepと指定します。

そしてMessageBeepは『User32.DLL』というDLLの中に含まれているので、”DLL名”の部分を”User32”に置き換えます。

またMessageBeepは、鳴らしたい音の番号を引数に指定する必要がありますので、引数も一緒に宣言しましょう。

Functionで返される値の型も定義します。

するとこんな文になります。

Private Declare Function MessageBeep Lib "user32" (ByVal sType As Integer) As Integer

これで、「”User32”というDLLにある、MessageBeepを使います。」という宣言ができました。

MessageBeepを呼び出してシステム音を鳴らす

あとはコードの中でDeclareステートメントで宣言したAPI名を呼び出すだけです。

こんな風に。

Private Declare Function MessageBeep Lib "user32" (ByVal sType As Integer) As Integer
Sub Sound_Test()
    MessageBeep (20)
End Sub

このコードを実行してみると、よく聞くあのWindowsのシステム音を流すことができます。

API名を指定するときの注意点

VBAのコード内でWindowsAPIを使用する場合は、当然ながらAPI名称が正しく記述されている必要があります。

この「正しく」とは、アルファベットの大文字と小文字まで正確に記述することも含んでいます。

例えば、上でご紹介したMessageBeepの宣言文にあるPrivate Declare ~の後に続く、本来MessageBeepと記述するところをmessageBeepと記述してコードを実行させてみると…

windowsapi,vba,excel,error,message,messagebeep,spell

大文字を小文字にしただけで別のものとみなされるようで、この通りエラーになってしまい、こちらが意図した処理を行うことができません。

DeclareステートメントでAPIを指定する際は、API名のアルファベットの綴りはもちろん、大文字・小文字まで正確に記述するようにしましょう。

最後に

いかがでしたでしょうか。

今回は、Windows APIとは何ぞや?Declareステートメントを使ったWindows APIの宣言方法をご紹介しました。

次回以降では、エクセルVBAで便利に使えるWindows APIをご紹介していきます。

それでは、最後までお読みいただきありがとうございました!

連載目次:エクセルVBAでWindows APIを使いこなす方法

エクセルVBAでは、Windows APIを使用して外部プログラムを呼び出して利用することができます。その簡単な方法と、おすすめの関数についてシリーズでお伝えします。
  1. 【エクセルVBA】Windows APIで外部プログラムを呼び出すための第一歩
  2. 【エクセルVBA】 URLDownloadToFile関数を使って指定ファイルをワンクリックでダウンロードする方法

タイトルとURLをコピーしました