アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

ブックを開く



CSVファイルを読む

  
  CSVを読む方法は、CSVファイルの読み込みで紹介済みです。
  
  でも、まともに読めない場合があるのです。
  
  CSVはデータとデータがカンマ(,)で区切られているのですが、データの中にカンマ(,)が
  入っていたらどうしましょう。
  
  データの中にカンマ(,)がある場合は、データをダブルクォーテーション(")で
  囲んであります。
  
  aaa,bbb,ccc,"ddd,ddd",eee
  
  こんな形になります。
  
  これでも正しく読めるようにしたのが以下のサンプルです。
  
Sub CSV_Read()

    Dim Open_Workbook_Name                          As String
    Dim Prompt                                      As String
    Dim FileNamePath                                As Variant

    FileNamePath = Application.GetOpenFilename("CSV ファイル (*.csv),*.csv", , Prompt)

    If FileNamePath = False Then
        Exit Sub
    End If

    CSVRead FileNamePath, Open_Workbook_Name

End Sub


Sub CSVRead(FileNamePath, Open_Workbook_Name)

    Dim Open_Workbook                   As Workbook
    Dim textline                        As String
    Dim csvline()                       As String
    Dim Rowcnt                          As Integer
    Dim TextObject                      As Object

    Const ForReading = 1
    Const ForWriting = 2

    Rowcnt = 1
    
    Workbooks.Add
    Set TextObject = CreateObject("Scripting.FileSystemObject"). _
                                   OpenTextFile(FileNamePath, ForReading, False)

    Do While TextObject.AtEndOfStream < > True
    
        '1行読み込みます
        textline = lineFormat(TextObject.ReadLine)
        
        csvline() = Split(textline, vbBack)
    
        Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = csvline()
        
        Rowcnt = Rowcnt + 1
    Loop
    
    TextObject.Close
    
    Set TextObject = Nothing

    Open_Workbook_Name = ActiveWorkbook.Name
    
End Sub


Function lineFormat(ByVal line As String) As String

        Dim format_line                 As String
        Dim i                           As Integer
        Dim flg                         As Integer

        format_line = ""
        flg = 0
        
        If InStr(line, """") > 0 Then

            For i = 1 To Len(line)

                If Mid(line, i, 1) = """" Then
                    flg = 1 - flg
                ElseIf flg = 0 And Mid(line, i, 1) = "," Then
                    format_line = format_line + vbBack
                Else
                    format_line = format_line + Mid(line, i, 1)
                End If

            Next

        Else

            format_line = Replace(line, ",", vbBack)

        End If

        lineFormat = format_line

End Function

  StartKitsParts.xls をダウンロードして、ご使用ください。




Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.