教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA その他操作】他のアプリケーションを起動する(Shell)にはどうすればいいの?教えて!

f:id:m_kbou:20200418090024p:plain

Excelから他のアプリケーションを起動するにはShell関数を使用します。指定方法について紹介します。

 

 

構文

記述方法は以下の通りとなります。

(1)他のアプリケーションを起動する

Shell ”[アプリケーションパス]”,vbNormalFocus

[説明]:

他のアプリケーションを起動するには

 「Shell ”[アプリケーションパス]”,vbNormalFocus」

と記述します。

[アプリケーションパス] 起動するアプリケーションのパスを記述します。
※「”」(ダブルクォーテーション)で囲みます。

アプリケーションパスを幾つか紹介しておきます。参考にして下さい。

アプリケーション パス
メモ帳 C:\Windows\System32\notepad.exe
電卓 C:\Windows\System32\calc.exe
エクスプローラ C:\Windows\explorer.exe
IE C:\Program Files\internet explorer\iexplore.exe
Word C:\Program Files (x86)\Microsoft Office\Office16\WINWORD.EXE
Powerpoint C:\Program Files (x86)\Microsoft Office\Office16\POWERPNT.EXE
Outlook C:\Program Files (x86)\Microsoft Office\Office16\OUTLOOK.EXE

[記述例]: 

Shell "C:\Windows\System32\notepad.exe", vbNormalFocus
Shell "C:\Windows\calc.exe", vbNormalFocus
Shell "C:\Program Files\internet explorer\iexplore.exe", vbNormalFocus

(2)他のアプリケーションを起動し戻り値を取得する

[変数]= Shell( ”[アプリケーションパス]”,vbNormalFocus)

[説明]:

他のアプリケーションを起動し、起動した結果の戻り値を取得するには

 「[変数]= Shell( ”[アプリケーションパス]”,vbNormalFocus)」

と記述します。

[変数] 任意の変数を記述します。
アプリケーション起動時の戻り値がセットされます。
戻り値は以下いずれかとなります。
・起動に失敗した場合:0が戻ります。
・起動に成功した場合:0以外が戻ります。
[アプリケーションパス] 起動するアプリケーションのパスを記述します。
※「”」(ダブルクォーテーション)で囲みます。

[記述例]:

戻り値 = Shell("C:\Windows\System32\notepad.exe", vbNormalFocus)

 

使い方

使い方について具体的に説明します。

他のアプリケーションを起動する

他のアプリケーションを起動する方法について説明します。 

[プログラミング例①]:

Sub サンプル()

  Shell "C:\Windows\System32\notepad.exe", vbNormalFocus

End Sub

内容は、「メモ帳を起動して下さい。」との意味になります。

f:id:m_kbou:20210218082718p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例①]:

①<実行>ボタンをクリックします。

f:id:m_kbou:20210306070400p:plain

②メモ帳が起動します。

f:id:m_kbou:20210306070415p:plain

[サンプル①]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

他のアプリケーションを起動する方法(例①)についての説明は以上です。 

[プログラミング例②]:

Sub サンプル()

  Shell "C:\Windows\System32\calc.exe", vbNormalFocus

End Sub

内容は、「電卓を起動して下さい。」との意味になります。

f:id:m_kbou:20210218082829p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例②]:

①<実行>ボタンをクリックします。

f:id:m_kbou:20210306070440p:plain

②電卓が起動します。

f:id:m_kbou:20210306070451p:plain

[サンプル②]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。 

drive.google.com

他のアプリケーションを起動する方法(例②)についての説明は以上です。

[プログラミング例③]:

Sub サンプル()

  Shell "C:\Program Files\internet explorer\iexplore.exe", vbNormalFocus

End Sub

内容は、「IEを起動して下さい。」との意味になります。

f:id:m_kbou:20210218082944p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例③]:

①<実行>ボタンをクリックします。

f:id:m_kbou:20210306070542p:plain

②IEが起動します。

f:id:m_kbou:20210306070555p:plain

[サンプル③]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

他のアプリケーションを起動する方法(例③)についての説明は以上です。

 

他のアプリケーションを起動し戻り値を取得する

他のアプリケーションを起動して戻り値を取得する方法について説明します。

[プログラミング例]:

Sub サンプル()

  '↓処理①
  Dim 戻り値 As Long

  '↓処理②
  戻り値 = Shell("C:\Windows\System32\notepad.exe", vbNormalFocus)

  If (戻り値 = 0) Then
    MsgBox "エラーがあります。(戻り値:" & 戻り値 & ")", 16, "エラー"
  Else
    MsgBox "正常に起動されました。(戻り値:" & 戻り値 & ")"
  End If

End Sub

処理の流れは以下の通りとなります。

[処理①]:変数定義
Dimによる戻り値を格納する変数定義となります。

[処理②]:Shell関数によるメモ帳の起動
Shell関数でメモ帳を起動させます。起動時の戻り値は[処理①]で定義した変数:戻り値に
「0」又は「0以外」でセットします。セットされた戻り値をIF文で判定し、「0」の場合はMsgBoxで”エラーがあります。”を表示し、「0以外」の場合は”正常に起動されました。”を表示します。(※Shell関数の戻り値は、「0」の場合は他のアプリケーション起動に失敗した値となり、「0以外」の場合は正常に起動した値となります。)

f:id:m_kbou:20210516204959p:plain

※上記のプログラミング例は、VBE(VBA記述画面)に記述しないと実行ができません。VBEの開き方についてはこちらを参考にして下さい。

[実行例]:

①<実行>ボタンをクリックします。

f:id:m_kbou:20210306070619p:plain

②メモ帳が開きます。

f:id:m_kbou:20210516205016p:plain

③また、MsgBoxで「正常に起動されました。(戻り値:13536)」が表示されます。

f:id:m_kbou:20210516205033p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

他のアプリケーションを起動し戻り値を取得する方法についての説明は以上です。

 

おわりに

今回は他のアプリケーション起動する方法について説明しました。Excel→メモ帳を起動してデータを転記する場合やExcel→Wordを起動してデータを転記する場合等、他のアプリケーションとの連携は何かと使用します。是非活用してみて下さい。