ジメジメする梅雨のお悩み、一挙解決! >>

EXCELについて質問です。
エクセルのシートに入力した内容をCSVファイルで出力したいです。
当方の希望としまして、いくつかあるシートの中で、希望のシートだけCSVファイルを出力し、出力する際は「CSVファイルを出力」のようなボタンをクリックすれば、CSVファイルが出力されるものです。
初心者ですので、できるだけ詳しく教えて頂きたいです。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

簡単に分かりやすくマクロの登録から実行までを下記に


記載したつもりですが、伝わらなかったら申し訳ありま
せん。それでは

Excelを立ち上げ、ツール→マクロ→VisualBasicEditorを
クリックします。次に立ち上がったVisualBasicEditorの
挿入→標準モジュールを押すと、Module1(コード)が開く
のでそこに下記のソースをコピペしてください。

Sub Macro1()
Application.DisplayAlerts = False
main_f = ActiveWindow.Caption
out_pass = ActiveWorkbook.Path & "\"
Out_name = ActiveSheet.Name
Sheets(Out_name).Select
Sheets(Out_name).Copy
ActiveWorkbook.SaveAs Filename:= _
out_pass & Out_name & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
ActiveWindow.Close
Application.DisplayAlerts = True
End Sub

コピペがおわりましたら、エクセルにもどり任意の
ファイル名で保存してください。例として
sheetout_csv.xlsとして保存します。保存先は
どこでもかまいませんが、閉じずにそのままにして
おいてください。

次に、061156さんがシート別にcsv出力したいファイルを
Excelで開き、出力したいシートをクリックします。
次にツール→マクロ→マクロを押して表示されている
sheetout_csv.xls!Macro1を「実行」ボタンを押して実行
します。これで任意のシートのCSVファイル出力は
完成です。出力先はシート別にcsv出力したいファイルと
同じ場所に「選択したシート名.csv」で出力されます。
ボタン押すと出力されるようにもできますが記載が複雑に
なりそうなのでこれで^^;
以上です。
    • good
    • 0

#3 です。



すみません。Worksheet オブジェクトに SaveAs メソッドがあるのを
すっかり忘れてました。#3 はもっと簡単に書けます。

' // アクティブシートを CSV で保存2(標準モジュール)
Sub CsvOutputSample2()

   ' // Excel の CSV 出力機能を利用します
 
  Dim vOutFile As Variant
 
  ' // 保存ファイル名を問い合せて、バリアント型変数で受ける
  vOutFile = Application.GetSaveAsFilename( _
          FileFilter:="CSV 形式(*.csv),*.csv", _
          InitialFileName:=ActiveSheet.Name)
  ' // 変数の値がブール値(False) ならユーザーキャンセルなので終了
  If VarType(vOutFile) = vbBoolean Then Exit Sub
  ' // 保存実行
  ActiveSheet.SaveAs Filename:=vOutFile, FileFormat:=xlCSV

End Sub
    • good
    • 0
この回答へのお礼

丁寧なご対応ありがとうございました。
勉強してみます。

お礼日時:2008/03/04 18:03

こんにちは。



全部わかりませんでは作成依頼と受け取られかねませんよ。
VBA を学びたいのですよね? 頑張ってください。
ご参考までに。

