プロが教える店舗&オフィスのセキュリティ対策術

Excel マクロの質問です。
例えば、Book(ファイル)「売上帳」の「明細」シート全体をコピーして、
1.別の新しいBookに貼り付け、
2.CSV形式で、「売上帳」が保存してあるフォルダーに保存する方法
を教えていただけますでしょうか。

質問者からの補足コメント

  • HAPPY

    試行錯誤して、下記の構文で成功しました。
    また、「元のフォルダーに、CSV形式で保存しました。」のメッセージを付けました。
    大変にありがとうございました。

    Sub MakingCsv()
    Dim wb As Workbook
    Dim myPath As String
    Dim fName As String
    myPath = CurDir 
    fName = myPath & "\" & "明細★" & Format$(Date, "yyyymmdd")
    ActiveSheet.Copy
    Set wb = ActiveWorkbook
    wb.SaveAs Filename:=fName, FileFormat:=xlCSV
    wb.Close False
    MsgBox "元のフォルダーに、CSV形式で保存しました。"
    End Sub

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/11/14 20:10
  • HAPPY

    今回、ママチャリ様のご貢献は絶大でしたが、さらにその先をNo3.WindFaller様に教えていただきましたので、ベストアンサーをWindFallerに差し上げますので、ご了解をお願いいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/11/14 20:16

A 回答 (3件)

ご質問に記載されている内容だけであれば、こんな感じです。


ただ、「保存するファイル名を指定したい」とか、「別の新しいBookは保存後に閉じたい」とかの要望があるのであれば、それなりに手を加える必要がありますが・・・。

Sub sample()
Sheets("明細").Copy
ActiveWorkbook.SaveAs FileFormat:=xlCSV
End Sub
この回答への補足あり
    • good
    • 1
この回答へのお礼

早速ご教示いただき、ありがとうございました。
試作しましたが、期待通りに成功しました。

ところで、ご指摘のとおり、もし、「保存するファイル名を指定したい」には、どうすればよいか、ご教示いただける助かりますが、如何でしょうか。「ファイル名」は、”明細CSV”のような名称を固定してマクロに書き込むことでOKです。

その後に作業しますので、閉じる必要はございません。
よろしくお願いいたします。

お礼日時:2017/11/11 19:13

固定の名前で良いのであれば、Workbook.SaveAs メソッドのFilenameパラメータを指定すればOKです。

詳細はExcelのヘルプをご確認ください。
    • good
    • 1
この回答へのお礼

早速ご教示ありがとうございました。
ファイル名を付ける方法も理解して実行できました。

なお、ファイル名を付けないで保存しますと、保存先は、元のファイルのフォルダーでしたが、ファイル名を付けて保存しますと、保存先は、「ドキュメント」になってしまいました。(パスは指定しておりませんので)

どちらかの選択になるようです。
どちらがより便利か、現場の人と相談して決めたいと思います。

お礼日時:2017/11/11 23:25

任意のファイル名にするなら、ダイアログボックスを設けたほうがよいです。

(2番目)

Sub MakingCsv()
 Dim wb As Workbook
 Dim myPath As String
 Dim fName As String
 'フォルダーは任意でお願いします。
 myPath = Application.DefaultFilePath & "売上" &"\" '末尾は必ず¥を入れる
 '拡張子はつけないようにしてください。以下は、明細20171113.csvになります。
 fName = myPath & "明細" & Format$(Date, "yyyymmdd")
 ActiveSheet.Copy
 Set wb = ActiveWorkbook
 wb.SaveAs Filename:=fName, FileFormat:=xlCSV
 wb.Close False
End Sub
''-----------------

Sub MakingCsv2()
 Dim wb As Workbook
 Dim myPath As String
 Dim orgDir As String
 Dim fName As Variant '変数の型が変わります

 orgDir = CurDir '現在フォルダーを確保
'フォルダーは書き換えてください
 myPath = Application.DefaultFilePath & "売上" & "\"   '末尾は必ず¥を入れる
 ChDir myPath
 fName = Application.GetSaveAsFilename( _
 "明細" & Format$(Date, "yyyymmdd"), fileFilter:="CSV Files (*.csv), *.csv")
 If fName = False Then Exit Sub  'キャンセル
 
 ActiveSheet.Copy
 Set wb = ActiveWorkbook
 wb.SaveAs Filename:=fName, FileFormat:=xlCSV
 wb.Close False
 ChDir orgDir
End Sub
この回答への補足あり
    • good
    • 1
この回答へのお礼

ご親切なご回答ありがとうございました。
上記2つとも、試してみましたが、どちらもエラーになってしまします。

1番目は、
Sub MakingCsv()
Dim wb As Workbook
Dim myPath As String
Dim fName As String
myPath = Application.DefaultFilePath & "売上" & "\"
fName = myPath & "明細" & Format$(Date, "yyyymmdd")
ActiveSheet.Copy
Set wb = ActiveWorkbook
⇒ wb.SaveAs Filename:=fName, FileFormat:=xlCSV
wb.Close False
End Sub

において、
⇒ wb.SaveAs Filename:=fName, FileFormat:=xlCSVV
の箇所で、黄色のハイライトとなっています。(「⇒」は、マクロに入れていません)
エラーメッセージは、
「‘明細20171114.csv’にアクセスできません。ファイルが破損しているか、応答しないサーバーにあるか、読み取り専用に設定されています」
となっています。

2番目は、
「実行時エラー’76’」のメッセージが出てきましたので、「デバッグ」のボタンを押すと、
「ChDir myPath」のところで、黄色のハイライトになっております。

No1ママチャリ様を参考にして、自分なりに、元フォルダーに保存するように、いろいろやってみましたが、どれもうまくいきません。
ファイル名、明細20171114.cscのように、ファイルは作詞されますが、「マイドキュメント」に保存されてしまいます。

解決法がありますでしょうか。
重ねてよろしくお願いいたします。

お礼日時:2017/11/14 17:10

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