• ベストアンサー

エクセルのマクロでDOSのコマンドを記述するには?

デスクトップにa.prnとb.prnというファイルがあります。a.prnとb.prnを結合しa.prnを作成したのちb.prnを削除する作業をエクセルのマクロに記入したいのですがどうしらいいでしょうか?おしえてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

#2 の Wendy02です。 #1 さんのおっしゃっていたものを作ってみました。ただし、アペンドモードにしました。 結合中にエラー(バイナリコードが入るなど)が、でると、最初のファイルはアペンドモードですから、戻しが利きませんので、バックアップファイルが必要です。 なお、#2 の  TmpFn = " tmp.prn" 製作中の段階で、作っていたもので、これは不要の行ですから、削除してしまってください。 別に試さなくてもよいです。こちらのほうが確実です。 Sub FileCombine() Dim Fn1 As String Dim Fn2 As String Dim msg As String Dim Fno1 As Integer Dim Fno2 As Integer Dim LineText As String 'ファイル名設定 Fn1 = "a.prn" Fn2 = "b.prn" If Len(Dir(Fn1)) = 0 Or Len(Dir(Fn2)) = 0 Then   msg = Left$(Fn1, Len(Fn1) - Len(Dir(Fn1))) & " " & _      Left$(Fn2, Len(Fn2) - Len(Dir(Fn2)))   MsgBox msg & "のファイルがありません。"   Exit Sub End If Fno2 = FreeFile() Open Fn2 For Input As #Fno2 Fno1 = FreeFile() Open Fn1 For Append As #Fno1 Do Until EOF(Fno2)  Line Input #Fno2, LineText  Print #Fno1, LineText Loop Close #Fno1 Close #Fno2 'ファイル削除 Kill Fn2 MsgBox "結合しました。", vbInformation End Sub

marutin99
質問者

お礼

ありがとうございます。参考にさせていただきました。

その他の回答 (3)

  • gori8063
  • ベストアンサー率36% (116/319)
回答No.4

#1です。先を越されたかな(w 単純な系で書いてます。 Sub Merge_Files() Dim dt Open "c:\file1.prn" For Input As #1 Open "c:\Output_File.prn" For Output As #2 Do Until EOF(1) = True Line Input #1, dt Print #2, dt Loop Close #1 Open "c:\file2.prn" For Input As #1 Do Until EOF(1) = True Line Input #1, dt Print #2, dt Loop Close #1 Close #2 FileCopy "c:\Output_File.prn", "c:\file1.prn" Kill "c:\Output_File.prn" End Sub

marutin99
質問者

お礼

ありがとうございます。勉強になりました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >a.prnとb.prnを結合しa.prnを作成したのち prn ファイルはテキストファイルですから、一見、MS-DOSのほうが楽のようですね。 Win のバージョンがあるので、XP でしたら、下記のようなCMD.EXE ですが、そうでないなら、Command.Com になります。 スペースを削除しないでください。 たぶん、そのままでいけると思いますが、どうも、確実性に欠けるようです。#1 さんのご指摘にある方法がよいかもしれませんね。 Sub ShellCommandPrc() Dim Fn1 As String Dim Fn2 As String Dim ComExe As String Dim myPath As String Dim ret As Integer myPath = CurDir 'フォルダ変更する場合は、以下で行う ' Chdir 'ファイル名設定 Fn1 = "a.prn" Fn2 = "b.prn" If Dir(Fn1) = "" Or Dir(Fn2) = "" Then   MsgBox "どちらかのファイルがありません。"   Exit Sub End If ComExe = "CMD.EXE /C COPY " 'Win 2x系 'ComExe = "COMMAND.COM /C " 'Win 9x 系 TmpFn = " tmp.prn" ret = Shell(ComExe & Fn1 & "+" & Fn2 & " " & Fn1) 'タイムラグ Application.Wait Now() + TimeValue("00:00:03") If ret > 0 Then   Kill Fn2 End If ChDir myPath End Sub バックアップを取ったほうがよさそうです。要するに、Dos ステージに行って、帰ってくるタイムロスは、VBA上で行うスピードとは違うので、素通りしてしまい、コピーし結合前に、第二番目のファイルを削除してしまうことがあります。

  • gori8063
  • ベストアンサー率36% (116/319)
