はじめに
VBAマクロから Shell 関数で他のアプリケーションを起動したり、既に開いているアプリケーションを操作したりする際、「目的のウィンドウが他のウィンドウの背面に隠れてしまっていて見えない」ということがあります。
このような場合に、指定したウィンドウを強制的に一番手前に表示させ、アクティブな状態にするのが、Windows APIの SetForegroundWindow 関数です。
この記事では、まず FindWindow APIで目的のウィンドウを探し出し、次に SetForegroundWindow APIを使ってそのウィンドウを最前面に表示する、という一連の流れを解説します。
ウィンドウを最前面に表示するVBAサンプルコード
このマクロは、Windowsの「電卓」が既に起動しているかを確認し、もし起動していれば、そのウィンドウを一番手前に表示します。
Declareステートメントは、モジュールの最上部(Sub などのプロシージャよりも前)に記述する必要があります。
完成コード
'--- モジュールの最上部にAPI関数を宣言 ---
' 64bit/32bit両対応
#If VBA7 Then
' ウィンドウを探すためのAPI関数
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
' ウィンドウを最前面に表示するためのAPI関数
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hwnd As LongPtr) As Long
#Else
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
#End If
' 電卓のウィンドウを探して、最前面に表示する
Sub BringCalculatorToFront()
Const APP_CLASS_NAME As String = "CalcFrame" ' 電卓のウィンドウクラス名
Dim windowHandle As LongPtr
'--- 1. FindWindowで、電卓のウィンドウが存在するか探す ---
windowHandle = FindWindow(APP_CLASS_NAME, vbNullString)
'--- 2. 結果を判定 ---
If windowHandle = 0 Then
' ハンドルが見つからなかった(0)場合は、起動していない
MsgBox "電卓は起動していません。", vbExclamation
Else
' ハンドルが見つかった場合は、そのウィンドウを最前面に表示
SetForegroundWindow windowHandle
MsgBox "電卓を最前面に表示しました。"
End If
End Sub
コードの解説
FindWindow API関数
SetForegroundWindow を使うには、まず目的のウィンドウのハンドル(ウィンドウを識別するためのユニークな数値)を知る必要があります。FindWindow は、指定したクラス名(例: "CalcFrame")やウィンドウタイトルに一致するウィンドウを探し出し、そのハンドルを返します。見つからなければ 0 を返します。
SetForegroundWindow API関数
これが、ウィンドウを最前面に表示する核心部分です。
SetForegroundWindow windowHandle:FindWindowで取得したwindowHandleを引数として渡すことで、そのハンドルを持つウィンドウをアクティブにし、ユーザーがすぐに操作できる状態にします。
この関数は、ウィンドウを最小化から復元したり、他のウィンドウの背後から手前に移動させたりする効果があります。
まとめ
今回は、Windows APIの FindWindow と SetForegroundWindow を組み合わせて、特定のアプリケーションウィンドウを最前面に表示する方法を解説しました。
FindWindowで、目的のウィンドウのハンドルを取得する。- 取得したハンドルを
SetForegroundWindowに渡して、ウィンドウをアクティブ化する。
このテクニックを使えば、マクロの実行中にユーザーに確認してもらいたい別アプリのウィンドウを確実に手前に表示させたり、複数のアプリケーションを切り替えながら操作するような、より高度な自動化処理を構築することができます。
副業から独立まで「稼げる」Webスキルを習得する(PR)
ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。
「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。
このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。
講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。
副業に特化した強み
- 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
- AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
- 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。
受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。
受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。
