|
テーブル さん、こんばんわ。
>何か私がまちがっていたみたいです。
書式だけ設定してあるセルも出力対象になります。csvも同様のはずです。
が、必要ないと思われる部分は出力しない方法もあるので書いておきます。
(組んでる間にレスがついてました)
Sub test()
Dim Cmax As Integer, Rmax As Long, CC As Integer, RR As Long
Dim Cfile As String
Dim ws As Worksheet
Set ws = ActiveSheet '現在表示中のシートが対象
'
'NewFile
With ws.Parent
If .Path = "" Then
'初めての保存の時はカレントフォルダに
Cfile = .Name & ".csv"
Else
'保存されたブックの時はブックと同じフォルダに
Cfile = .FullName
Cfile = Left(Cfile, Len(Cfile$) - 3) & "csv"
End If
End With
'出力範囲
With ws.UsedRange
Cmax = .Cells(.Count).Column
Rmax = .Cells(.Count).Row
End With
'書式のみ設定してあるセルもUsedRangeに含まれるので、データのある右下端を求める
With Application.WorksheetFunction
'最終列をチェックする
For CC = Cmax To 2 Step -1
If .CountA(ws.Columns(CC)) > 0 Then
Cmax = CC: Exit For
End If
Next
'最終行をチェックする
For RR = Rmax To 2 Step -1
If .CountA(ws.Rows(RR)) > 0 Then
Rmax = RR: Exit For
End If
Next
End With
'
With ws
Open Cfile For Output As #2
For RR = 1 To Rmax
For CC = 1 To Cmax
If CC > 1 Then Print #2, ",";
'数字は”でくくらない場合などはここで分岐
Print #2, Chr(34) & .Cells(RR, CC).Value & Chr(34);
Next
Print #2, "" '改行
Next
Close #2
End With
'
Set ws = Nothing
End Sub
こんな感じです。行内、列内に値を含む最後を探してから書き出しています。
あと、変数DCは使い忘れです。書き出しの時のChr(34)を置き換えようとして忘れていました、すみません。ので、今回は省略してあります。
|
|