' // アクティブシートを CSV で保存(標準モジュール)
Sub CsvOutputSample()

   ' // Excel の CSV 出力機能を利用します
  
  Dim vOutFile As Variant
  Dim shSrc  As Worksheet
  
  ' // A) 保存ファイル名を問い合せて、バリアント型変数で受ける
  vOutFile = Application.GetSaveAsFilename( _
          FileFilter:="CSV 形式(*.csv),*.csv", _
          InitialFileName:=ActiveSheet.Name)
  ' // 変数の値がブール値(False) ならユーザーキャンセルなので終了
  If VarType(vOutFile) = vbBoolean Then Exit Sub

  ' // 現在アクティブなシートを覚えておく(後で確実にアクティブ化するため)
  Set shSrc = ActiveSheet
  ' // 画面の切り替わりをユーザーに見せない
  Application.ScreenUpdating = False
  ' // B) アクティブシートを「新しいブック」に複製する
  shSrc.Copy
  ' // B) により、複製先の「新しいブック」がアクティブに切り替わる
  With ActiveWorkbook
    ' // A) の名前で CSV 形式で保存し、閉じる
    .SaveAs Filename:=vOutFile, FileFormat:=xlCSV
    .Close SaveChanges:=False
  End With
  ' // 一応念のため、コピー元シートの親オブジェクト(ブック)からアクティブ化
  shSrc.Parent.Activate
  ' // シートアクティブ化
  shSrc.Activate

  ' // オブジェクト変数を空に(参照を破棄)する
  Set shSrc = Nothing

End Sub
    • good
    • 1
この回答へのお礼

ご対応ありがとうございました。
これから、VBAを勉強して内容が理解できるように努力しようと思います。

お礼日時:2008/03/04 17:17

CSVでの保存自体は「名前をつけて保存」で「ファイルの種類」をCSVにすればOK。


ボタンをクリックでこの動作を可能にするにはマクロを使います。
ツール→マクロ→新しいマクロの記録→上記CSVでの保存手順を実行→ツール→マクロ→記録終了
オートシェイプでボタンを設置→図を右クリックして「マクロの登録」→先ほど記録したマクロを登録→
図を右クリックして「テキストの追加」で【CSVファイルを出力】と入力
のような感じです。
ただしこのままですとファイル名の変更が出来ず全て上書き保存となってしまいますし任意のシートの選択も出来ません。
ここから先はVBAで作りこむようになりますが初心者とのことですので
全て説明しようとすると本が1冊出来ちゃいそうです。
とりあえずは「名前をつけて保存」で、後はおいおい勉強してみては?

この回答への補足

回答ありがとうございました。
私の質問の仕方が悪く意図したことが伝えられなかったのですが、
任意のシートを指定したディレクトリに保存したいため、VBAでCSVファイル出力をしたいです。
ですが、VBAのスキルがないため、どの場所に、どのようなソースを書けばよいかを詳しく教えて頂きたかったです。
可能でしょうか?

補足日時:2008/03/04 01:02
    • good
    • 0

こんばんは。


保存の際にファイルの種類を「csv」に指定すればOKです。
これが一番手っ取り早いですよ。

この回答への補足

回答ありがとうございました。
私の質問の仕方が悪く意図したことが伝えられなかったのですが、
任意のシートを指定したディレクトリに保存したいため、VBAでCSVファイル出力をしたいです。
ですが、VBAのスキルがないため、どの場所に、どのようなソースを書けばよいかを詳しく教えて頂きたかったです。
可能でしょうか?

補足日時:2008/03/04 01:08
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルでシート名のCSV形式ファイルの一括複数保存

エクセルで編集した複数のシートをそれぞれのシート名でCSV形式ファイルとして保存するにはシートを開いてはファイル名を指定してCSVで保存という操作をシート分だけしなければならないのですが、これを少ない操作で行う事は可能でしょうか。たとえばシートを複数選択して、CSV形式だけを選択して一括で保存するとかです。

Aベストアンサー

こんにちは。
マクロを使えばできます。

下記マクロを該当エクセルファイルか個人用マクロブックにコピペして実行してみてください。
エクセルファイルと同じフォルダにシート名+".csv"という名前のCSVファイルを作成します。
(選択したシートのみ)

Sub SaveCsv()
Dim mySheet As Worksheet
For Each mySheet In ActiveWindow.SelectedSheets
ActiveWorkbook.SaveAs Filename:= _
ActiveWorkbook.Path & "\" & mySheet.Name & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
Next
End Sub

Qエクセルの複数シートをCSVファイルに変換したい

