• 締切済み

エクセルで指定のシートを指定の文字コードで出力する方法

はじめまして、エクセルのシートを文字コードを指定して出力したいのですが、どうやってよいかわからず困っております。 みなさんご教授いただければと思います。 ■やりたいこと 複数のシートがあるxlsファイルがあり、その中で特定のシートを UTF-16の文字コードで.txt出力したいです。 ■現在理解していること 【その1】 shift-jisで出力する方法は、以下のコードで行えることがわかって います。(以下のコードはCSV形式での出力ですが気にしないでください) ------------------------------------------ ''''''''''''''''''''''''''''''''' '指定したシートをcsv出力 ''''''''''''''''''''''''''''''''' Sub aaa_CSV出力() Dim Sh As Worksheet Dim strName As String Application.ScreenUpdating = False Application.DisplayAlerts = False '定型はここから Sheets("シート”).Activate 'csv出力したいシート名(=ファイル名) strName = ActiveWorkbook.Path & "\csv\" & ActiveSheet.Name & ".csv" 'csv出力する場所 'strName = "D:\csv_out\" & ActiveSheet.Name & ".csv" 'csv出力する場所 ActiveSheet.Copy With ActiveWorkbook .SaveAs Filename:=strName, FileFormat:=xlCSV .Close savechanges:=False End With End Sub ------------------------------------------ 【その2】 以下の参照設定を有効にして、以下の機能を使用しないと おそらく文字コードの指定は厳しいと、認識しています。 Microsoft ActiveX Data Object X.X Library 当方VBA自体は初心者で、サンプルのコードを書き換えて使っている程度です。 皆さんのお知恵を貸していただければと思います。 よろしくお願いいたします!!!

みんなの回答

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

Excel から Text形式で保存する場合は Unicode に対応できますが CSV形式には対応していません。 このあたりの情報は以下のHpに掲載されています。 ■Excel で Unicode 文字を含むデータを CSV形式で保存すると… → http://kaitousearch.blog37.fc2.com/blog-entry-312.html ◆Unicode については Wikipedia → http://ja.wikipedia.org/wiki/Unicode ◆VBAにおけるUnicodeの取り扱い   http://codezine.jp/article/detail/1718 対応策としてはカンマを列に挿入するしかなさそうです。 その状態でText形式で保存すればCSVと同じになると思います。

kazumin39
質問者

お礼

回答ありがとうございます!! 質問の書き方がCSV出力のコードになっていまして申し訳ありません。 .txt出力(UTF-16)が出来れば問題はありません。 回答して頂いたURLを参考にして、試行錯誤してみます!!

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 ここの質問者さんの書いているコードを少し変えれば可能なはずです。 http://oshiete1.goo.ne.jp/qa5476986.html ご本人は、自分のコードで納得されていないようですが、私が調べた限りでは、問題ないです。 UTF.Charset = "utf-8"    ↓ UTF.Charset = "UTF-16" としてあげるだけでよいはずです。 >以下の機能を使用しないと >Microsoft ActiveX Data Object X.X Library 参照設定する事前バインディングでも、上記のコードのように、実行時バインディングでも、どちらでも良いでしょう。負担はそんなに多くはないはずですから。 CSVが、文字化けなどしていないとしたら、一旦、通常の方法でCSVに出力した後に、UTF-16 に換えてしまってよいと思います。文字化けが存在するのでしたら、出力の時に、String 型変数に行か全文を代入して、UTF-16 に変換してしまうしかありません。 ダメだったら、一度、こちらでも試してみます。

kazumin39
質問者

補足

