アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルで、複数の店舗で使用する「販売日報」を作成しております。
各店舗からいただくこの日報は別のシステムで取り込みを行う為、
ファイル名を統一する必要があり、店舗側で勝手にファイル名を作成
できないように、例えば、日報のエクセルのシート内に「ファイル保存」
ボタンを作成し、ファイル名を自動作成するマクロを登録したいと思って
おりますが、マクロはほとんど分からず、いいアイデアが浮かびません。
どなたかお知恵をお貸しいただけないでしょうか?

■ファイル名は、下記のように「販売日報」を先頭にして店舗名_保存日_
保存時間の体裁を考えてます。

 ファイル名:販売日報_(店舗名)_(日付)_(時間)
  ※(店舗名)は販売日報(エクセル)内で「A1セル」など固定した
   場所に入力されており、その値を参照したい。
  ※「日付」「時間」も自動作成したい。

うまくお伝えすることができませんが、イメージとしては「ファイル保存」
ボタンを押すと、エクセルで左上の「ファイル」-「名前を付けて保存」
を押した際に表示される「保存先を選択する画面」が表示され、ファイル名
には、『販売日報_(店舗名)_(日付)_(時間)』が既に表示されている、
といった具合です。

いろいろネットを介し調べましたが、ぴったりのものがなく悩んでおりました。
何卒宜しくお願いいたします。

A 回答 (2件)

ご質問のマクロは、次のような感じですね。



Sub ブック保存()
  Dim SaveFileName As String, re As Variant
  With Sheets("Sheet1").Range("A1")
    If .Value = "" Then
      MsgBox "店舗名が入力されていません", vbExclamation
      Exit Sub
    Else
      SaveFileName = "販売日報_" & .Value & "_" & Format(Now, "yyyymmdd_hhmmss")
    End If
  End With
  re = Application.GetSaveAsFilename(SaveFileName)
  If re = False Then
    MsgBox "保存を中止しました", vbExclamation
  Else
    ActiveWorkbook.SaveAs SaveFileName
    MsgBox "ブックを保存しました", vbInformation
  End If
End Sub

Sheet1のセルA1に店舗名が入力されていたとします。
また、ファイル名の日時は「20080508_080305」という形式としました。
日時を設定しているのは"yyyymmdd_hhmmss"部分です。
なお、指示がありませんでしたので、ブックは『カレントフォルダ』に保存されるようにしています。

上記のマクロを、標準モジュールに貼り付けてください。

続いて、ワークシートにボタンを配置しましょう。
[表示]-[ツールバー]-[フォーム]で[フォーム]ツールバーを表示します。
[ボタン]ボタンをクリックしてからワークシート上をドラッグすると、その位置にボタンが配置されます。
[マクロの登録]ダイアログボックスが表示されますので、先に作ったマクロ「ブック保存」を選択して[OK]ボタンをクリックします。
この時点で、ワークシートに配置したボタンが選択状態になっていますので「ボタン 1」部分をクリックすれば、好きな文字列に編集できますよ。
編集が終わったら、どこかのセルをクリックして、ボタンの選択を解除してください。

この回答への補足

早速のご返答、また完璧なご指導いただき大変大変ありがとうございます!
やりたかったのは正にこれでした。本当に感激しております。

1点マクロの内容でご質問があります。
マクロの記述で、”『カレントフォルダ』に保存する”部分はどこに
なりますでしょうか?
また、カレントフォルダ以外で指定したフォルダに保存したい場合には
どのように記述すれば宜しいのでしょうか?

また、マクロではないかもしれませんが、せっかく「ファイル保存」
ボタンを作成しても、それを利用してくれず、通常通り「ファイル」-
「名前を付けて保存」されてしまうことも考えられます。
従い、「名前を付けて保存」を使用できないようにすることは可能
でしょうか?

あれもこれも聞くばかりで申し訳なく思っておりますが、何卒ご教授
いただきますようお願いいたします。

補足日時:2008/05/08 21:50
    • good
    • 0

>マクロの記述で、”『カレントフォルダ』に保存する”部分はどこに


>なりますでしょうか?

SaveFileName = "販売日報_" & .Value & "_" & Format(Now, "yyyymmdd_hhmmss")



SaveFileName = CurDir & "\" & "販売日報_" & .Value & "_" & Format(Now, "yyyymmdd_hhmmss")

とします。

>また、カレントフォルダ以外で指定したフォルダに保存したい場合には
>どのように記述すれば宜しいのでしょうか?

たとえば「C:\Data\」フォルダに保存したいのでしたら、

SaveFileName = "販売日報_" & .Value & "_" & Format(Now, "yyyymmdd_hhmmss")



SaveFileName = "C:\Data\販売日報_" & .Value & "_" & Format(Now, "yyyymmdd_hhmmss")

としてください。
ただし「デスクトップ」「マイドキュメント」などに保存する場合は、もう少しめんどうです。
これらのフォルダはパソコンごとにフォルダ名が異なりますので、次のようにマクロを変更してください。

Sub ブック保存()
  Dim SaveFileName As String, re As Variant, WSH As Variant, Path As String
  Set WSH = CreateObject("WScript.Shell")
  Path = WSH.SpecialFolders("Desktop") & "\"    ''デスクトップの場合
  Path = WSH.SpecialFolders("MyDocuments") & "\"  ''マイドキュメントの場合
  With Sheets("Sheet1").Range("A1")
    If .Value = "" Then
      MsgBox "店舗名が入力されていません", vbExclamation
      Exit Sub
    Else
      SaveFileName = Path & "販売日報_" & .Value & "_" & Format(Now, "yyyymmdd_hhmmss")
    End If
  End With
  Set WSH = Nothing
  re = Application.GetSaveAsFilename(SaveFileName)
  If re = False Then
    MsgBox "保存を中止しました", vbExclamation
  Else
    ActiveWorkbook.SaveAs SaveFileName
    MsgBox "ブックを保存しました", vbInformation
  End If
End Sub

>従い、「名前を付けて保存」を使用できないようにすることは可能
>でしょうか?

「名前を付けて保存」を完全に使用できなくすることは、不可能だと考えた方がいいでしょう。
メニューを隠したり、ショートカットキーを無効にする程度なら可能ですが「名前を付けて保存」機能自体を無効にすることはできませんし、するべきではありません。マクロはExcelが持つ機能のひとつに過ぎないからです。
たとえば、シートを編集して、Excel自体を終了しようとすれば、Excelが自動的に「変更を保存しますか?」と聞いてきます。なにより、マクロを無効にしてこのブックが開かれれば、どんな制御も無駄になります。
    • good
    • 0
この回答へのお礼

この度は大変お世話になりました。
おかげさまで無事解決することができました。
本当にありがとうございました。

お礼日時:2008/05/09 23:44

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