none
複数あるCMDの実行結果をVBAを使い、Excel上に出力したい RRS feed

  • 質問

  • 過去に類似した質問スレッドがございましたが、

    対象スレッド

    「PowerShellのコマンドの実行結果をマクロ(VBA)で受け取る事が出来るのでしょうか?」

    それを認知した上で質問させてください。

    AD上の情報を取得するためのコマンドを予めExcel上に複数行にわたり、書き出しておき、

    それをVBA上にて吸い上げ、別シートに実行結果を書き出しがしたいです。

    1つのコマンドではできましたが、複数行にわたり(複数のコマンドを)それを実行する方法が、まだ当方VBAを

    学習したばかりの為、コードが分かりません。。

    ご教授お願い致します。

    ※以下がそのコードです。

    Sub testdmd()

    'コマンドプロンプトを使うためのオブジェクト
    Dim wsh As New IWshRuntimeLibrary.WshShell

    Dim result As WshExec

    Dim cmd As String
    Dim filedata() As String
    Dim i As Integer

    '実行したいコマンド
    With Worksheets("check") ⇒シート名
    cmd = .Range("J8")   ⇒CMDが記載されたセル ※&でつなげてもうまく別シートのセルへ書き出ししてくれません
    End With

    'コマンドを実行
    Set result = wsh.Exec("%ComSpec% /c " & cmd)

    'コマンドの実行が終わるまで待機
    Do While result.Status = 0
        DoEvents
    Loop

    '結果を改行区切りで配列へ格納
    filedata = Split(result.StdOut.ReadAll, vbCrLf)

    'A1から順番に結果を書き込む
    With Worksheets("CMD1") ⇒結果を書き込む別シート
    i = 1
    For Each filenm In filedata
        .Cells(i, 1).Value = filenm
        i = i + 1
    Next
    End With

    Set result = Nothing
    Set wsh = Nothing
    End Sub

    (ここまで)

    2020年2月7日 12:57

すべての返信

  • こんな

    Sub testdmd()
    
        'コマンドプロンプトを使うためのオブジェクト
        Dim wsh As New IWshRuntimeLibrary.WshShell
        
        Dim result As WshExec
        
        Dim cmd As String
        Dim filedata() As String
        Dim i As Integer
        i = 1
        
        
        Dim checkSheet As Worksheet
        Set checkSheet = Worksheets("check") '⇒シート名
        
        Dim commandCell As Range 'コマンドの入っているセルを示すRange
        Set commandCell = checkSheet.Range("J8")      '⇒CMDが記載されたセル
        
        Do While commandCell.Text <> "" 'セルにコマンドが入ってるなら繰り返す
            cmd = commandCell.Text '実行したいコマンド
            
            'コマンドを実行
            Set result = wsh.Exec("%ComSpec% /c " & cmd)
            
            'コマンドの実行が終わるまで待機
            Do While result.Status = 0
                DoEvents
            Loop
            
            '結果を改行区切りで配列へ格納
            filedata = Split(result.StdOut.ReadAll, vbCrLf)
            
            'A1から順番に結果を書き込む
            With Worksheets("CMD1")  '⇒結果を書き込む別シート
                Dim filenm As Variant
                For Each filenm In filedata
                    .Cells(i, 1).Value = filenm
                    i = i + 1
                Next
            End With
            
            Set commandCell = commandCell.Offset(1, 0) '一行下のセルに進む
        Loop
        Set result = Nothing
        Set wsh = Nothing
    End Sub



    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2020年2月8日 0:26
  • すばらしいです!ありがとうございます★

    ぜひ他のコードも参考にさせていただきます!

    2020年2月10日 14:25

  • こんにちは。フォーラムオペレーターのFanです。
    フォーラムにご投稿くださいましてありがとうございます.
    gekkaさんからの返信は参考になったことで、よっかたです。

    またアイコンのことですが、肖像権を侵害しているどうか判断できませんが、
    よろしければ、論争を避けるためにそれをチェンジすることをお勧めします。

    Fan

    Please remember to mark the replies as an answers if they help. If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com

    2020年2月11日 2:58
    モデレータ
  • That point is very good advice
    2020年2月12日 18:15