| Excel Tips by pPoy |
| Macro | 全シートをシート別に CSV ファイルとして出力 《FileSystemObject》 (Excel97,Excel2000,Excel2002) |
ワークシートにデータベース形式で作成されている表を、それぞれのシート名をファイル名にして、 CSV 形式のファイルに出力するマクロです。 |
|
|---|---|---|---|
≪準備≫
右のような Excel Book があります。 これらのシートを順番に、 csv ファイルとして出力します。 シート名はそのままファイル名として 使用します。 データは、A1 セルから始まり、途中に空白の行や列が入らないことが条件です。 出力用の、「 C:\Test」 フォルダを予め作っておいてください。中にあるシート名と同名の CSV ファイルは無条件で上書きされます。 必要なファイルは退避しておいてください。 以下のコードを標準モジュールに貼り付けてください。 | |||
Sub CreateTxtDataS()
'全シートを1シート毎にカンマ区切りcsvファイルとして出力する
'シート名はファイル名として使用
'2005/02/13 pPoy
Dim fso As Object 'FileSystemObject
Dim ffile As Object 'TextStream
Dim myData As Range 'データ領域格納
Dim myTmp As String '出力するデータ
Dim txtName As String 'csvファイル名=シート名
Dim w As Worksheet
Dim i As Long, j As Long
Const myPath = "C:\Test" 'csvファイルのパス
Set fso = CreateObject("Scripting.FileSystemObject")
For Each w In Worksheets
'シート名をファイル名にセット
txtName = w.Name & ".csv"
'csvファイル作成
Set ffile = _
fso.CreateTextFile(myPath & "\" & txtName, True)
'A1から始まる全データ範囲取得
Set myData = w.Range("A1").CurrentRegion
'範囲内の全行数ループ
For i = 1 To myData.Rows.Count
myTmp = ""
'範囲内の1行ループ
For j = 1 To myData.Columns.Count
'データ格納
If myTmp = "" Then
'最初のデータ
myTmp = myData(i, j)
Else
'残りのデータはカンマでつなげる
myTmp = myTmp & "," & myData(i, j)
End If
Next j
'テキストファイル出力
If myTmp <> "" Then
ffile.WriteLine myTmp
End If
Next i
Next w
MsgBox "処理終了〜!", vbOKOnly
'変数開放
ffile.Close: Set myData = Nothing
Set ffile = Nothing: Set fso = Nothing
End Sub
|
|
≪使用方法≫ メニューバーの 「ツール」−「マクロ」−「マクロ」 で、マクロの選択画面から、「CreateTxtDataS」 を実行してください。 ≪結果≫
「 C:\Test」 フォルダ内に、ワークシートの数だけ、 CSV ファイルが出来上がります。 ![]() メモ帳で開くとこんな感じです。 勿論そのまま Excel で開けます。 |
≪注意≫
|
Copyright(C) pPoy 2005-2010