みなさまこんにちは、ノグチです。
エクセルVBAは、慣れてくると色々なことができてとっても便利ですよね。
でも、「エクセルからこの機能を使えたらいいのに…」や、「エクセルとこの機能を組み合わせられたら、もっと便利にできるかも…」ということ、ありませんか?
それ、Windows APIを使えば実現できるかもしれませんよ!
今回はエクセルの便利さを更に便利にできるかもしれない、Windows APIについてご紹介していきます。
Windows APIとは?
まず、APIは、Application Programming Interfaceの頭文字をとったもので、ある機能やデータを外部プログラムから呼び出して利用するための手段であるということは、ブログ内の色々な記事で既にご紹介されている通りです。
Windows APIはそのWindows版で、WindowsのOSにあらかじめ用意されている色々な機能を呼び出したりする場合の手段で、呼び出し元のプログラムと呼び出したい機能との間の橋渡し役になってくれる優れもの。
もちろんエクセルVBAからも使うことができ、エクセルVBA以外のWindowsの機能やデータを呼び出して使うことができるのです。
Windows APIとDLL
Windows APIを使う際によく聞くであろう単語が、DLLです。
たとえば、User32.DLLといった名前で見たことがあるかもしれません。
DLLは、Dynamic Link Libraryの略で、色々なアプリケーションで汎用的に使える機能や各機能にアクセスする関数をまとめており、エクセルVBAのようなプログラムから呼び出せるようにしてあるものです。
Windows APIを使ってエクセル以外の機能を呼び出す場合、
- Windows APIでDLL内の関数を指定して、引数を渡す
- WindowsAPIで指定されたDLL内の関数が、目的のプログラムにアクセスして処理をさせる
- 目的のプログラムが処理した結果をDLL内の関数からWindowsAPIを通して、エクセルVBAに返す
ざっくりとこんな流れで処理をしてくれます。
大量に用意されているWindows API
Windows APIとして公開されているAPIは、下記マイクロソフト社のページで閲覧することができます。
Windows APIを使ってWindowsシステム音を鳴らしてみる
Declareステートメントで使うAPIを宣言する
では実際に、Windows APIのMessageBeepを使って、Windowsのシステム音を鳴らしてみましょう。
エクセルVBAからWindows APIを使うためには、VBAコードの宣言セクションで、「この名前の、ここに格納されている関数を使います」という宣言をする必要があります。
その宣言に使うのが、Declareステートメント。
このステートメントを使って、「MessageBeepを使いますよ」という宣言をします。
こちらのDeclareステートメントの記述方法に則って、Windows APIの宣言をしましょう。
まずは、記述方法の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と記述してコードを実行させてみると…
大文字を小文字にしただけで別のものとみなされるようで、この通りエラーになってしまい、こちらが意図した処理を行うことができません。
DeclareステートメントでAPIを指定する際は、API名のアルファベットの綴りはもちろん、大文字・小文字まで正確に記述するようにしましょう。
最後に
いかがでしたでしょうか。
今回は、Windows APIとは何ぞや?とDeclareステートメントを使ったWindows APIの宣言方法をご紹介しました。
次回以降では、エクセルVBAで便利に使えるWindows APIをご紹介していきます。
それでは、最後までお読みいただきありがとうございました!