現在、エクセルのVer2002を使用しており、CSV(カンマ区分け)ファイル変換を実行することが多くあります。
現状、CSVに変換すべきブック中のシート数が多い(EX.90~140)場合の作業で大変苦労をしています。
ワークシートをグループ化しても”複数のシートを含むブックをサポートしていません。” の表示が出てアクティブ・シートのみの変換になって個々のシート毎に行っておりますが、他に良い解決方法、手段をご存じの方はご伝授ください。
よろしくお願い致します。

Aベストアンサー

やはりマクロでしょうか。
簡単なエラー処理しかしてませんので試すならテスト環境で。

1)Excelを起動して新規ブックの状態から ALT + F11 でVBE画面を起動します。
2)VBE画面のメニューから挿入-標準モジュールで出てきた画面に下記マクロをコピペします。
3)VBE画面を閉じてExcelに戻り、ブックを適当な名前で保存します。(出来れば新たにフォルダを作って)
4)対象となるファイルを開き、アクティブな状態でツール-マクロ-マクロで実行します。
5)上記3で保存した場所にCSVファイルを作ります。

Sub Test()
Dim ws As Worksheet
 On Error Resume Next
 For Each ws In ActiveWorkbook.Worksheets
   ws.SaveAs ThisWorkbook.Path & "\" & ws.Name & ".csv", xlCSV
 Next ws
End Sub

Q【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう

添付図のような、Excel2003で作成した表内のデータを
CSVで保存するマクロを作成したのですが、
図のように、CSVファイルに「""」で値が囲まれた状態で、
保存されてしまいます。

下記にマクロを記載しますので、
どうすれば文字列が「""」で囲まれずに、
カンマ区切りだけのデータで出力されるのか、
ご存知の方おられましたら、ご教示お願い致します。

Sub csv保存()
Dim フォルダ名 As String
Dim パス名 As String
Dim ファイル名 As String
Dim データ As Variant
Dim 行数 As Long, 列数 As Integer
Dim i As Integer, j As Long, k As Long

ファイル名 = "test.csv"
フォルダ名 = "csv"
パス名 = ActiveWorkbook.Path & "\" & _
フォルダ名

'csvフォルダが存在しなければ作成する
If Dir(パス名, vbDirectory) = "" Then
MkDir パス名
End If
ChDir パス名

Open ファイル名 For Output As #1

For i = 1 To Worksheets.Count
Worksheets(i).Activate
Worksheets(i).Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
行数 = Selection.Rows.Count
列数 = Selection.Columns.Count

For j = 1 To 行数
For k = 1 To 列数 - 1
データ = Selection.Cells(j, k) _
.Value
Write #1, データ;
Next k
Write #1, Selection.Cells(j, 列数) _
.Value
Next j
Next i
Close #1
End Sub

添付図のような、Excel2003で作成した表内のデータを
CSVで保存するマクロを作成したのですが、
図のように、CSVファイルに「""」で値が囲まれた状態で、
保存されてしまいます。

下記にマクロを記載しますので、
どうすれば文字列が「""」で囲まれずに、
カンマ区切りだけのデータで出力されるのか、
ご存知の方おられましたら、ご教示お願い致します。

Sub csv保存()
Dim フォルダ名 As String
Dim パス名 As String
Dim ファイル名 As String
Dim データ As Variant
Dim ...続きを読む

Aベストアンサー

Write # は文字列を""で囲んで出力する仕様になっています。
そのまま出力したければ、Print #を利用すればよろしいかと。
ただし、Printの場合は区切り文字(カンマ)を自動で出力してくれませんので、併せて出力する必要があります。

For j = 1 To 行数
  For k = 1 To 列数 - 1
    データ = Selection.Cells(j, k) .Value
    Print #1, データ; ",";
  Next k
  Print #1, Selection.Cells(j, 列数).Value
Next j

なお、いらぬおせっかいですが、ドライブが複数ある環境下だと、
 ChDir パス名
だけでは必ずしもcvsフォルダ内に、ファイルが作成されるとは限りません。
 Open パス名 & "\" & ファイル名 For Output As #1
のように、フルパスで指定しておいた方が確実かと…

QEXCEL→CSV形式で別ファイルに保存

