|
▼YUKI さん:
ついでに(といっては何ですが)
ぼくが最初に考えていた処理の流れを紹介しておきます。
(CSVファイルの結合を行わず、個々のCSVファイルを指定シートに
順番に インポートしていく方法です)
'最初に考えていた方法
(仮定)各CSVファイルには 列見出しがあると考えています。
1つめのCSVをシートに書き出すときは、この列見出しを含めて
1行目から書き出します。
2つ目以降のCSVは 2行目からインポートしています。
Sub 複数CSVファイルのインポート()
Dim fs As Object, fd As FileDialog
Dim fStr As String, fName As Variant
Dim i As Long, fCount As Long
'結合するCSVファイルの選択
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = True
.Title = "データ選択(ファイル参照)"
.Filters.Add "CSVファイル", "*.csv"
If .Show = 0 Then Exit Sub
fCount = .SelectedItems.Count
If fCount < 2 Then
MsgBox "データを複数選んでください"
Exit Sub
End If
End With
'指定CSVを2枚目のシートにインポートする
Dim iRow As Long 'Importするシート行番号
Dim WS As Worksheet
Set WS = Worksheets.Add(After:=Worksheets(1))
For i = 1 To fCount
CSVのインポート fd.SelectedItems(i), WS, iRow
Next
'名前を付けてXLS形式で保存
fName = LCase$(fd.SelectedItems.Item(1))
fName = Replace(fName, ".csv", ".xls")
fName = Application.GetSaveAsFilename( _
InitialFileName:=fName, FileFilter:="Book,*.xls")
If fName = False Then Exit Sub
Application.EnableEvents = False
ActiveWorkbook.SaveAs fName, FileFormat:=xlNormal
Application.EnableEvents = True
End Sub
Sub CSVのインポート(CSVname, ByVal WS As Worksheet, iRow As Long)
iRow = iRow + 1
With WS
With .QueryTables.Add(Connection:= _
"TEXT;" & CSVname, Destination:=WS.Cells(iRow, 1))
.Name = "foo" 'iRow : Sheet書き出し行
.FieldNames = True
.AdjustColumnWidth = True
.TextFilePlatform = 932
.TextFileStartRow = 1 - (iRow > 1) 'Text Import開始行
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
WS.Names(.Name).Delete
.Delete
End With
iRow = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
End Sub
|
|