エクセルのシートデータをVBAでCSV形式で保存する方法

このQ&Aのポイント
  • エクセルのシートのデータをVBAを使ってCSV形式で保存すると文字化けしてしまう問題があります。手動で「名前を付けて保存」すると文字化けしないので、文字化けしないようにするためにはどうしたら良いか教えてください。
  • エクセルのシートのデータをVBAを使ってCSV形式で保存すると文字化けしてしまいます。手動で保存すると文字化けしないので、文字化けしないようにするための方法を教えてください。
  • エクセルのシートのデータをVBAを使ってCSV形式で保存したいのですが、文字化けする問題があります。文字化けしないようにする方法を教えてください。
回答を見る
  • ベストアンサー

エクセルのシートのデータをVBAを使ってCVS形式で保存したいのですが、文字化けしないようにするにはどうしたらいいでしょうか?

エクセルのシートのデータをVBAを使ってCVS形式で保存したいのですが、文字化けしてしまいます。手動で「名前を付けて保存」すると文字化けしません。文字化けしないようにするにはどうしたらいいでしょうか? どなたかお教えいただきたく、よろしくお願いします。 ---------------------------------------------------------------------- Sub test5() Dim aaa As String Dim fname As Variant aaa = Format(Now, "YYMMDD") fname = Application.GetSaveAsFilename(InitialFileName:=aaa & ".csv", fileFilter:="csvファイル(*.csv), *.csv") If fname = False Then Exit Sub '保存 Worksheets("sheet1").SaveAs fname End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • pulsa
  • ベストアンサー率57% (34/59)
回答No.2

こ、これはですね・・・ 見た方が早そうなので手順を追って下さい 複数シートがあるファイルでご自身のコードを実行してください このマクロ実行直後に、手動で名前を付けて保存を表示してみてください この画面のファイル名の所はどうなっていますか? その下のファイルの種類はどうなっていますか? イメージとしては、エクセルファイルの拡張子を単に「.csv」と変更したのと同じ状態になっています 文字化けしたファイルをメモ帳で見ると、ちょうどエクセルファイルをメモ帳で開いたときと状況が似ていると思います 理屈というか、なんでこうなるのかと言うと まず GetSaveAsFilename は、ご存知の通りダイアログを出す"だけ"で、保存されません で、SaveAs の 引数の FileFormat >FileFormat 省略可能です。バリアント型 (Variant) の値を使用します。ファイルを保存するときのファイル形式を指定します。指定できる形式については、FileFormat プロパティを参照してください。既存のファイルでは、指定された最後のファイル形式が既定のファイル形式です。新しいファイルでは、現在使用されている Excel のバージョンでのファイル形式が既定のファイル形式です。 つまり、今のファイル形式が指定されています 作業中のファイルは"まだ保存されていない"ので、『エクセル形式で保存』が、上で言うところの規定のファイル形式です これに、"080606.csv"がファイル名と設定されて保存する事になるので、実験で出た状態 『080606.csv というファイル名のエクセルファイル』が出来上がります 試しに文字化けしたファイルをエクセルで開いて見てください 今度は逆に、普通に開けると思います しかもこのファイルは、シートも保持しています CSVファイルではありえないですよね? つまり >Worksheets("sheet1").SaveAs fname は Worksheets("Sheet1").SaveAs fname, xlCSV となります 因みに Application.Dialogs(xlDialogSaveAs).Show Format(Now, "YYMMDD") & ".csv", xlCSV だけで、目的の動作が可能です 今回は示されたコードを何回か試したので、妙な事は言ってないと思います^^;

hanadiman5
質問者

お礼

pulsaさん 今回もご回答いただき、ありがとうございます。 引数の指定が足りなかったということですね。 application.GetSaveAsFilenameのapplication.をsheetにできればいいのかと思ってました(できなかったですけど。。。) >Application.Dialogs(xlDialogSaveAs).Show Format(Now, "YYMMDD") & ".csv", xlCSV ↑↑ saveasのダイアログをcsvフォーマットで表示するということですね。 ()が規定の名前になるということですね。 今回もまことにありがとうございました。

その他の回答 (1)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

'保存 >Worksheets("sheet1").SaveAs fname 引数、FileFormatをセットしてくだされ。 Worksheets("Sheet1").SaveAs fname, FileFormat:=xlCSV   以上。  

hanadiman5
質問者

お礼

onlyromさん ありがとうございます。 うまくいきました。 format形式を指定するのですね。 どうもありがとうございました。

