- ベストアンサー
Excelのセルの内容をコマンドプロンプトで実行する方法
- Excelのセルに記入されている文字列を使ってコマンドプロンプトで実行する方法を教えてください。
- セルの値がない場合はエラーのポップアップを表示し、値がある場合はコマンドプロンプトで実行します。
- セルA1から順番に値があるかどうかをチェックし、値がある場合はその値をコマンドプロンプトで実行し続けます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
目的が分からないのですが、思いつきで作成してみました。 セルの情報からバッチファイルを生成して実行するコードです。 XPSP3、XL2000で試しています。ご参考まで。 Sub test() Dim targetRange As Range Dim FSO As Object Dim i As Long Dim myTextFile As Object Dim batFilePath As String Set FSO = CreateObject("Scripting.FileSystemObject") ’バッチファイルをテンポラリフォルダーに作成して実行します batFilePath = FSO.GetSpecialFolder(2) & "\temp.bat" Set myTextFile = FSO.CreateTextFile(batFilePath) With ActiveSheet Set targetRange = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp)) End With With myTextFile For i = 1 To targetRange.Cells.Count If i = targetRange.Cells.Count Then 'コマンドプロンプトを開いたままにする .writeline "cmd /k " & targetRange.Cells(i) Else .writeline targetRange.Cells(i) End If Next i .Close End With Set FSO = Nothing CreateObject("WScript.Shell").Run "CMD.EXE /C " & batFilePath, , True End Sub おまけで、DOSコマンドの実行結果をVBAで取得したい時は、下記が参考になると思います。 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGetDosResult.html
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
初心者がやるような課題ではない。したければ自分で勉強のこと。 いまさら何でこういうことが必要なのか疑問?質問者は20年前のコンピュター従事者のの残党ですか。 したいことを方法論を指定せずに、別に質問したら(VBA、VBscriptなどで出来る範囲ということで) http://okwave.jp/qa/q4276876.html の#2のWendy02さんより >それをバッチプログラムでっていうのは、私には良く分からないです。もう、WScript でも古いというのに、なお古い方法を選ぶのは、ちょっともう世界が違うように思います。 ーー Googleで「vba dos コマンド 実行」で照会すると、沢山記事が出る。ただし、DOSコマンドに習熟していないと読んでもわかりにくいと思うが。 http://officetanaka.net/excel/vba/tips/tips27.htm ほか多数 上記を元に cd を実行して、dirを実行する例をやってみた。上記の解説のスイッチの意味など十分わかってないが(生煮えですまないが)参考までに挙げておく。 I1:I2に dir C:\Documents and Settings\XXXX\My Documents (最後に¥は不要のようだ) が入っている。 ーーー 標準モジュールに Sub Sample2() Dim WSH, wExec, sCmd As String, Result As String, tmp, i As Long Set WSH = CreateObject("WScript.Shell") sCmd = "cd " & Cells(2, "I") '--cd XXX Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) Do While wExec.Status = 0 DoEvents Loop '--Dir sCmd = "dir" Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) Do While wExec.Status = 0 DoEvents Loop Result = wExec.StdOut.ReadAll tmp = Split(Result, vbCrLf) For i = 0 To UBound(tmp) Cells(i + 1, 1) = tmp(i) Next i Set wExec = Nothing Set WSH = Nothing End Sub ーー ただし Dos窓を閉じるとセルにファイル名などが出てきた。 StdOutの文字数制限のためか、途中までしか出ない。
お礼
ありがとうございます! 出来ました。