- ベストアンサー
VBAでDOSプロンプトを使用してファイル名を変更する方法
- VBAを使用してデスクトップの\dataフォルダにある複数のファイル名を変更したい場合、スペースを含むファイル名があるために変更できないことがあります。この記事では、VBAを使用してDOSプロンプトのRENコマンドを実行し、ファイル名を変更する方法を紹介します。
- 繰り返し処理を使用して、エクセル上の2列に入力されたファイル名を取得し、旧名と新名を変数に格納します。次に、%comspec% /cコマンドを使用してDOSプロンプトを起動し、RENコマンドを実行するためのコマンドを作成します。最後に、CreateObject関数を使用してwscript.shellオブジェクトを作成し、Execメソッドを使用してコマンドを実行します。
- スペースを含むファイル名の場合、ファイル名の前後にクォーテーションを追加することで、正しくコマンドが実行されます。これにより、スペースを含むファイル名でも問題なく変更することができます。複数のファイル名をまとめて変更する場合は、Forループを使用して処理します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>しかし、新名にも空白が入っている場合に、 >どういうクォーテーションを入れたら良いのか、 >あれこれ試しましたが、うまく行きませんでした。 >重ねてのお尋ねで恐縮ですが、ご教授ください。 なにをどうあれこれ試したのでしょうか? パソコンをはじめて触る方なのでしょうか。 そうだとしても、それくらいは自分で考えられるようになったほうがいいと思うのですが。 「ren "c:\users\me\desktop\data\旧名.txt" "新名.txt"」 こういう内容の文字列にすればいいわけです。ということはコードは cmd = "ren ""c:\users\me\desktop\data\" & 旧名 & """ """ & 新名 & """" でしょ。
その他の回答 (3)
- NotFound404
- ベストアンサー率70% (288/408)
VBAにも Name ステートメントがあります。 http://officetanaka.net/excel/vba/statement/Name.htm 「大半が変更できません」の原因も探りやすいと思います。 FileCopy、 Kill(Delete)とかも。 http://www.moug.net/tech/exvba/0060075.html ヘルプで確認してみてください。 CMD.exe にお願いするまでもないと思います。 また、もっと凝ったことをしたい場合はFilesystemObjectを検討しても吉。 http://officetanaka.net/excel/vba/filesystemobject/index.htm
お礼
NAMEのことを調べました。私のやり方より扱いやすそうですので、トライしてみます。ありがとうございました。
- pringlez
- ベストアンサー率36% (598/1630)
私も、VBAを使うのならFSOを使ったほうがいいとは思います。 ですがそこまで作っているのでしたら、現状を動くようにした方がいいでしょう。 cmdをメッセージボックスやDebug.printで表示させてみてください。 「ren c:\users\me\desktop\data\旧名.txt 新名.txt」 となっているはずです。これを 「ren "c:\users\me\desktop\data\旧名.txt" 新名.txt」 となるようにしましょう。 VB系の文字列中のダブルクォーテーションはダブルクォーテーションを2つ重ねる事で表現します。のでダブルクォーテーションだらけになりますがまぁそういうものです。 たぶんこれでいいはず。 cmd = "ren ""c:\users\me\desktop\data\" & 旧名 & """ " & 新名 新名にも空白が入っている場合には、同じように修正してみてください。
補足
ありがとうございます。質問者です。教えていただいたやり方で、旧名に空白が入っているものの処理ができました。しかし、新名にも空白が入っている場合に、どういうクォーテーションを入れたら良いのか、あれこれ試しましたが、うまく行きませんでした。重ねてのお尋ねで恐縮ですが、ご教授ください。よろしくお願いします。
- hitomura
- ベストアンサー率48% (325/664)
私は Excel VBA のことはよく知らないのですが、調べてみたところ WSH でコマンドを組み立てなくても FSO で File オブジェクトの Name プロパティを変更すればリネームできるようです。 [参考] MSDN での Name プロパティのリファレンスページ http://msdn.microsoft.com/ja-jp/library/cc428125.aspx 実際のリネームのサンプル http://officetanaka.net/excel/vba/filesystemobject/file06.htm
お礼
FSOのことを調べてみました。こちらのやり方の方が、私向きかと思いますので、やってみようと思います。ありがとうございます。
お礼
うまく行きました。できなかったことが実現し、感謝しています。自分の至らなさも痛感しつつ、もっと使えるようになりたいという思いが強くなりました。ありがとうございました。