関連するQ&A

  • エクセルVBA Application.GetSaveAsFilenameでのフォルダー名指定

    いつも大変お世話になりありがとうございます。 早速ですが、教えてください。 以下のマクロでファイル名を指定して保存させようと思うのですが、デフォルトで表示するフォルダーをたとえば、Cドライブの「AAAAA」という指定はできますでしょうか? また、そのパソコンに「AAAAA」というフォルダーが無かったら、作るようにしたいのですがどう記述すればよいのでしょうか? Sub test() Dim aaa As String aaa = Format(Now, "MMDDHHmm") FName = Application.GetSaveAsFilename(InitialFilename:=aaa & ".csv", FileFilter:="CSVファイル(*.csv), *.csv") '以下略 End Sub

  • Wordの名前を付けて保存のマクロを教えてください

    いつもお世話になっています。 名前を付けて、特定のフォルダに保存したいのですが、.GetSaveAsFilenameのところで 「メソッドまたはデータ メンバが見つかりません。」のエラーがでてうまく動きません。 何処が間違っているのか教えてください。よろしくお願いします。 元のデーターは、別のフォルダに入っていて、その名前を取得したいです。 しかし、その名前の修正をしたいときもあるので、確認して保存したいです。 ご教授お願いします。 SUB test() Dim fname As String Dim SF As String SF = "\\osaka\PCBackup\" fname = Application.GetSaveAsFilename(SF, _ FileFilter:="wordファイル,(*.doc),*.docx") ActiveDocument.SaveAs Filename:=fname End Sub

  • エクセルVBA【ワークシートのコピー】について

    以下のVBA記述で、とあるエクセルファイルのシートをCSV化しようとしております。記述の場合、すべてのワークシートが対象となっていますが、10個くらいあるWorkSheetの【sheets(8)】のみを対象としたいのですが、どのようにしたら良いのでしょうか? お手数ですがご教授下さい。 Sub test() Dim sh As Worksheet Dim fname As String Application.ScreenUpdating = False For Each sh In ActiveWorkbook.Worksheets fname = "C:\temp\" & sh.Name & ".csv" sh.Copy With ActiveWorkbook .SaveAs Filename:=fname, FileFormat:=xlCSV .Close savechanges:=False End With Next sh Application.ScreenUpdating = True End Sub

  • CVSファイルで保存すると文字化けします

    こんにちは。 CVSファイルでエクセルのファイルを保存して、再度そのファイルを日本語が「???」と表示されてしまいます。 その文字化けを直す方法を教えていただけませんか? よろしくお願いします。

  • Excelで指定したフォルダに保存するマクロ

    Excel2003で、シートをコピーし別ファイルとして保存したいのですが 保存先のフォルダがネットワーク上にあります。 ファイル名は、指定したセルの値で保存されるようにします。 以下の記述でマクロ実行すると、シートは別ファイル(BOOK1)としてコピーされ ます。 名前をつけて保存ダイアログが開きますが、そのときにマイドキュメントが開き ます。 Private Sub CommandButton1_Click() ActiveSheet.Select ActiveSheet.Copy Dim Sname As String, Fname As Variant, Folname As String Folname = "ネットワーク上フォルダのフルパス" Sname = Range("O46").Value If Sname = "" Then Sname = ThisWorkbook.Name Fname = Application.GetSaveAsFilename(InitialFileName:=Sname, fileFilter:="Excel(*.xls), *.xls") If Fname <> False Then ActiveWorkbook.SaveAs Fname End Sub そもそもネットワーク上のフォルダを指定することはできないのでしょうか? マクロに関してはずぶの素人で、上記の記述は過去の質問などを参考に作成しま したので どこかに間違いがあるのかも知れませんが、間違いを特定することができません。 お手数おかけし申し訳ありませんが、ご教示のほどよろしくお願いします。 補足として、保存する際にダイアログを開きたい理由は以下の通りです。 ・保存先誤り防止(作業者が多数いて、使用するPCも違うため) ・ファイル名誤り防止(同じファイル名が存在しないかどうか確認)

  • 自動範囲指定のデータをCSVで保存したい。

    添付ファイルにあるようにデータ(量が変化します)があり、自動的に最後の行まで指定してその範囲をダイヤログボックスを表示させてCSVとして保存したい。 今特に問題がある点は、 ・データのやり取りが出来ない点 ・CSVとして保存できない。(上記の点においてブランクの表が作成される) 何卒宜しくお願い致します。 '現在開いているシートをCSVデータで保存する Public Sub call_RangeSaveCSV() Dim fPath As String Dim fName As String Dim rng As Range Dim folderPath As String Fldr = "ダウンロード" '現在開いているブック情報をファイル名にするため、変数に格納 fPath = ActiveWorkbook.path & "\" fName = Left(ActiveWorkbook.Name, InStrRev(ActiveWorkbook.Name, ".")) & "csv" Application.DisplayAlerts = False '現在選択しているセル情報をrngに格納 'Set Rng = Selection Set rng = Range("L6").CurrentRegion '新規ブック作成→rngをA1にコピー→CSV保存→CSV閉じる Workbooks.Add rng.Copy ActiveSheet.Range("A1") '■ここでエラーが返ってきます。ダイヤログボックスを出して任意の場所と名前を付けたいのですが。。 ActiveWorkbook.SaveAs FileName:=fPath & fName, FileFormat:="Sample.csv", FileFilter:="CSVファイル(*.csv),*.csv") ActiveWorkbook.SaveAs ActiveWindow.Close Application.DisplayAlerts = True End Sub

  • 【エクセルVBA】「ファイルを開く」のダイアログボックスの後に文字を追加したい

    【エクセルVBA】で、「ファイルを開く」の操作を複数回するので、 ダイアログボックスに例えば「ファイルを開く:ABC」というよう に、「ファイルを開く」の後に文字を追加したいのですが、 どうすれば良いでしょうか。 現在、下記のようなマクロですが、具体的にどうすれば良いか教えて下さい。 宜しく、お願いします。  Dim fname1 As String  fname1 = Application.GetOpenFilename( _    filefilter:="すべてのファイル,*.*")  If fname1 = "False" Then Exit Sub

  • シートだけを保存したいのですが?

    はじめましてマクロ初心者です。 検索しましたがわからなかったので、質問させていただきます。 保存をキャンセルすると新規ブックができてしまいます。 キャンセルした時に新規ブックを作りたくないのですが、教えてください。 Sub シート保存() Dim Answer3 Dim 既定ファイル名 As String Dim 保存ファイル名 As Variant Answer3 = MsgBox("本当に保存しますか?", vbYesNo) If Answer3 = vbYes Then Sheets("保存シート").Select Application.CutCopyMode = False Sheets("保存シート").Copy Else MsgBox ("キャンセルしました。") End If 既定ファイル名 = Range("V8") 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名) If 保存ファイル名 = False Then MsgBox "保存は中止されました。" Else ActiveWorkbook.SaveCopyAs 保存ファイル名 End If End Sub よろしくお願いします。

  • CSVファイルのエクセル取込(VBA)で小数三位が消える!?

    エクセルにCSVファイルから読み取りをするVBAで下記のように記述しています。 Sub CSV読取り Dim FName As Variant FName = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv") Open FName For Input As #1 For i = 1 To 400 Input #1, Columni ThisWorkbook.Sheets("CSV取得").Cells(i, "E").Value = Columni Next i Close #1 End Sub これでほとんどのデータ(数値や文字列の400件)をうまく読み取るのですが、どういう訳かデータが小数点以下第三位まである数値の場合、エクセルに取り込まれた段階で小数点以下第二位までに四捨五入されてしまうようです。 そのうえ、エクセルのセルの表示形式がそこだけ通貨(¥マーク付き)になっています。 なぜでしょうか? またどうしたら正しく小数3位まで読み取れるのでしょうか? CSVファイルをエクセル単純にエクセルで開けばちゃんと小数三位まであるのですが、データが横一列にカンマ区切り400件あるので256列しかないエクセルではすべてとりこめません。(だから上記のマクロで縦に変換してとりこんでいるのですが) 非常に困っています。

  • エクセル:シートを保存するマクロ

    あるエクセルファイルFile.xls内に、4つのシートSheet1,Sheet2,Sheet3,Sheet4があるとして、 4つのシートを個別にcsvファイルとして保存するようなマクロを作りたいです。 ▼ソースです  (ここまでのコードで、Pathに保存先のディレクトリ名を取得する部分があるとお考えください)  Filename = "Sheet1" '保存するシート名は、Sheet1~4 GoSub Save1 Filename = "Sheet2" GoSub Save1 Filename = "Sheet3" GoSub Save1 Filename = "Sheet4" GoSub Save1 '保存完了後は、File.xls内Sheet1のCells(4, 1)にカーソルを配置。 Sheets("Sheet1").Select Cells(4, 1).Select Exit Sub Save1: Sheets(Filename).Select fname = Path & "\" & Filename & ".csv" ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, CreateBackup:=False Return End Sub 以上のソースで実行すると、 指定したディレクトリにsheet1.csv、sheet2.csv、sheet3.csv、sheet4.csvの4ファイルができます。 ここまでは問題ないのですが、 マクロを実行後、Sheet4.csv(最後に保存したファイル)が開かれた状態になってしまいます。 しかも、ファイル名はSheet4.csvなのに、シートSheet1~4を持っている状態です。 普通にSheet4.csvファイルを開くと、シートはSheet4しかありません。 状態が伝わるでしょうか? File.xlsのマクロを実行しているので、実行完了後もFile.xlsを開いておきたいのですが、 どのような記述を加えればよいでしょうか? マクロ(VBA)は使い始めたばかりなので説明されても理解できないかもしれませんが、 できればよろしくお願いいたします。

専門家に質問してみよう