dポイントプレゼントキャンペーン実施中!

すいませんが、ご教示願います。
パソコンExcelのVBAです。

Excelファイルシートの24,000行あるデータを、
任意に選択した範囲(例えば2行目から3,000行目)をcsvデータに出力する
VBA構文が知りたいです。

どなたかおわかりになりますでしょうか。

A 回答 (2件)

こんにちは。

お邪魔します。

まず、誤解されている方が非常に多いので説明しておきますが、
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
    • good
    • 0
この回答へのお礼

詳細にご説明いただき、ありがとうございました!
ご丁寧に私の不勉強を指摘いただき、ありがたいです。
テストしたところ、私の思うとおりにcsvデータが出力できました。
おっしゃるように、「テキストデータを編集した後、テキストファイルを出力する」でした。

お礼日時:2013/06/18 23:47

自ブックの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
    • good
    • 0
この回答へのお礼

ありがとうございました!
テストしたところ、csvで出力できてもデータがコピーされませんでした。
短かな構文なので何とかカスタマイズするなどして活用したいです。

お礼日時:2013/06/18 23:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!