EXCELデータ内のある1つのシートのデータをそのまま別ファイル(CSV)に保存したいのですがうまくいかないので教えてください。
本を見ながらこのようなマクロを作ったところ、EXCEL(○○.xls)の指定したシート(keihi)のみをCSV形式で別フォルダ(C:\経費振替)に保存することができたんですが、
元のEXCELも、ファイル名称・形式がCSV(○○.xls→keihi.csv)に変わってしまいます。
エクセルのファイル名、形式は変えずにできる方法ってありますか??
Sub データはきだし()
Dim Ret As String
Dim Res As Integer
Dim FolderName As String
Set WK1 = Worksheets("1 依頼書")
Set WK4 = Worksheets("keihi")
FolderName = "C:\経費振替"
Ret = Dir(FolderName, 16)

If Ret = "" Then
Res = MsgBox("DATA保管用フォルダを作成します。", vbYesNo)
If Res = vbYes Then
MkDir FolderName
End If
End If

'
Dim Res2 As Integer
Res2 = MsgBox("DATAを作成します。", vbYesNo)
WK4.Select
If Res2 = vbYes Then
With WK4
.SaveAs Filename:=FolderName & "\keihi", FileFormat:=xlCSV ←多分ココが何か間違ってるのだと思うんですが。
End With

EXCELデータ内のある1つのシートのデータをそのまま別ファイル(CSV)に保存したいのですがうまくいかないので教えてください。
本を見ながらこのようなマクロを作ったところ、EXCEL(○○.xls)の指定したシート(keihi)のみをCSV形式で別フォルダ(C:\経費振替)に保存することができたんですが、
元のEXCELも、ファイル名称・形式がCSV(○○.xls→keihi.csv)に変わってしまいます。
エクセルのファイル名、形式は変えずにできる方法ってありますか??
Sub データはきだし()
Dim Ret As String
Dim Res As I...続きを読む

Aベストアンサー

こんばんは。
いくつかやり方はあるのですが、もっとも簡単なのは、たぶん、こんな所でしょうね。
それと、一応、出力ファイル名は、明示的に、keihi.csv  としました。

Dim Res2 As Integer
Res2 = MsgBox("DATAを作成します。", vbYesNo)
WK4.Select
If Res2 = vbYes Then
WK4.Copy
Application.DisplayAlerts = False '上書きダイアログ無視
ActiveWorkbook.SaveAs _
  Filename:=FolderName & "\keihi.csv", FileFormat:=xlCSV
ActiveWorkbook.Close False
Application.DisplayAlerts = True
End If

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

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

c:\a01.xls という名前のエクセルファイルがあり、sheet1、sheet2、sheet3 というシートの構成とします。それぞれのシートには何件かの入力があるとします。

この エクセルファイルから Sheet2 の シートのデータを c:\csv01.csv にCSV出力するには どのような test.vbs を作成したらよいのでしょうか?

教えてください。

Aベストアンサー

一応、作ってみましたが、以下は、自分用に作ったものですから、あえて、
「c:\a01.xls  を c:\csv01.csv にする、」

という規則には従いませんでした。もし、必要でしたら、以下のコード直してください。確か、全角空白は、エラーの原因になるという話を聞いたことがありますので、入れていません。

この使い方は、エキスプローラ等から、Excelのファイルをこのファイル(.vbs)にドラッグ&ドロップすると、シート番号を聞いてきますので、入れてください。

ファイル名は、例えば、「c:\a01.xls」でしたら、最初は、「c:\a01.csv」となり、同じものを、ドラッグ&ドロップすると、c:\a011.csv → c:\a012.csv となっていきます。