回答No.1

shellコマンドで行けそうな気もしますが。 http://homepage2.nifty.com/kasayan/vba/vba3.htm MS-DOS窓が出てくると表示がスマートではないですよね。 prn形式って、テキストベースですよね。 VBAのファイル操作で1枚目のファイル開いてデータ読んで、ファイルに書き出して、2枚目のファイル開いてデータ読んで、ファイルに書き出して、最後に書き出しファイルを閉じてその名前を変更する。という手順でどうでしょうかね。

関連するQ&A

  • EXCEL マクロ コマンドボタンで複数ファイルの制御は可能?

    Excelのマクロを作成しています。 <マクロの内容>  AファイルからBファイルへデータをコピ&ペーストしたり、Bファイル内のセルを結合したり、結合解除したりしています。 <状況>  Aファイル内(標準モジュール)にマクロを作成し[マクロの実行]から実行させたところ成功しました。  Aファイル内(Microsoft excel objects Sheet1)にボタンを作成し、そのボタンを押すことで同様にしようとしたところBファイルを操作するところでエラーが発生しました。  ファイル間でデータをやり取りしたり、マクロの入っていない側のファイルのセル情報を変更させたいのですが、ボタンで実行させるにはどうすればいいのでしょうか?

  • シンクラでVBAマクロを動かすと止まる

    シンクラでVBA のマクロを動かすと止まる 作業内容は、 結合後ファイルを新規作成 ↓ Aのエクセルファイルを開き、 そのデータをコピー ↓ 結合ファイルに貼り付ける ↓ Bのエクセルファイルを開き… を繰り返します (簡単に書きました) シンクラでないパソコンでは問題なく動いていました シンクラになり、上記の作業途中で止まります しかも全体的に遅い… ちなみに画面クリックをすると作業を再開します どういった記述で解決しますか?

  • エクセルのマクロ

    こんにちは。 今悩んでいます。 VB6.0で、電圧計、電流計を制御して、VBからエクセルを起動、その値をVBでエクセルにデータを送り、グラフを作るのですが。 グラフを作る作業が、同じ作業なので、エクセルのマクロを使い、グラフを作成しようとしていたのですが・・・。 どのエクセルのファイルからでもできるように、個人用のマクロブックで、グラフを作成したのですが、VBからエクセルを起動し、データの転送して、グラフをマクロで作成しようと思ったら、マクロがないんです。 しかし、デスクトップにあるエクセルのショートカットから起動してみると、マクロがあるのです。 VBから起動したエクセルでは、マクロは使えないんでしょうか? 詳しい方よろしくお願いします。

  • エクセルのマクロについて

    エクセルにて、簡単なマクロを作成した後から、エクセルを立ち上げるたびにPERSONAL、というファイルがいつも立ち上がるようになりました。該当のマクロを削除しても、立ち上がるのですがどうしたら、消えますか?教えてください。

  • エクセル マクロの記述をご教示下さい。

    宜しくお願い致します。 ● Aファイルに下記のようなマクロを記述したい。 ・BファイルのB列の6行目から2000行に入力されている、データを 削除する。 ・出来れば、人為的にBファイルは、立ち上げない状態で削除したい。 ・マクロを実行することによって、自動的に立ち上がるのは結構です。 ・また、削除後、Bファイルは立ち上がっていても結構です。 ご指導のほど宜しく御願い申し上げます。

  • エクセルでこんなマクロ

    マクロの初心者ですが、 エクセルで、 「A」、「B」、「C」、「コピーA」、「コピーB」 というファイル名のエクセル開いていたときに、 「コピーA」、「コピーB」というファイルだけを閉じてくれるような マクロを 「C」のファイル上で作成することは可能でしょうか。 ファイル名はABC・・・以降多数あります。 何卒よろしくお願い致します。

  • マクロについて

    エクセルバージョン2010です。 ABC(.エクセル拡張子)と言う通常のエクセルファイルを作りました。 次に、ABCファイルにマクロを作成し、 マクロ用・個人用フォルダーのマクロを保管するフォルダへの指定で、 ABC(.マクロ拡張子)のファイルを作りました。 この場合、ABC(.エクセル拡張子)と言う通常のエクセルファイルは削除しても良いのでしょうか? それと、一度、エクセルを再起動しました。 で、さっきのマクロ用ファイルのマクロの編集をクリックすると、 開いていないブックのなんとかは編集できません、 のダイアログがでて、編集画面を見られません。 一度削除したABC(.エクセル拡張子)を元に戻して、これを開いても編集画面は出ませんでした。 何がいけないのでしょうか? 最後に、ついでの質問ですが、 Book2.prn と言う、得体のしれぬファイルが、 エクセル保存用フォルダーに出来ています。 これは削除しても良いものでしょうか? 以上3点、よろしくお願いします。

  • マクロで可能でしょうか??

    初めまして ken2308といいます。 Excelは有る程度、使えるのですが 業務上マクロを覚えることになりました。 マクロに関しては全くのシロウトです。 Excelのマクロで以下のような事をやろうと思っておりますが Excelのマクロでは対応は可能でしょうか?? 【例】 Excelファイルが2つあります。 このファイルの大きさが【50列】×【50行】あり 【列】は飛び飛びで20列ほど非表示にており 【行】は複数のセルを結合して有ります。 このファイルを1つのファイルにしたいのですが Excelのマクロでは対応は可能でしょうか?? 自分としては以下のマクロを作成すればよいと 思っているのですが・・・ (1)列・行ともに非表示⇒表示にする。 (2)結合しているセルを解除戻す。 (3)2つのファイルをコピペする。 (4)貼り付け後、不要な列を削除する。 ※このマクロがうまく行ったら、上記で出来たファイルから  ピボットテーブルを作成するつもりです。

  • ★エクセルマクロコード教えていただけますでしょうか

    マクロのコードを組みたいと考えておりますが、 ほとんど初心者のため、お詳しい方の力を貸していただきたい次第でございます。 m(__)m ○オートフィルターーでデータをソートし、そのソートごとのシートを自動作成。  その後、そのシートを各フォルダに保存したい。 あるデスクトップ上にあるエクセルシート「管理DB」の「sheet1」にある管理データ A列(グループa~e)、B列(登録日)、C列(ステータス)によって構成されているシートで、 1.A列「グループ」「a」でオートフィルター 2.その中でB列、「登録日」が「2012年9月」以前のものをオートフィルター 3.その中で、さらに「ステータス」が「在庫中」のものをオートフィルター 4.3段階のオートフィルター後にできた結果を、別のエクセルシートとして作成。 5.そのエクセルシートをデスクトップにある「フォルダX本部」に保存。 1~5の一連の作業をグループがなくなるまで繰り返したいと考えています。 1.A列「グループ」「b」でオートフィルター 2.その中でB列、「登録日」が「2012年9月」以前のものをオートフィルター 3.その中で、さらに「ステータス」が「在庫中」のものをオートフィルター 4.3段階のオートフィルター後にできた結果を、別のエクセルシートとして作成。 5.そのエクセルシートをデスクトップにある「フォルダY本部」に保存。 ※一連の作業の中で、グループ名と、シートの保存先が変わる以外、この作業の繰り返し。 以上の作業を実行するマクロを組むことは可能でしょうか。 また、マクロのコードを教えていただけると幸いです。 マクロについてお詳しい方、何卒よろしくお願いいたします。

  • エクセル「検索と置換」を閉じるマクロ

    エクセルの「検索と置換」をマクロボタンで閉じることは可能でしようか。 ファイルAとファイルBがあり、ファイルAの中で「検索と置換」の機能を使い検索作業後、マクロボタンでファイルBに移動して入力作業をする。 繰り返し上記の作業をしています。 ファイルBに移動したときに「検索と置換」の画面が不要なためファイルAからファイルBに移動した時点で「検索と置換」の画面を閉じるマクロをファイルAからファイルBに移動するマクロに付け加えたいのですが、「マクロの新しい記録」では記録できませんでした。 宜しくお願いいたします。

専門家に質問してみよう