Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


23408 / 76732 ←次へ | 前へ→

【58690】Re:CSV出力について
発言  kanabun  - 08/11/4(火) 20:37 -

引用なし
パスワード
   ▼お困りです さん:

>ここでエラーが出たのですが、”パス名が無効です”
>構文は→Open CSVファイルパス For Output As #1のところです。
>ご迷惑掛けますがご指導お願いします。

あれ、 CSVファイルパス という変数に CSVファイルパスを代入しないと
ダメですよ〜〜

UserFormに CommandButtonを2つおいて、↓を実験してみてください。

'------------------------------------------- UserForm
Option Explicit

'範囲を新規BookにCopyして xlCSV形式で保存
Private Sub CommandButton1_Click()
  Dim Target As Range
  
  Set Target = ActiveSheet.UsedRange.Resize(, 8)
  Target.Select
  If MsgBox("この範囲をCSV保存しますか?", vbOKCancel) _
                 = vbCancel Then Exit Sub
  
  Dim SaveFile ' CSVファイルパス
  SaveFile = CreateObject("WScript.Shell"). _
       SpecialFolders("DeskTop") & "\T123.Csv"
  SaveFile = Application.GetSaveAsFilename(SaveFile, "CSV,*.csv")
  If VarType(SaveFile) = vbBoolean Then Exit Sub
  
  '(1)新規Bookをシート枚数1枚で 追加する。
  Dim SaveCount&
  Dim NewBook As Workbook
  With Application
    SaveCount = .SheetsInNewWorkbook
    .SheetsInNewWorkbook = 1
    Set NewBook = Workbooks.Add
    .SheetsInNewWorkbook = SaveCount
  End With
  
  '(2) 元のBookの指定シートのUsedRange.Resize(,8) の範囲を _
    Copyして、新規BookのSheets(1).Range("A1")に貼り付ける。
  Target.Copy NewBook.Sheets(1).Range("A1")
  
  '(3)新規BookをCSV形式で保存する
  With NewBook
    .SaveAs SaveFile, xlCSV, Local:=True
    .Save
    .Close
  End With
  MsgBox "CSV形式で保存しました", , SaveFile
  
  Set Target = Nothing
  Set NewBook = Nothing
End Sub


'範囲をクリップボード経由で CSV出力
Private Sub CommandButton2_Click()
  Dim Target As Range
  
  Set Target = ActiveSheet.UsedRange.Resize(, 8)
  Target.Select
  If MsgBox("この範囲をCSV保存しますか?", vbOKCancel) _
                 = vbCancel Then Exit Sub
  
  Dim CsvFile ' CSVファイルパス
  CsvFile = CreateObject("WScript.Shell"). _
       SpecialFolders("DeskTop") & "\TCB123.Csv"
  CsvFile = Application.GetSaveAsFilename(CsvFile, "CSV,*.csv")
  If VarType(CsvFile) = vbBoolean Then Exit Sub
  
  
  '指定範囲をClipboardにCopyして、 _
    TAB区切りをComma区切りに直して出力
  Dim io As Integer
  io = FreeFile()
  Open CsvFile For Output As io
  Target.Copy
  With New DataObject
    .GetFromClipboard
    Print #io, Replace(.GetText, vbTab, ",");
  End With
  Close io
  Application.CutCopyMode = True
  MsgBox "クリップボード経由で保存しました", , CsvFile
  
  Set Target = Nothing

End Sub

※前述のとおり、
 CommandButton2 のクリップボード経由の方は、セルの表示形式のまんま
 出力するものですから、セルの値が 数値データで
 #,##0 のような書式設定がしてあると、 カンマ付きで出力されます。
 CSVファイルは データの区切りがカンマなので、読み取り不能なファイル
 になってしまいます。
 カンマ付き表示のセルがあるときは

>    Print #io, Replace(.GetText, vbTab, ",");


    Print #io, Replace(Replace(.GetText, ",",""), vbTab, ",");

としてください。

0 hits

【58669】CSV出力について お困りです 08/11/4(火) 14:05 質問
【58671】Re:CSV出力について kanabun 08/11/4(火) 14:29 発言
【58672】Re:CSV出力について お困りです 08/11/4(火) 15:02 質問
【58675】Re:CSV出力について kanabun 08/11/4(火) 15:20 発言
【58684】Re:CSV出力について お困りです 08/11/4(火) 16:57 質問
【58685】Re:CSV出力について アルファ 08/11/4(火) 17:12 発言
【58686】Re:CSV出力について kanabun 08/11/4(火) 17:37 発言
【58689】Re:CSV出力について お困りです 08/11/4(火) 19:40 質問
【58690】Re:CSV出力について kanabun 08/11/4(火) 20:37 発言
【58734】Re:CSV出力について お困りです 08/11/6(木) 10:35 お礼
【58747】Re:CSV出力について お困りです 08/11/6(木) 14:30 お礼

23408 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free