Excel VBA初心者です。
Excelのセルに記入されている文字列をコマンドプロンプトで実行する方法を教えて下さい。
具体的には、
A1 → d:
A2 → cd hogehoge
A3 → dir
とセルにそれぞれ記入されていたとして、フォームから作成したボタンを押下すると
A1~A3が順番にコマンドプロンプトで実行(貼り付け)されるマクロの作り方が知りたいです。
ロジックは以下のようにしたいと考えています。
セルA1に値 →ない→ 「値がありません」というエラーのポップアップか何かを表示。
↓ある
セルA1に記入された文字列をコマンドプロンプトで実行
↓
セルA2に値 →ない→exit
↓ある
セルA2に記入された文字列をコマンドプロンプトで実行
↓
セルA3に値 →ない→exit
↓ある
以下ループ
わかりにくいかもしれませんが、よろしくお願い致します。
No.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/AcTip …
No.1
- 回答日時:
初心者がやるような課題ではない。
したければ自分で勉強のこと。いまさら何でこういうことが必要なのか疑問?質問者は20年前のコンピュター従事者のの残党ですか。
したいことを方法論を指定せずに、別に質問したら(VBA、VBscriptなどで出来る範囲ということで)
http://oshiete.goo.ne.jp/qa/4276876.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の文字数制限のためか、途中までしか出ない。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) Excleマクロ セル値の代入と文字列の結合について 3 2022/10/05 16:47
- Excel(エクセル) Excelのマクロで、特定のセルから順番に値を取得したい 5 2022/12/06 15:34
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) 【マクロ】ボタンを押すごとに、A1セル、A2セル、A3セルに日付を入力 3 2023/01/25 00:12
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Excel(エクセル) VBAにてエクセルをpdf化する方法 1 2023/03/10 16:20
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
エクセルでファイルを開かずに文字を検索し、行を抽出したい
Excel(エクセル)
-
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
-
4
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
5
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
6
EXCELをバッチコマンドで起動したとき、引数を渡せますか
その他(プログラミング・Web制作)
-
7
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
8
コマンドプロンプト実行後に画面を閉じない方法
Visual Basic(VBA)
-
9
WSH.Run の処理内容をテキストに落とすには
その他(プログラミング・Web制作)
-
10
テキストファイルから最終行の抽出
Windows Me・NT・2000
-
11
ファイルの先頭行を全て削除したい
Windows Vista・XP
-
12
バッチファイルで変数の中身をファイル出力したい
UNIX・Linux
-
13
条件付書式で「=#N/A」に色を付けたい
Excel(エクセル)
-
14
バッチファイルからVBAに引数を渡したい
その他(プログラミング・Web制作)
-
15
バッチファイル 指定行の切り出し
その他(Microsoft Office)
-
16
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
Excel(エクセル) VBA プロシー...
-
VBscriptが起動しない?
-
「読み取りと実行」と「読み取...
-
exeファイルを実行するとコマン...
-
VB.NETでのDOSコマンドを実行に...
-
バッチファイルの内容を表示さ...
-
VBScriptでコマンドプロンプト...
-
[teraterm] waitコマンドで停止...
-
バッチファイルが不正終了して...
-
16進数の変換処理
-
VBS実行時にコマンドプロンプト...
-
ネットワーク名が見つかりません
-
VBAのコマンドプロンプトでpaus...
-
フォルダを閉じる
-
Excel VBA ステップインが途中...
-
NASに移したBATファイルからセ...
-
メッセージを他のPCに出したい
-
【VB.NET】exeを実行すると「発...
-
pythonでexeファイルが作成でき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
「読み取りと実行」と「読み取...
-
exeファイルを実行するとコマン...
-
VBscriptが起動しない?
-
バッチファイルの内容を表示さ...
-
Excel VBA ステップインが途中...
-
エクセル フォルダの画像を画...
-
バッチファイルが不正終了して...
-
PDFファイルを開き、印刷し、閉...
-
複数のbatファイルを自動実行し...
-
[teraterm] waitコマンドで停止...
-
VBScriptでコマンドプロンプト...
-
ネットワーク名が見つかりません
-
Excel(エクセル) VBA プロシー...
-
Access の VBA 実行中に他の操...
-
VB.NETでのDOSコマンドを実行に...
-
Excelのセルの内容をコマンドプ...
-
VBS実行時にコマンドプロンプト...
-
VBA 既に開いているBookに継続...
-
メッセージを他のPCに出したい
おすすめ情報