【ExcelVBA】リモートデスクトップのログインを自動化。Excelの表からワンクリックでRDP接続。

スポンサーリンク




作業を自動化する

Windows環境だと通常リモートデスクトップ(以下RDP)でサーバの管理を行う。

IPアドレスやアカウントのリストはExcelで管理されているので個別にRDPを起動してIDとパスワードを入力するのがほとんどだと思う。

リモートデスクトップ接続マネージャーという便利なツールもあるが、個別にダウンロードして設定しないと使えない。

インストール不要、既にあるアカウントリストのExcelファイルだけで自動でRDP接続する方法を紹介します。

この記事は、

  • 何度もRDP接続するのが手間だ
  • ツールを使わずExcelだけでRDPしたい
  • パスワード入力やゲートウェイの情報も自動で入れたい

こんな方に読んでもらいたいです。

 

スポンサーリンク

自動ログインする方法

まずは自動ログインを行う流れを説明するので、実際にやりたい内容と合っているか確認してください。

Excelのアカウントリストを使います。

接続に必要な情報が書かれています。

  • IPアドレス(サーバ)
  • ユーザー名
  • パスワード
既にIPアドレスやユーザー名のリストがある場合は、このフォーマットでアカウントリストを作り直す必要はありません。
※この後のマクロの部分で説明します。

 

接続したい情報のある行を選択しておきます。
この例ではC4のセルを選択しています。

ここでALT+F8でマクロの一覧を表示させて「RDP接続」を動かします。

 

実行すると選択している行の情報を読み込んで接続を開始します。

接続までの流れは以上です。
今回は4行目を選択しているので4行目の情報を使用します。

 

ユーザー名やパスワードが空だった場合は確認の入力を求められるので、そこで入力してください。

入力したら自動で接続が始まります。

 

 

アカウントリストにマクロを設定する

実際にマクロを設定していきます。
今回は既にアカウントリストがある前提で進めていますが、無い場合は上の説明の画像と同じ内容で表を作って下さい。

ツールの[開発]から[Visual Basic]を選択して「Microsoft Visual Basic for Applications」を開く

ツールの[挿入]から[標準モジュール]を選択

真っ白な画面が出るので下のコードをコピーして貼り付けます。

 

'処理の待ち時間を待機する準備
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Type 列の型
    SV_IP As Long
    SV_ID As Long
    SV_PW As Long
    GW_IP As Long
    GW_ID As Long
    GW_PW As Long
End Type
Public Type 接続情報の型
    SV_IP As String
    SV_ID As String
    SV_PW As String
    GW_IP As String
    GW_ID As String
    GW_PW As String
End Type

Dim ベースGW_IP, ベースGW_ID, ベースGW_PW As String

Sub ベースGW情報を設定()
    ベースGW_IP = InputBox("ゲートウェイのIPを入力してください。")
    ベースGW_ID = InputBox("ゲートウェイのIDを入力してください。")
    ベースGW_PW = InputBox("ゲートウェイのPWを入力してください。")
    MsgBox "ゲートウェイ情報の設定が完了しました。"
End Sub

