【VBA】外部アプリのウィンドウを最前面に表示する方法 (SetForegroundWindow API)

目次

はじめに

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の FindWindowSetForegroundWindow を組み合わせて、特定のアプリケーションウィンドウを最前面に表示する方法を解説しました。

  1. FindWindow で、目的のウィンドウのハンドルを取得する。
  2. 取得したハンドルを SetForegroundWindow に渡して、ウィンドウをアクティブ化する。

このテクニックを使えば、マクロの実行中にユーザーに確認してもらいたい別アプリのウィンドウを確実に手前に表示させたり、複数のアプリケーションを切り替えながら操作するような、より高度な自動化処理を構築することができます。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次