ゆるおたノート

Tomorrow is another day.

【VBA】環境変数の中身をVBAで見てみる

パーフェクトExcel VBAを写経していて楽しい関数を見つけたので、記録しておきます。

プログラミング入門者の壁

「パスを通す」って何?

プログラミングを始めるときに大抵つまづく環境構築。
Google先生に聞いてみると、大体「パスを通せばOKよ」的な説明がされている。

  • 「パス」って?"ファイルの場所"とかのパス?
  • それを「通す」ってどういうこと?何をすれば?

「解説してもらっても言葉の定義から調べることになって結局挫折…」みたいなことはよくあるけど、
要は、特定のソフトウェアで使うパスを、OS全体の変数(=環境変数)に
代入するように設定しよう
という意味らしい。

それで、この環境変数の状態を「VBAを使えばExcelからも見られる」というのを先ほど知った。

Excelから見るには?

VBAライブラリのInteractionモジュールに含まれていて、いわゆる「組み込み関数」のひとつ。
その名もEnviron関数(エンバイロン関数)。

環境変数の値を取得して状態を確認することができる。
「確認」だけで、値の設定まではこれだけでは出来ないみたいだけど…(残念)

これを使って、環境変数の値を取得してみる。

環境変数を出力してみる

引き数の選択肢

今回は、下記の表からPATHを使用する。

実行(イミディエイトウィンドウ)

イミディエイトウィンドウで下記を入力してEnterしてみる。

? Environ("PATH")

結果(イミディエイトウィンドウ)

こんな感じで出力された。

C:\Program Files\Microsoft Office\Root\Office16\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\Google\Google Apps Sync\;C:\Program Files\Google\Google Apps Migration\;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Users\<ユーザー名>\AppData\Local\Microsoft\WindowsApps;C:\Users\<ユーザー名>\AppData\Roaming\npm;;C:\Program Files\Microsoft Office\root\Client

1行で出るのね…読みづらい(^^;)

でも、よく見るとパス1点ごとに;で区切られているみたい。

C:\Program Files\~~~;C:\Program Files (x86)\~~~;C:\Program Files\~~~;…

ならば、そのまま区切って一覧にしてみよう。

一覧で出してみる

実行

今度は標準モジュールなどで下記を実行してみる。

Sub MySub()

    Dim environmentVariables() As String
    environmentVariables = Split(Environ("PATH"), ";")

    Dim i As Long
    For i = 0 To UBound(environmentVariables)
        Debug.Print environmentVariables(i)
    Next i

End Sub

結果(イミディエイトウィンドウ)

こんな感じで出ました(2020/03/22(日)現在)。

C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\
C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\
C:\WINDOWS\system32
C:\WINDOWS
C:\WINDOWS\System32\Wbem
C:\WINDOWS\System32\WindowsPowerShell\v1.0\
C:\WINDOWS\System32\OpenSSH\
C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL
C:\Program Files\Intel\Intel(R) Management Engine Components\DAL
C:\Program Files\Intel\WiFi\bin\
C:\Program Files\Common Files\Intel\WirelessCommon\
C:\Program Files\Microsoft VS Code\bin
C:\Program Files\Google\Google Apps Sync\
C:\Program Files\Google\Google Apps Migration\
C:\Program Files\nodejs\
C:\Program Files\Git\cmd
C:\Users\<ユーザー名>\AppData\Local\Microsoft\WindowsApps
C:\Users\<ユーザー名>\AppData\Roaming\npm
C:\Program Files\Microsoft Office\root\Client

おぉー、思ったよりたくさん設定されている…
(こんな感じで一瞬でシュババッと色々出てくるのが好きなんですけど、共感してくれる人いるかな…)

まとめ

これをExcelに出力すれば、必要なパスが登録されているかチェックする、とかなら使えるかも。

「パスを通す」までをVBAでやるとしたら、ターミナルを呼び出さなきゃいけないみたい。
ちょっとめんどくさいけど、Environ関数と同じInteractionモジュールのShell関数で出来るようだ。

そもそも「環境構築ならターミナルとかで見なさいよ」と言われそうな気もするけど笑、
Excelが使えるならこんな選択肢もあるんだなー」ってことで!

参照