Sub RDP接続()
    'アカウントリストに存在しないゲートウェイを使うか選択
    ベースGW使用 = False '使う=True 使わない=False
    
    Dim 列 As 列の型
    'サーバのIPの列番号
    列.SV_IP = 2
    'サーバのユーザ名の列番号
    列.SV_ID = 3
    'サーバのパスワードの列番号
    列.SV_PW = 4
    'ゲートウェイのIPの列番号
    列.GW_IP = 5
    'ゲートウェイのユーザ名の列番号
    列.GW_ID = 6
    'ゲートウェイのパスワードの列番号
    列.GW_PW = 7
    
    Dim 接続情報 As 接続情報の型
    With ActiveWorkbook.ActiveSheet
        選択行 = Selection.Row
        接続情報.SV_IP = .Cells(選択行, 列.SV_IP)
        接続情報.SV_ID = .Cells(選択行, 列.SV_ID)
        接続情報.SV_PW = .Cells(選択行, 列.SV_PW)
        接続情報.GW_IP = .Cells(選択行, 列.GW_IP)
        接続情報.GW_ID = .Cells(選択行, 列.GW_ID)
        接続情報.GW_PW = .Cells(選択行, 列.GW_PW)
    End With
        
    'サーバ接続情報が足りない場合は入力画面を表示
    If 接続情報.SV_IP = "" Then
        MsgBox "IPが設定されていません。処理を終了します。"
        Exit Sub
    End If
    If 接続情報.SV_ID = "" Then
        接続情報.SV_ID = InputBox("サーバのユーザー名を入力してください。")
    End If
    If 接続情報.SV_PW = "" Then
        接続情報.SV_PW = InputBox("サーバのパスワードを入力してください。")
    End If
    
    'ベースGWが有の場合、ベースGWを使うか確認する画面を表示
    If ベースGW使用 = True Then
        If MsgBox("ベースGWを使用しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
            接続情報.GW_IP = ベースGW_IP
            接続情報.GW_ID = ベースGW_ID
            接続情報.GW_PW = ベースGW_PW
        End If
    Else
    'ゲートウェイ接続情報が足りない場合は入力画面を表示
        If 接続情報.GW_IP <> "" And 接続情報.GW_ID = "" Then
            接続情報.GW_ID = InputBox("ゲートウェイのユーザー名を入力してください。")
        End If
        If 接続情報.GW_IP <> "" And 接続情報.GW_PW = "" Then
            接続情報.GW_PW = InputBox("ゲートウェイのパスワードを入力してください。")
        End If
    End If
    
    '処理の待ち時間を設定
    待機時間_処理待ち = 2000
    待機時間_入力 = 100
    
    'RDPを起動
    rc = Shell("mstsc.exe", vbNormalFocus)
    Call Sleep(待機時間_処理待ち)
    Application.SendKeys 接続情報.SV_IP, True
    Call Sleep(待機時間_入力)
    Application.SendKeys "%{o}", True
    Call Sleep(待機時間_入力)
    Application.SendKeys "{TAB}", True
    Call Sleep(待機時間_入力)
    Application.SendKeys 接続情報.SV_ID, True
    Call Sleep(待機時間_入力)
    
    'ゲートウェイタブ
    Application.SendKeys "+{TAB}", True
    Call Sleep(待機時間_入力)
    Application.SendKeys "+{TAB}", True
    Call Sleep(待機時間_入力)
    Application.SendKeys "{RIGHT 5}", True
    Call Sleep(待機時間_入力)
    Application.SendKeys "%{s}", True
    Call Sleep(待機時間_入力)
    
    If 接続情報.GW_IP <> "" Then
        'ゲートウェイ情報
        Application.SendKeys "%{u}", True
        Call Sleep(待機時間_入力)
        Application.SendKeys "%{s}", True
        Call Sleep(待機時間_入力)
        Application.SendKeys 接続情報.GW_IP, True
        Call Sleep(待機時間_入力)
        Application.SendKeys "~", True
        Call Sleep(待機時間_入力)
        
        '接続ボタン
        Application.SendKeys "%{n}", True
        Call Sleep(待機時間_処理待ち)
            
        'ゲートウェイユーザー・パスワード入力
        Application.SendKeys 接続情報.GW_ID, True
        Call Sleep(待機時間_入力)
        Application.SendKeys "{TAB}", True
        Call Sleep(待機時間_入力)
        Application.SendKeys 接続情報.GW_PW, True
        Call Sleep(待機時間_入力)
        Application.SendKeys "~", True
        Call Sleep(待機時間_処理待ち)
    Else
        Application.SendKeys "%{d}", True
        Call Sleep(待機時間_入力)
        Application.SendKeys "~", True
        Call Sleep(待機時間_入力)
        '接続ボタン
        Application.SendKeys "%{n}", True
        Call Sleep(待機時間_処理待ち)
    End If
    
    'サーバパスワード入力
    Application.SendKeys 接続情報.SV_PW, True
    Call Sleep(待機時間_入力)
    Application.SendKeys "~", True
    Call Sleep(待機時間_入力)
End Sub








32行目はアカウントリストにゲートウェイの情報がないが、個別に設定した値を使いたい場合はTrueに変更してください。
Trueにするとマクロを実行した際に、実際にゲートウェイを使用するか質問されるようになります。
よくわからない場合はFalseのままにしてください。

36〜40行目の数字はRDP接続するサーバのIPアドレス、ユーザー名、パスワードが書かれている列番号に必ず書き直してください

42〜46行目の数字はゲートウェイのIPアドレス、ユーザー名、パスワードの列番号に必ず書き直してください。ゲートウェイの列が無い場合や使わない場合は999にしてください。

 

アカウントリストに対象の列が存在しない場合は、999などExcelで使用していない列番号を指定してください。
マクロは空白だと判断して個別に入力を求めるようになります。

 

設定が終わったら、Excelを名前を付けて保存で拡張子を.xlsmにして保存してください。
ALT+F8でマクロの一覧を表示させて「RDP接続」で動けば自動化の完了です。

マクロの動きとしてはSendkeysというステートメントを使い、表示されているRDP画面に文字を貼り付けたり、指定のキーボード操作を行うというものです。
アカウントリストにないキーボード操作や実行間隔はマクロで指定しています。

 

うまく動かない場合は、この後に記載する下記の詳細を確認してください。

  • 手動でRDPできるか
  • RDPのバージョンを確認する
  • 処理待ち時間を長くする

 

動かない場合の確認(手動でRDPできるか)

マクロは手動でログイン出来る事を前提に作成しています。

リモートデスクトップを開いて、アカウントリストにあるユーザ名とパスワードでログインできるか手動で確認してください。

手動で接続できない場合は、接続先のサーバが停止していたりRDPサービスが停止している可能性があります。
またIPアドレス、ユーザー名、パスワードいずれか又は複数の間違いの可能性もあるので手動で接続できる事を確認してからマクロを試してください。

動かない場合の確認(RDPのバージョンが合っているか)

RDPもWindowsのソフトなのでバージョンがあります。
この記事のマクロはRDPファイルバージョン10.0.19041.1266を参考にして作成しています。
ご自身の使っているRDPとバージョンに違いがあるか確認してください。

下記フォルダを開きます。

C:¥Windows¥system32¥

フォルダ内にあるmstsc.exeを右クリックしてプロパティを開きます。
次にプロパティの詳細タブを選択するとファイルバージョンが確認できます。

バージョンが違う場合はマクロが動作しない恐れがあるのでご了承ください。

 

動かない場合の確認(処理待ち時間を長くする)

RDPはソフトの起動や接続先サーバからの応答を確認する為、ネットワークやパソコンの処理によって動作が遅くなる事があります。

デフォルトでは処理待ちは2秒間の待機、文字入力などは0.1秒の間隔を開けて実行しています。
RDPソフトの起動が2秒以上かかる場合は、この時間を長くする事で改善する可能性があります。

時間の設定はマクロの○行目になります。
例えば処理待ち時間を4秒に変える場合は下記のようにします。

待機時間_処理待ち = 4000
設定の単位はmsなので4000が4秒になります。

 

 

スポンサーリンク

アカウントリストに存在しないゲートウェイを使う場合の操作

ここからはアカウントリストに、ゲートウェイの情報が無い場合の使い方を説明します。

ゲートウェイとは、直接RDP先のサーバに接続ができない環境の場合は踏み台・プロキシなどと呼ばれるサーバを経由して接続する事になります。
RDPの場合はその呼び名がゲートウェイとなっています。

ゲートウェイはサーバのアカウントリストとは別で管理される事があるので、このような作りにしました。

 

それでは説明します。

マクロコピー後に32行目のベースGW使用をTrueに変更してください。

ベースGW使用 = True

 

ゲートウェイの情報がない状態なので、最初に登録します。
Excelを起動したら、ALT+F8でマクロの一覧を表示させて「ベースGW情報を設定」を動かします。

するとゲートウェイのIPアドレス、ユーザー名、パスワードを求められるので3回入力します。

「ゲートウェイ情報の設定が完了しました。」と表示されれば準備完了です。
間違えた場合は「ベースGW情報を設定」を再度実行してください。
この設定はExcelファイルを一度閉じると消えるので、Excelファイルを開いて1度設定したら閉じずに使用することをおススメします。

設定は何度でも行えますが、全て上書きになります。

準備の設定を終えたらALT+F8でマクロの一覧を表示させて「RDP接続」を動かします。

次に「ベースGWを使用しますか?」と表示されるので「はい」を選択してください。

これで事前に設定したゲートウェイを使用して接続を試みます。

 

VBAはどうやって覚える?

プログラムのコードが読めないと、参考にしているコードの理解や自分でプログラムを書くときに時間がかかってしまいます。
そんな時は基礎から学ぶと応用もできるようになり自分の作りたいプログラムがスムーズに作れるようになります。

無料でやるならネット上の学習サイトを参考にするといいです。
こちらはVBAの基礎から説明している無料のWEBサイトになります。

>>基礎から学べるWEBサイトを見てみる


過去にネットでの学習でつまずいた方には専門書をオススメします。
本なら基礎から学べる事はもちろん、読者視点で分かりやすい解説になっています。
一人で集中してコツコツ進めたい方は書籍を試してください。



本を読んでもわからない所が多すぎたり、誰かに質問したい場合はオンラインスクールを見てみましょう。
カウンセリングから目的に応じた学習プランと教材を提供してくれるので、プログラミングの敷居がとても低くなります。
誰かに相談できるのは心強いです。

>>オンラインスクールを無料体験で始める


まとめ

マクロを使うことでアカウントリストからRDP接続を行う事ができるようになりました。
また既存のアカウントリストをそのまま使えるので、新たな情報を加えたり何か作り直すという作業も必要ありません。

これを一度設定すればExcelファイルを共有するだけで、チームメンバーでもすぐに自動ログインを利用できるようになるのでRDP接続する手間を省く事ができます。

RDP接続操作という細かい部分ですが、無くなるに越したことはありません。作業を楽にしていきましょう。

タイトルとURLをコピーしました