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

エクセル2003です。
複数のブックを開いている時に全てのブックを上書き保存したいのですが、
CTRL+Sを押しても、アクティブブックしか上書き保存されません。

まとめて上書き保存する方法はありますか?

A 回答 (2件)

No.1の方の回答にもあるように、マクロで対応するしかないかと思います。


(その上で、「Ctrl+Shift+S」等のショートカットキーを割り当てるか、
 ツールバーにユーザーボタンを追加して、そのマクロの動作を割り当て、と)

以下、サンプルを作ってみましたので、参考まで。
(個人用マクロブックに標準モジュールを追加の上、以下を貼付)

'~~~~~~~~~~~~~以下を貼付~~~~~~~~~~~~~

Option Explicit

Public Sub SaveBooks()
'エラー発生時は「エラー処理」の行に飛ばす
On Error GoTo エラー処理

  '変数の宣言
  Dim Xls As Excel.Application, Wkb As Excel.Workbook, Rsl As Variant

  If MsgBox("全てのブックを保存します。", vbOKCancel, "確認") = vbCancel Then GoTo 終了処理

  'ActiveWorkBookが所属するExcelアプリケーションを、一括保存の対象にする
  '(Excel展開済みの状態で、Windowsのスタートメニュー等から新たにExcelアプリケーションを
  ' 起動していた場合、ActiveWorkbookが所属しない方は、保存の対象から外れます)

  Set Xls = ActiveWorkbook.Application

  '配下の全てのブックを、それぞれの状況に合わせて保存
  For Each Wkb In Xls.Workbooks
    '現在のファイル名を確認(未保存時はNullとなるので、「& ""」で空文字に変換)
    strPath = Wkb.Path & ""
    '状況を確認
    If Len(strPath) Then       '【既存ファイル時】
      '上書保存
      Wkb.Save
      '念のため別のファイルとして保存するならこちらを有効に
      '(拡張子の「.」を、「現在時刻&.」(「:」は全角)に変換)
      'Wkb.SaveAs Replace(strPath, ".", Format(Time(), "hh:nn:ss") & ".")
    ElseIf Wkb.Saved Then      '【新規ファイルで変更なし】
      '何もせず放置
    Else                 '【新規ファイルで変更あり】
      '「ファイルの保存」ダイアログを表示して、ファイル名を確認
      Rsl = Xls.GetSaveAsFilename(Date$, "Excelワークブック(*.xls),*.xls")
      If Rsl = False Then     '【ダイアログでキャンセル選択時】
        '何もせず放置
      Else               '【名前を指定した場合】
        '指定した名前で保存
        Wkb.SaveAs Rsl
      End If
    End If
  Next

  MsgBox "処理を終了しました。", , "確認"

終了処理:
  '念のためメモリを明示的に解放
  Set Wkb = Nothing
  Set Xls = Nothing
  Exit Sub

エラー処理:
  'エラー発生時はメッセージを表示して終了
  MsgBox Err & ":" & Err.Description
  Resume 終了処理

End Sub

'~~~~~~~~~~~~~以上を貼付~~~~~~~~~~~~~

上記モジュールを保存後、ExcelでAlt+F8などで『マクロ』ダイアログを表示させ、
保存したマクロ(「Personal.xls!SaveBooks」)を選択し、『オプション(O)』ボタンを
クリックすると、ショートカットキーを割り当てることができます。
(前述のように「Ctrl+Shift+S」にするなら、ショートカットキー欄にカーソルを
 移動させた状態で、Shift+Sを同時に押せば、「Ctrl+□」の表示が自動で
 「Ctrl+Shift+『S』」と切り替わって入力されます)
    • good
    • 0
この回答へのお礼

ご丁寧に有難うございます。
難しそうですが理解してみます。

お礼日時:2010/02/14 18:46

エクセルにが限ったことではありませんが、基本的にアクティブなファイル以外のファイルから、他のファイルを上書き保存するような機能は用意されていません。



どうしても、すべてのファイルを上書き保存したいなら、マクロを利用することになると思います。

ちなみにExcel2003までは、上書き保存すると、元のデータに戻せないので(上書きしてしまって困ることがよくある)、まとめて上書きするような操作は絶対避けるべきだと思います。
    • good
    • 0
この回答へのお礼

標準機能では、ないのですね。
マクロでループしてやってみます。
ありがとうございます。参考になりました。

お礼日時:2010/02/10 22:47

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