シートをCSVファイルへ保存する例を示す。
ファイル名の取得、上書きの確認、ファイルが開けることの確認、
書き込みを行っている。
Print #で、1行ずつ(Ln)、ファイルに書き込んでいる。
1つの文字列と認識できるよう、文字列を判別して""で囲んでいる。
Sub CsvWrite()
Dim FilDlg As FileDialog
Dim SfsObj As Object
Dim PasNom As String
Dim SavNom As Variant
Dim Ln As Variant
Dim ir As Long
Dim MaxRow As Long
Dim Mc As Long
Dim ic As Long
Dim MaxClm As Integer
Dim jCncel As Integer
Dim jer As Integer
Dim i As Long
Dim j As Integer
MaxRow = ActiveSheet.UsedRange.Rows.Count
MaxClm = ActiveSheet.UsedRange.Columns.Count
'保存するファイル名を取得する
PasNom = ThisWorkbook.Path
If Right(PasNom, 1) <> "\" Then PasNom = PasNom & "\"
SavNom = PasNom & "test.csv" 'デフォルトファイル名
SavNom = Application.GetSaveAsFilename( _
Title:="保存先の指定", _
InitialFileName:=SavNom, _
FileFilter:="csv形式,*.csv")
If SavNom = False Then
MsgBox "cancelが押されました"
Exit Sub
ElseIf Dir(SavNom) <> "" Then
If MsgBox("同名のファイルが存在します。上書きしますか?", vbYesNo) = _
vbNo Then Exit Sub
End If
On Error Resume Next '開けることの確認
Err.Clear
Open SavNom For Append As #1
Close #1
If Err.Number > 0 Then
MsgBox "ファイルが開けません"
jer = 1
Else
jer = 0
End If
On Error GoTo 0
If jer = 1 Then Exit Sub
Open SavNom For Output As #1
For i = 1 To MaxRow
Mc = 0
For j = MaxClm To 1 Step -1
If Cells(i, j) <> "" Then
Mc = j
Exit For
End If
Next j
Select Case Mc
Case Is < 1
Print #1, vbCrLf
Case 1
If VarType(Cells(i, 1).Value) = vbString Then
Print #1, """" & Replace(Cells(i, 1), vbLf, vbNewLine) & """"
Else
Print #1, Replace(Cells(i, 1), vbLf, vbNewLine)
End If
Case Else
Ln = ""
For j = 1 To Mc - 1
If VarType(Cells(i, j).Value) = vbString Then
Ln = Ln & """" & Replace(Cells(i, j), vbLf, vbNewLine) & ""","
Else
Ln = Ln & Replace(Cells(i, j), vbLf, vbNewLine) & ","
End If
Next j
If VarType(Cells(i, Mc).Value) = vbString Then
Ln = Ln & """" & Replace(Cells(i, Mc), vbLf, vbNewLine) & """"
Else
Ln = Ln & Replace(Cells(i, Mc), vbLf, vbNewLine)
End If
Print #1, Ln
End Select
Next i
Close #1
End Sub