| 
    
     |  | CSVReadFSOは、Lf改行のTextをシートに読み込みます Conversionは、Lf改行をCrLfに変換します
 
 Option Explicit
 
 Public Sub CSVReadFSO()
 
 '  Lfの改行コードのCSVをシートに読み込み
 
 Dim vntFileName As Variant
 Dim strFilter As String
 Dim wksWrite As Worksheet
 Dim lngRow As Long
 Dim lngCol As Long
 Dim vntField As Variant
 Dim strBuff As String
 Dim strProm As String
 Dim objFso As Object
 Dim objFileStr As Object
 Const ForReading = 1
 
 'フィルタ文字列を作成
 strFilter = "CSV File (*.csv),*.csv"
 '「ファイルを開く」ダイアログを表示
 vntFileName _
 = Application.GetOpenFilename(strFilter, 1)
 If VarType(vntFileName) = vbBoolean Then
 strProm = "マクロがキャンセルされました"
 GoTo Wayout
 End If
 
 '書き込むシートを設定
 Set wksWrite = ActiveSheet
 '書き込み開始行を設定
 lngRow = 1
 '書き込み開始列を設定
 lngCol = 1
 
 'FSOのオブジェクトを取得
 Set objFso = CreateObject("Scripting.FileSystemObject")
 '指定ファイルを読み込みモードでOpen
 Set objFileStr = objFso.OpenTextFile(vntFileName, ForReading)
 
 With objFileStr
 'ファイルの終り迄繰り返し
 Do Until .AtEndOfStream
 'ファイルから1行読み込み
 strBuff = .ReadLine
 'CSVをフィールドに分割
 vntField = Split(strBuff, ",")
 '指定シートの指定行列位置について
 With wksWrite.Cells(lngRow, lngCol)
 'フィールドの書き込み
 .Resize(, UBound(vntField) + 1).Value = vntField
 End With
 '書き込み行位置を更新
 lngRow = lngRow + 1
 Loop
 'ファイルをClose
 .Close
 End With
 
 strProm = "処理が完了しました"
 
 Wayout:
 
 Set objFileStr = Nothing
 Set objFso = Nothing
 Set wksWrite = Nothing
 
 MsgBox strProm, vbInformation
 
 End Sub
 
 Public Sub Conversion()
 
 '  改行コード(Lf→CrLf)の変換
 
 Dim dfn As Integer
 Dim vntInFile As Variant
 Dim vntOutFile As Variant
 Dim strFilter As String
 Dim strBuff As String
 Dim strProm As String
 Dim objFso As Object
 Dim objFileStr As Object
 Const ForReading = 1
 
 'フィルタ文字列を作成
 strFilter = "CSV File (*.csv),*.csv"
 '「ファイルを開く」ダイアログを表示
 vntInFile = Application.GetOpenFilename(strFilter, 1)
 If VarType(vntInFile) = vbBoolean Then
 strProm = "マクロがキャンセルされました"
 GoTo Wayout
 End If
 
 '「ファイルを保存」ダイアログを表示
 vntOutFile = Application.GetSaveAsFilename(vntOutFile, strFilter, 1)
 If vntOutFile = False Then
 strProm = "マクロがキャンセルされました"
 GoTo Wayout
 End If
 
 If vntInFile = vntOutFile Then
 strProm = "入力側と出力側のファイル名を別にして下さい"
 GoTo Wayout
 End If
 
 'FSOのオブジェクトを取得
 Set objFso = CreateObject("Scripting.FileSystemObject")
 '指定ファイルを読み込みモードでOpen
 Set objFileStr = objFso.OpenTextFile(vntInFile, ForReading)
 
 '出力ファイルをOpen
 dfn = FreeFile
 Open vntOutFile For Output As dfn
 
 With objFileStr
 'ファイルの終り迄繰り返し
 Do Until .AtEndOfStream
 'ファイルから1行読み込み
 strBuff = .ReadLine
 'ファイルに1行出力
 Print #dfn, strBuff
 Loop
 'ファイルをClose
 .Close
 Close dfn
 End With
 
 strProm = "処理が完了しました"
 
 Wayout:
 
 Set objFileStr = Nothing
 Set objFso = Nothing
 
 MsgBox strProm, vbInformation
 
 End Sub
 
 '「CSVReadFSO」で使用
 Public Function GetReadFile(vntFileNames As Variant, _
 Optional strFilePath As String, _
 Optional blnMultiSel As Boolean _
 = False) As Boolean
 
 Dim strFilter As String
 
 'フィルタ文字列を作成
 strFilter = "CSV File (*.csv),*.csv," _
 & "Text File (*.txt),*.txt," _
 & "CSV and Text (*.csv; *.txt),*.csv;*.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, 1, , , blnMultiSel)
 If VarType(vntFileNames) = vbBoolean Then
 Exit Function
 End If
 
 GetReadFile = True
 
 End Function
 
 '「CSVReadFSO」、「Conversion」で使用
 Public Function GetWriteFile(vntFileName As Variant, _
 Optional strFilePath As String) As Boolean
 
 Dim strFilter As String
 Dim strInitialFile As String
 
 'フィルタ文字列を作成
 strFilter = "CSV File (*.csv),*.csv," _
 & "Text File (*.txt),*.txt"
 '既定値のファイル名を設定
 strInitialFile = vntFileName
 '読み込むファイルの有るフォルダを指定
 If strFilePath <> "" Then
 'ファイルを開くダイアログ表示ホルダに移動
 ChDrive Left(strFilePath, 1)
 ChDir strFilePath
 End If
 '「ファイルを保存」ダイアログを表示
 vntFileName _
 = Application.GetSaveAsFilename(vntFileName, strFilter, 1)
 If vntFileName = False Then
 Exit Function
 End If
 
 GetWriteFile = True
 
 End Function
 
 |  |