高速化する為に、CSVファイルをTXTファイルに変換してからオープンします。

CSVファイルの一行目の書き出しが、ID の場合「Excelは、'ファイル名'がSYLK ファイルであることを・・・」というエラーが発生します。これは、CSVファイルをExcelがSYLKファイルと認識してしまう為らしく、テキストエディタでCSVファイルを開き、一時的に変更してください。

VBAProject --> 標準モジュール --> ModuleXX 

Private Sub CommandButton1_Click()
'CSV読込

    Dim myPath As String, mySheet As String
    Dim myCSVFile As Variant, myTXTFile As Variant
    Dim strThisFileName As String, strOpenFileName As String
    Dim lngFieldCount As Long, lngRecordCount As Long
    
    'ファイル間を移動するので、このExcelファイル名を覚えておく
    strThisFileName = ThisWorkbook.Name
    
    '★データのフィールド数を設定
    lngFieldCount = 17
    
    'このファイルのパスを取得
    myPath = ThisWorkbook.Path
    
    '現在のアクティブシート名を覚えておく
    mySheet = ActiveSheet.Name
    
    'カレントドライブ、カレントフォルダの移動
    ChDrive myPath
    ChDir myPath

    'CSVファイルを選択し、ファイル名を取得
    myCSVFile = Application.GetOpenFilename("CSVファイル (*.csv), *.csv")
    
    '選択されずにキャンセルされた場合
    If myCSVFile = False Then Exit Sub
    
    Application.ScreenUpdating = False
    
    'CSVファイルからTXTファイルに変換(パスが付いたファイル名)
    myTXTFile = Left(myCSVFile, Len(myCSVFile) - 4) & ".txt"
    Name myCSVFile As myTXTFile
    
    '変換したテキストファイルを開く
    Workbooks.OpenText Filename:=myTXTFile, DataType:=xlDelimited, comma:=True
    
    '開いたテキストファイル名
    strOpenFileName = ActiveWorkbook.Name
    
    '貼り付け先のデータをクリア
    With Workbooks(strThisFileName).Sheets(mySheet).Range("B11")
        .Resize(.CurrentRegion.Rows.Count, lngFieldCount).ClearContents
    End With
    
    'CSVファイルのレコード数
    lngRecordCount = Workbooks(strOpenFileName).Sheets(1).Cells(1).CurrentRegion.Rows.Count
    
    'CSVファイルをコピー
    Workbooks(strOpenFileName).Sheets(1).Cells(1).Resize(lngRecordCount, lngFieldCount).Copy
    
    '値貼り付け
    Workbooks(strThisFileName).Sheets(mySheet).Range("B11").PasteSpecial Paste:=xlPasteValues
    
    'コピーモードを解除(重要)
    Application.CutCopyMode = False
    
    'テキストファイルを閉じる
    Workbooks(strOpenFileName).Close savechanges:=False
    
    'テキストファイル名をCSVファイル名に戻しておく
    Name myTXTFile As myCSVFile
    
    Range("B11").Select
    
    Application.ScreenUpdating = True
    
End Sub

 ↓ facebook のフォローで応援してください。お願いします。



Microsoft Office ブログランキングへ