|
▼にしもり さん:
解決されたようで何よりですが、
BookとしてOpenする方法でない方法を紹介しておきます。
参考にしてください。
Sub JoinCSV()
Dim Files, outFilename As String
Dim myPath As String
Dim i As Long
Dim io As Integer, oo As Integer
Dim buf() As Byte
Dim ss As String
Files = Application.GetOpenFilename _
(FileFilter:="CSV, *.csv", MultiSelect:=True)
If IsArray(Files) Then
i = InStrRev(Files(1), "\")
myPath = Left$(Files(1), i - 1)
outFilename = Application.GetSaveAsFilename( _
myPath & "\JoinCSV.csv", "CSV,*.csv")
If outFilename = "False" Then Exit Sub
oo = FreeFile()
Open outFilename For Output As oo '初期化
Close oo
Open outFilename For Binary As oo
io = FreeFile()
For i = 1 To UBound(Files)
Open Files(i) For Binary As io
ReDim buf(1 To LOF(io))
Get io, , buf
Close io
If i = 1 Then 'そのままバイトデータをPut
Put oo, 1, buf
Else '1行目を削除してPut
ss = StrConv(buf, vbUnicode)
ss = Split(ss, vbCrLf, 2)(1)
Put oo, , ss
End If
Next
Close oo
End If
End Sub
◆検証していて気がついたのですが、
> Files = Application.GetOpenFilename _
> (FileFilter:="CSV, *.csv", MultiSelect:=True)
GetOpenFilename は複数ファイルを選択でき便利なのですが、
ユーザーの選択順を変えるのが難点ですね。
たとえば、$1.csv, $2.csv, $3.csv のファイルをこの順番にダイアログで
選択しても、Files() 内は $3.csv, $1.csv, $2.csv に変更されてしまいます。
順番を指定して結合したいばあいには、GetOpenFilename は使えないですね
|
|