|
Testしていないので上手くいかなかったらごめん?
ファイルサイズが小さいなら、多分、こんなでも出来るかも?
ファイルサイズが大きい場合は少し工夫が必要かも?
Option Explicit
Public Sub Sample()
Dim i As Long
Dim vntMerge As Variant
Dim vntOutput As Variant
Dim strBuff As String
Dim dfi As Integer
Dim dfo As Integer
Dim lngSize As Long
Dim strProm As String
vntMerge = Array("AAA", "BBB")
'連結するファイルを選択
For i = 0 To 1
If Not GetReadFile(vntMerge(i), ThisWorkbook.Path, False) Then
strProm = "処理がキャンセルされました"
GoTo Wayout
End If
Next i
'出力するファイル名を指定
vntOutput = "CCC"
If Not GetWriteFile(vntOutput, ThisWorkbook.Path) Then
strProm = "処理がキャンセルされました"
GoTo Wayout
End If
'もし、出力ファイルが既に存在するなら削除
If Dir(vntOutput) <> "" Then
Kill vntOutput
End If
'出力ファイルをOpen
dfo = FreeFile
Open vntOutput For Binary As dfo
'マージ処理
For i = 0 To 1
'連結するファイルOpen
dfi = FreeFile
Open vntMerge(i) For Binary As dfi
'ファイルサイズを取得
lngSize = LOF(dfi)
'ファイルを変数に読み込み
strBuff = Input(lngSize, dfi)
'変数の値を出力
Put #dfo, , strBuff
Close dfi
Next i
'出力ファイルをClose
Close dfo
strProm = "処理が完了しました"
Wayout:
MsgBox strProm, vbInformation
End Sub
Private Function GetReadFile(vntFileNames As Variant, _
Optional strFilePath As String, _
Optional blnMultiSel As Boolean _
= False) As Boolean
Dim strFilter As String
'フィルタ文字列を作成
strFilter = "Text File (*.txt),*.txt," _
& "全て (*.*),*.*"
'読み込むファイルの有るフォルダを指定
If strFilePath <> "" Then
'ファイルを開くダイアログ表示ホルダに移動
ChDrive Left(strFilePath, 1)
ChDir strFilePath
End If
'もし、ディフォルトのファイル名が有る場合
If vntFileNames <> "" Then
SendKeys vntFileNames & "{TAB}", False
End If
'「ファイルを開く」ダイアログを表示
vntFileNames _
= Application.GetOpenFilename(strFilter, 2, , , blnMultiSel)
If VarType(vntFileNames) = vbBoolean Then
Exit Function
End If
GetReadFile = True
End Function
Private Function GetWriteFile(vntFileName As Variant, _
Optional strFilePath As String) As Boolean
Dim strFilter As String
Dim strInitialFile As String
'フィルタ文字列を作成
strFilter = "Text File (*.txt),*.txt," _
& "全て (*.*),*.*"
'既定値のファイル名を設定
strInitialFile = vntFileName
'読み込むファイルの有るフォルダを指定
If strFilePath <> "" Then
'ファイルを開くダイアログ表示ホルダに移動
ChDrive Left(strFilePath, 1)
ChDir strFilePath
End If
'「ファイルを保存」ダイアログを表示
vntFileName _
= Application.GetSaveAsFilename(vntFileName, strFilter, 2)
If vntFileName = False Then
Exit Function
End If
GetWriteFile = True
End Function
|
|