'ExcelCsvOut.vbs
'05/05/04
Dim objFso
Dim Fname
Dim myBaseName
Dim NewMyBaseName
Dim myPath
Set objFso = CreateObject("Scripting.FileSystemObject")
Fname = WScript.Arguments.Item(0)
If objFso.GetExtensionName(Fname) <> "xls" Then
MsgBox "Excelのファイルではないようです", 64
Wscript.Quit
End If
ShNum = InputBox ("シート番号","シート番号の入力")
If ShNum =0 or ShNum ="" Then
Msgbox "入力が間違っています。",16
Wscript.Quit
End if
'
myPath = objFso.GetParentFolderName(Fname)
myBaseName = objFso.GetBaseName(Fname)
NewMyBaseName = myBaseName
'
Do
flg =objFso.FileExists(myPath & "\" & NewMyBaseName & ".csv")
If flg = True Then
NewMyBaseName = myBaseName & i
Else
Exit Do
End if
i = Clng(i) + 1
Loop
Set objExcel = Wscript.CreateObject("Excel.Application")
On Error Resume Next
With objExcel
.WorkBooks.Open Fname
With .ActiveWorkbook
If .Sheets.Count <= Clng(ShNum) Then
MsgBox ShNum &" は、シートインデックスには見つかりません。",16
Else
.Sheets(Clng(ShNum)).Select
.SaveAs NewMyBaseName & ".csv", 6
.Close False
End If
End wiTh
End With
If Err.Number = 0 Then
MsgBox myPath & NewMyBaseName &".csv" &" を出力しました。"
Else
MsgBox Err.Description
End if
Set objExcel = Nothing
Set objFso = Nothing

一応、作ってみましたが、以下は、自分用に作ったものですから、あえて、
「c:\a01.xls  を c:\csv01.csv にする、」

という規則には従いませんでした。もし、必要でしたら、以下のコード直してください。確か、全角空白は、エラーの原因になるという話を聞いたことがありますので、入れていません。

この使い方は、エキスプローラ等から、Excelのファイルをこのファイル(.vbs)にドラッグ&ドロップすると、シート番号を聞いてきますので、入れてください。

ファイル名は、例えば、「c:\a01.xls」でし...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QExcel:任意の列だけCSV形式で出力したい。

Excel(Ver2002)で任意の列(1列のみ)内の任意の行数(例えばA-10からA-99まで)だけCSV形式で出力したいのですが、どうすればよいでしょうか?

マクロやVBAなどの特殊なプログラムは使用したくありません。

方法をご存知の方、おられましたらその方法又は方法が詳細に記載されているホームページのURLをお教え下さい。

よろしくお願いします。

Aベストアンサー

任意の1列だけでも、連続する範囲でも、ドラッグなどで範囲を選択し、右クリック⇒コピー。その後、スタート⇒すべてのプログラム⇒アクセサリー⇒メモ帳を開き、その画面上で、右クリック⇒貼り付けをしてください。そうすると、Excelでコピーしたものが貼り付けられますので、名をつけて保存で、ファイルの種類で「すべてのファイル」を選択し、ファイル名の欄に、例えば abcd.csv などと拡張子を含めたものを入力し、保存してください。保存場所は、希望に合わせて、上の「保存する場所」などから変えてください。デフォルトだと、Cドライブ直下やマイドキュメントに保存されると思います(あなたのPCがどのように設定されているかわかりませんが)

マクロやVBAなどの特殊なプログラムは使用したくないということなので、以上のやり方になるかと思います。Excel単独でのやり方はないと思います。なお、メモ帳を開くのではなく、Excelで、新規ドキュメントを立ち上げて、それに貼り付け、その後、CSVファイルとして保存することもできますが、メモ帳を使うやり方の方が軽快に行えると思います。

任意の1列だけでも、連続する範囲でも、ドラッグなどで範囲を選択し、右クリック⇒コピー。その後、スタート⇒すべてのプログラム⇒アクセサリー⇒メモ帳を開き、その画面上で、右クリック⇒貼り付けをしてください。そうすると、Excelでコピーしたものが貼り付けられますので、名をつけて保存で、ファイルの種類で「すべてのファイル」を選択し、ファイル名の欄に、例えば abcd.csv などと拡張子を含めたものを入力し、保存してください。保存場所は、希望に合わせて、上の「保存する場所」などから変えてください。デ...続きを読む

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報