- 締切済み
Excelシートを分割してcsvに出力するVBA
すいませんが、ご教示願います。 パソコンExcelのVBAです。 Excelファイルシートの24,000行あるデータを、 任意に選択した範囲(例えば2行目から3,000行目)をcsvデータに出力する VBA構文が知りたいです。 どなたかおわかりになりますでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。お邪魔します。 まず、誤解されている方が非常に多いので説明しておきますが、 csvファイルといっても一様に統一された規格がある訳ではなくて、 殆どローカルルールで運用されるものです。 (共通語を持たない方言に喩えられることが多いですが、 言語で喩えるなら"ヨーロッパ語"ほどの曖昧さを持ったものです つまり、通じない、場面が容易に想像できる"csv"なのです) 引用符の扱い、 引用符(で挟む単セル)内のカンマの扱い、 引用符(で挟む単セル)内の改行の扱い、 引用符(で挟む単セル)内の引用符の扱い、 等、確認できないと、テキストデータとして編集することは不可能です。 "csv'に'出力する" とか "csvデータ'に'出力する" という言葉通りだと、 一般には「テキストデータとして編集した後、テキストファイルを出力する」 という意味になるのだと思いますが、 その場合は、ローカルルールを詳細に説明しておかないと 誰にも手が付けられない質問ということになってしまいます。 「Excelシートの一部をcsv形式で保存する」 ということだと、似ているようでも全然意味が違っていて、 Excelのcsv保存の機能を使って(Excelのcsv保存の仕様に合わせて) ファイルを作成する、とうことになります。 その場合のサンプルを以下挙げてみます。 行区間指定の一例として対話型で書いてあります。 「★」の行までの記述は専ら、 先頭行(nTop)最終行(nBtm)を決める為の記述です。 「シート名 要 指定 ■」の部分は、 運用に合わせて正しいシート名を指定してください。 Sub Re8138672() Const 出力行数初期設定 As Long = 3000 ' 指定変更可 □ Dim rtn Dim sFn As String Dim nTop As Long Dim nBtm As Long With Sheets("Sheet1") ' シート名 要 指定 ■ With .UsedRange nTop = .Row nBtm = .Rows(.Rows.Count).Row End With rtn = Application.InputBox(Prompt:="出力する範囲の先頭行を数字で指定" _ & vbLf & vbLf & "先頭行 ↓", _ Title:="csv出力:行指定1", Default:=nTop, Type:=1) If rtn <> "False" Then nTop = rtn Else Exit Sub End If If nBtm > nTop + 出力行数初期設定 - 1 Then nBtm = nTop + 出力行数初期設定 - 1 rtn = Application.InputBox(Prompt:="出力する範囲の最終行を数字で指定" _ & vbLf & vbLf & "先頭行 : " & nTop _ & vbLf & "最終行 ↓", _ Title:="csv出力:行指定2", Default:=nBtm, Type:=1) If rtn <> "False" Then nBtm = rtn Else Exit Sub End If ' ' ★ sFn = "Title_" & nTop & "―" & nBtm & ".csv" Application.ScreenUpdating = False Application.DisplayAlerts = False .Rows(nTop & ":" & nBtm).Copy Destination:=Workbooks.Add.Sheets(1).Cells(1) End With ActiveSheet.SaveAs Filename:=sFn, FileFormat:=xlCSV ActiveWorkbook.Close False Application.DisplayAlerts = True Application.ScreenUpdating = True MsgBox Prompt:="以下のファイル名でcsvファイルを出力しました" _ & vbLf & vbTab & sFn, _ Buttons:=vbInformation, Title:="csv出力:完了" End Sub
- mt2008
- ベストアンサー率52% (885/1701)
自ブックのSheet1の2行目から3000行目をSample01.csvと言うファイル名で保存するサンプルです。 Sub Sample() Workbooks.Add ThisWorkbook.Sheets("Sheet1").Rows("2:3000").Copy Destination:=Range("A1") ActiveWorkbook.SaveAs Filename:="C:\Temp\Sample01.csv", FileFormat:=xlCSV ActiveWindow.Close False End Sub
お礼
ありがとうございました! テストしたところ、csvで出力できてもデータがコピーされませんでした。 短かな構文なので何とかカスタマイズするなどして活用したいです。
お礼
詳細にご説明いただき、ありがとうございました! ご丁寧に私の不勉強を指摘いただき、ありがたいです。 テストしたところ、私の思うとおりにcsvデータが出力できました。 おっしゃるように、「テキストデータを編集した後、テキストファイルを出力する」でした。