• 締切済み

Excelシートを分割してcsvに出力するVBA

すいませんが、ご教示願います。 パソコンExcelのVBAです。 Excelファイルシートの24,000行あるデータを、 任意に選択した範囲(例えば2行目から3,000行目)をcsvデータに出力する VBA構文が知りたいです。 どなたかおわかりになりますでしょうか。

みんなの回答

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.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

herotwinco
質問者

お礼

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

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

自ブックの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

herotwinco
質問者

お礼

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

関連するQ&A

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------

  • エクセルの任意のシートをcsv出力するVBScript

    c:\a01.xls という名前のエクセルファイルがあり、sheet1、sheet2、sheet3 というシートの構成とします。それぞれのシートには何件かの入力があるとします。 この エクセルファイルから Sheet2 の シートのデータを c:\csv01.csv にCSV出力するには どのような test.vbs を作成したらよいのでしょうか? 教えてください。

  • エクセルVBAで複数CSVを抽出、ブックへの出力

    エクセルVBAで複数のCSVファイルからファイル名と 任意のセル8箇所を自作した計算シートに抽出。 別ブックにCSVファイル名 計算結果4種類を出力する。 というvbaを作りたいのですがどうすればよいでしょうか? CSVファイルが1700ほどあり、大変困っています。 申し訳ありませんがご教授願います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーー 詳細 CSV読み込みセル8箇所:B2、D2、F2~P2 自作計算シートへの貼り付け箇所:G3~G10 計算結果セル抽出箇所:C8~F4 出力の理想系は CSVファイル名、計算結果1、2、3、 4の順で file01 ○○ ○○ ○○ ○○ file02 ○○ ○○ ○○ ○○ ・・・ ・・ のようになれば大変嬉しいです。 お力をお貸しください よろしくお願いいたします。

  • csvのデーターファイルから任意の行をエクセルファイルへ入力するエクセ

    csvのデーターファイルから任意の行をエクセルファイルへ入力するエクセルVBA が上手くできません。 6列2000行のcsvデーターのテキストファイルの作成は、色々な参考書があり成功しました。次に このcsvのデーターファイルから任意の複数行をシート4などの任意のワークシートの任意の場所に60行程度をインポートして、この60行の数値データーを加工しようとしていますが、入力が上手くできません。数値データーの加工のプログラムは一応できているため、その様式にあわせて、所定の場所にデーターを入れる必要が有ります。 1列目には日付(シリアルの数値にしています)、その他はすべて数値(LONG型)です。エクセルは2003を使用しています。 VBAの初心者です。宜しくお願いいたします。

  • VBA csvを100万行ずつ各シートに読み込み

     今晩は、質問させていただきます。どうぞよろしくお願いいたします。 環境:Win7 64bit SP1、 エクセル2010 でございます。  「1000万行×3列」のCSVファイルデータを、100万行ずつ シート1~10に振り分けたく悩んでおります。 ・エクセルは100万行しかありませんので、「一旦開いてから各シートに分割」という方法が使えませんし、 ・またReadLineいたしますと(1行ずつの方法しか存じませんので)時間がかかりそうですし、 何よりcsvファイルのカンマ記号も含め1行全てが、エクセルのひとつのセルに入ってしまうのでは、などと考えております。  何か良さそうな方法を思いつかれる方はおられませんでしょうか。 もしお詳しい方がいらっしゃいましたら,どうぞよろしくお願いいたします。

  • フィルター可視データのCSV出力について

    いつも助けてもらっています。 EXCELのVBAにて、 タイトル等の不要な行を削除した上で、 データが入っている行全てをCSVファイルに出力する マクロを作って使っています。 全件をそのままCSVファイルに出力するのは問題ないのですが、 オートフィルター(手操作)にてヒットしたデータのみを CSVファイルに出力したいです。 ネットでいろいろと調べると、 可視データを他のシートにコピーして・・・やる、 というやり方しか見つかりませんが、 他のシートにコピーしないで行う方法はないですか? (マクロで実行する場合です) もし可能であるならば・・・ コードの記述でなくても、 こんなやり方・・・とか、 どこか参考になる情報でもリンクしてもらえると 助かります。 よろしくお願い致します。

  • EXCELでCSVファイルの読込み

    VBA超初心者でとても困っています。 仕事でEXCELのVBAを使って 現在開いているシートの中に 1つのCSVファイルからデータを読み込むのですが CSVデータの2行目をEXCELのC2へ。 4~10行目までを、EXCELのB5~B14へ マクロを使い、ボタン一つで自動入力させたいのです・・・。 Line Input も、やり方が悪いのかうまくいきません。 ヒントとなるやり方があればぜひ教えてください。

  • VBAマクロでCSV出力

    はじめまして、よろしくお願いします。 ExcelのVBAマクロで 特定のセルの範囲を「シート名.csv」で出力するようなプログラムを書きたいです。 例)シート名「TEST」内にあるマクロボタンを押すと  A1:A10のセルの内容が「TEST.csv」(アスキー形式ならなんでも)  に出力される。 どういうやり方があるか、お勧めのサイト等、 ご教授いただけないでしょうか? 以上、よろしくお願いいたします。

  • エクセルVBA 一枚のシートにcsvファイルをまとめる 

    教えてください。 以下の処理をしたいのですが、どのようにしたらよいか教えてください。 (1)デスクトップの1つのフォルダに格納しているcsvファイルを全て開く(ファイルがいくつあるかはその時によって違う) (2)開いたcsvファイルのデータがある行を全て選択して、開いてあるデータベースとしてあるシートに貼り付ける。 (これをcsvファイル数分実行する) (3)コピーの終わったcsvファイルを全て閉じる どうしても(2)の処理がわからず、どなたか教えてください。 よろしくお願い致します。

  • CSV出力に関して

    パソコンで「CSV出力が完了しました」と表示が出ているのに、データがどこにも反映されていません。 CSV出力した内容を、Excelのシートに移したいのですが、どのような手順で行えば良いのでしょうか?

専門家に質問してみよう