回答ありがとうございます!! 私のわがままなのですが 可能であれば、エクセルVBA上で処理をまとめたいです。 質問の書き方がCSV出力のコードになっていまして申し訳ありません。 .txt出力(UTF-16)が出来れば問題はありません。 回答して頂いたURLを参考にして、ちょっと書いてみます~ 以上、よろしくお願いします!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルからCSVファイルに出力したい?

    エクセルのシートからマクロを使ってCSVファイルに出力したいです。 そこで調べたのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2376607 こちらの質問で以下のようなコードが参考になりました。 Sub Macro1() Dim myBook As String myBook = ActiveWorkbook.FullName myBook = Left(myBook, Len(myBook) - 3) & "CSV" ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:=myBook, FileFormat:=xlCSV ActiveWindow.Close False End Sub このコードではCSVのファイル名がエクセルシートのファイル名になってしまいます。 今回の質問ですが、CSVファイルを違う名前で保存するにはどのようにすればいいのでしょうか? (CSVファイルの名前は常にabc.csvで保存するものとします)

  • ExcelシートをCSVファイルにする

    Excel2000を使用してます。 Excelブックに3つのシートがあります。 シート1はメインシートとして「ボタン1」「ボタン2」が存在してます シート2はインプットデータ用シート シート3はアウトプットデータ用シートです シート1の「ボタン1」を押すとVBAが実行されシート2の情報を読み、 シート3に算出結果を出力する仕組みです。 次にシート1の「ボタン2」を押すとシート3の内容をCSVに出力したいのですが、 下記のロッジクではうまくいきません。 どこを修正すればよいのでしょうか? Sub CSV出力() Dim ONAME As String Dim しーと As Worksheet Dim 新しーと As Worksheet Dim PAS As String 'OUTパス名 PAS = ThisWorkbook.Path ONAME = PAS & "\" & "出力.CSV" '出力しーと Sheets("出力").Select Set しーと = ActiveSheet Set 新しーと = Worksheets.Add With 新しーと しーと.Copy .Move End With With ActiveWorkbook .SaveAs Filename:=ONAME, FileFormat:=xlCSV .Close False End With 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

  • Excelシート1シートのみを指定フォルダへ保存

    Excelのシート1のみを、本日の日付と名前の入ったセル(I7)を保存する時の名前にして指定したフォルダへ保存したいと思っています。 1、シートは本日の日付+I7セルに入っている値を名前にする。 2、フォルダはCではなくV:\○○\○○\○○\○○\○○\○○\○○に格納 3、シート1以外のシート2、シート3は保存せず閉じる 4、格納後○○に保存しました。と表示 試行錯誤し、下記のように記述してみたのですが、 Sub Macro1() 'Option Explicit Sub Sample() Dim xSheet As Worksheet Dim myFile As String Dim myName As String Set xSheet = ActiveSheet ThisWorkbook.Worksheets("シート名").Copy 'myName = ActiveWorkbook.Worksheets(1).Name 'myFile = ThisWorkbook.Path & "\" & myName & ".xls" myFile = ThisWorkbook.Path & "\" & xSheet.Range("I7").Value & ".xls" Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=myFile Application.DisplayAlerts = True ActiveWorkbook.Close End Sub 日付を指定して保存 Sub test()  Dim Filename As String  Filename = Format(Date, "yyyy年mm月dd日") & ".xls"  ActiveWorkbook.SaveAs "C:\My Documents\" & Filename End Sub 日付とI7セルの名前を合せてブックの名前としたい場合どうVBEで記述すればいいのかわからないので詳しい方がおられましたら、 よろしくお願いいたします。 あまり詳しくないので、そのままコピーできるか、○○の部分を指定フォルダ名に変えてください。等の注釈を付けていただけると助かります。

  • エクセルVBA CSVファイル出力について

    エクセルVBAでCSVファイル出力マクロを作成しています。 本を参考にして作成したのですが、日付のセルで 2007/7/22 8:29:45と記入させているのが #2007-07-22 08:29:45#と言う形で出力 されてしまいます。 そのまま「2007/7/22 8:29:45」と出力させるには どのようにしたらいいのでしょうか? 出力したデーターを基にアクセスに取り込んでデーター ベースにしようと思っているのですが、「#」がある ため、そのまま、時刻関数で取り込めないもので 困っています。 コードは以下のように書いてあります。 Sub WriteCsv() Dim myTxtFile As String, myFNo As Integer Dim myLastRow As Long, i As Long Dim ShName As String Application.ScreenUpdating = False ShName = ActiveSheet.Name myTxtFile = ActiveWorkbook.Path & "\" & ShName & ".csv" myLastRow = Range("A1").CurrentRegion.Rows.Count myFNo = FreeFile Open myTxtFile For Output As #myFNo For i = 1 To myLastRow Write #myFNo, Cells(i, 1), Cells(i, 2), Cells(i, 3) Next Close #myFNo MsgBox "このシートを元に「" & ShName & ".csv」を作成しました" End Sub 宜しくお願いいたします。

  • VBAで特殊文字を出力したい

    VBAで「"」を出力したいと思っているのですが、 なかなかうまく表示させることができません。 ○サンプルコード Sub SpecialCode() Dim name As Variant name = "ABC"   Cells(1, 1) = name MsgBox name End Sub サンプルコードのname変数を name = ""& "ABC" ""& としても、ワークシートのA1やmsgboxのダイアログ上には ABC と表示されてしまいます。 "がエスケープ文字で、出力する特殊文字の前につければ 表示されることを調べたのですが、なかなかうまくできない状態です。 ワークシートのA1やmsgboxのダイアログ上には "ABC" と表示される手順を教えていただければと 思っております。 以上です。

  • エクセルと同じファイル名でcsvを作成するマクロ

    エクセルからCSVファイルをYYMMDD付でマクロを使って 作ろうとしていますが拡張子の「.xls」がどうしても残ってしまいます。 例えば、「test.xls」が「test.xls070326.csv」のように。 これを「test070326.csv」とするにはどうしたらよいでしょう。 今のコードはつぎのようにしています。 Sub test1() Dim flname As Variant Dim wb As Workbook flname = ActiveWorkbook.Name + CStr(Format(Date, "yymmdd")) ActiveSheet.Copy ActiveSheet.SaveAs Filename:=flname, _ FileFormat:=xlCSV ActiveWindow.Close savechanges:=False ActiveWorkbook.Close End Sub これでもCSVとしては使えるのですが、気持ちがすっきりしません。 どなたか正解をお願いします。

  • CSVが文字コードUTF-8かどうかの判定

    かなりデータ量が多い(10万レコード超)CSVファイルが、100件近くあります。これをエクセルに取り込んで順次同じような作業をしようと思っています。とりあえずCSVを以下のコードで開いています。 Sub CSV入力4() 'クエリーテーブルを使ったCSV読み込みVBAコード Dim myFile As Variant myFile = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", Title:="CSVファイルの選択") If myFile = False Then Exit Sub End If ActiveSheet.Cells.Clear With ActiveSheet.QueryTables.Add(Connection:="text;" & myFile, Destination:=Range("A1")) ' .TextFilePlatform = 932 'Shift_Jis .TextFilePlatform = 65001 'UTF8 .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False .Delete End With MsgBox "読込完了" End Sub 問題は、CSVに拡張子で区別できないUTF-8のCSVファイルがあることです。事前にわかっていれば .TextFilePlatform = 932 'Shift_Jis .TextFilePlatform = 65001 'UTF8 の使い分けで対応できるのですが、開いてみて文字化けがあるかどうか調べないとわかりません。自動的に判定する方法はないでしょうか?

  • VBA シート指定とファイル名入力

    部署ごとに分割し、ブックで保存するコードです。 sheet名は「部署」です。 Sub macro1() Dim w As Worksheet Dim n As Long Dim r As Long Dim s As String Dim WSH As Variant Dim myPath As String Set w = ActiveSheet n = Worksheets.Count Application.ScreenUpdating = False On Error GoTo errhandle For r = 5 To w.Range("B65536").End(xlUp).Row s = w.Cells(r, "B") w.Rows(r).Copy Worksheets(s).Range("B65536").End(xlUp).Offset(1, -1) Next r On Error GoTo 0 Set WSH = CreateObject("Wscript.Shell") myPath = ActiveWorkbook.Path & "\1\" For r = Worksheets.Count To n + 1 Step -1 Worksheets(Worksheets.Count).Copy ActiveSheet.Columns.AutoFit ActiveWorkbook.SaveAs Filename:=myPath & ActiveSheet.Name ActiveWorkbook.Close False Application.DisplayAlerts = False Worksheets(Worksheets.Count).Delete Application.DisplayAlerts = True Next r w.Select Exit Sub errhandle: Worksheets.Add after:=Worksheets(Worksheets.Count) ActiveSheet.Name = s w.Rows(1).Copy Range("A1") w.Rows(2).Copy Range("A2") w.Rows(3).Copy Range("A3") w.Rows(4).Copy Range("A4") Resume Application.ScreenUpdating = True End Sub (1)sheet1にマクロ実行ボタンを配置し、部署seedにマクロ実行命令をする。 (2)sheet1のB2セルにファイル名を入力して、そのファイルに保存する。(例部署ファイル) (1)Dim w As Worksheets("部署")と変更したのですが、エラーが出ました。 (2)myPath = ActiveWorkbook.Path & "\部署ファイル\"   ↑ これをsheet1のB2セルから指定できるようにしたいです。 宜しくお願いします。

  • Excelの複数シートからcsvファイルを出力

    Dim objXL Dim f Dim m Dim ws Set objXL=CreateObject("Excel.Application") 'objXL.Visible=True objXL.DisplayAlerts=False For Each f In WScript.Arguments objXL.WorkBooks.Open f For Each ws In objXL.ActiveWorkBook.Worksheets If ws.UsedRange.Rows.Count=1 and ws.UsedRange.Columns.Count=1 and ws.Cells(1,1)="" Then 'MsgBox ws.Name&"Empty" Else ws.SaveAs f & "." & ws.Name & ".csv", 6 End If Next objXL.ActiveWorkBook.Close Next objXL.Quit WScript.Quit 上記スクリプトファイルで ファイル名が「[元Excelファイル名].[シート名].csv」 のcsvファイルが出力されますが、これを ファイル名を「[シート名].csv」にするには どのようにすればいいのでしょうか。 ws.SaveAs f & "." & ws.Name & ".csv", 6 の箇所を ws.SaveAs ws.Name & ".csv", 6 に変更したのですが、うまくいきませんでした。