会社を卒業したのんちおじさん。

人生は知恵と工夫と思いやり!
優しさほど強いものはなく、本当の強さほど優しいものはない -ラルフ・W・ソックマン-

ファイル結合をしてから読み込む

2008-03-14 12:29:59 | Excelのお話
「複数ファイルを変数に入れる。」で書いたのとは別に読み込む前にファイルをひとつに結合するという方法があります、DOSで育った人間としてまず頭に浮かんだのが「リダイレクト出力」を利用するのと「Copy」コマンドを利用する方法でした。

「リダイレクト出力」は画面に出力する変わりにファイルやプリンターに出力する機能で例えば

C:>Dir > dir.txt

とやると画面にずらずらと表示される内容がそのまんま「dir.txt」というファイルに吐き出されます。

C:Dir >> dir.txt

とやるとすでにある「dir.txt」の末尾に書き加えられます。

具体的にどのようにファイルを結合するかというとDOSに「Type」コマンドというのがあってこれは

C:>type file1.txt

とやると「file1.txt」の内容を画面にズラーッと表示してくれるので

C:>type file1.txt > file3.txt
C:>type file2.txt >> file3.txt

とやれば「file1.txt」「file2.txt」が結合されて「file3.txt」ができるのでそれを読み込めばよいのです。

Copyコマンドで上に書いたことを実現するには

C:>Copy file1.txt + file2.txt file3.txt

と割合シンプルです、だがそれをVBAで実現するためには「Windows Script」を使う必要があるらしく調べてできたのが下のやつ、でもこれはいわゆる「DOS窓」を利用するので一瞬「DOS窓」が開いてしまいます。

Sub SampleX()

  Dim スクリプト, 実行, 能書, 読込 As String
  Dim 都度, 在庫 As String

  Set スクリプト = CreateObject("WScript.Shell")

  読込 = "C:idectempreadfile.csv"
  都度 = "C:idectempIDECHDATA.csv"
  在庫 = "C:idectempIDECHDATAZ.csv"

  能書 = "Copy" & " " & 都度 & " + " & 在庫データ & " " & 読込

  Set 実行 = スクリプト.Exec("%ComSpec% /c " & 能書)

  nHFile = FreeFile

  Open 読込データ For Input As #nHFile
  On Error GoTo Fin
  dTa = 1

  Do While Not EOF(nHFile)
    Line Input #nHFile, tmPLine
    tmPLine = Replace(tmPLine, """", "")
    tmp = Split(tmPLine, ",")
    Range(Cells(dTa, 1), Cells(dTa, UBound(tmp) + 1)) = tmp
    dTa = dTa + 1
  Loop
Fin:
  Close #nHFile
End Sub