3.4 ワークブックを別名で保存
ワークブックを別名で保存する方法です。???.SaveAsというメソッドを使います。

???の部分は、ThisWorkbookWorkbooks(n)ActiveWorkbookなどのワークブックを表すオブジェクトです。

なお、ワークブックの指定方法については、2.1 直接指定する方法2.2 間接的に指定する方法を参照してください。
別名で保存する方法
???.SaveAsの基本的な使い方色々です。自分自身を別な名前で保存するときと、他のワークブックを選択して別な名前で保存する2つの方法があります。

まずは、自分自身を別名で保存する場合ですが、ThisWorkbookを付け、

ThisWorkbook.SaveAs Filename:="c:\happy\smile.xls"

このように行います。ファイル名はFilename:=で指定します。


次に、開いている他のワークブックを上書き保存したい場合ですが、まずは対象のワークブックをWorkbooks(n).Activateで選択した後、ActiveWorkbook.SaveAsで保存する間接指定の方法と、

Workbooks(n).Activate
ActiveWorkbook.SaveAs Filename:="c:\happy\smile.xls"

Workbooks(n).SaveAs直接ワークブックを指定する方法があります。どちらも同じ動作でどっちを使うかは好みの問題ですが、いちおう後者を推奨しておきます。

Workbooks(n).SaveAs Filename:="c:\happy\smile.xls"


ちなみに、CSV形式で保存したいなんてこともあることでしょう。そんなときは 引数にFileFormat:=xlCSVを加えます。

ActiveWorkbook.SaveAs Filename:="c:\happy\smile.csv", FileFormat:=xlCSV

ワークブックの選択(nの部分)については「3.ワークブック、ワークシートの操作」に書いてあるので、そちらをどうぞ。
使用例1/自分自身を別な名前で保存する
ThisWorkbook.SaveAsの使用例です。ワークシートをゴソゴソ編集した後、自分自身に別な名前をつけて保存(A)します。ちなみに、ゴソゴソ…の部分は「5 書式の設定をする」に書いてあるのでここでは省略します…手抜きではありません(汗)
ThisWorkbook.SaveAsの引数Filename:=にはエクセルワークブックのファイル名をフルパスで指定します。

それと、ThisWorkbook.SaveAsを実行するとき、保存先に同じファイル名のワークブックが既にある場合は「ワークブックを置き換えますか?」というダイアログが表示されますが、「マクロ=自動化」なので出ない方が便利です。表示したくないときは、ApplicationオブジェクトのDisplayAlertsFalseを指定(@)しておきましょう。ただし、保存が終わったらTrueに戻しておく(B)ことをオススメします。じゃないと、他のメッセージが出なくなるので…。詳しくは、8.2 警告メッセージのON・OFFをどうぞ。

なお、ワークブックを閉じる方法については、3.5 ワークブックを閉じるをどうぞ。

Sub prcThisWorkbookSaveAs()

    '編集範囲を選択します
    Range("B2:D10").Select

    '選択した範囲内のセルを塗りつぶします
    With Selection.Interior
        .ColorIndex = 10
        .Pattern = xlSolid
    End With

    '@各種の確認ダイアログを非表示
    Application.DisplayAlerts = False
    'Aワークブックを別名で保存
    ThisWorkbook.SaveAs Filename:="c:\happy\エクセル2002v.xls"
    'B各種の確認ダイアログを表示
    Application.DisplayAlerts = True

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
使用例2/他のワークブックを別名で保存する
ActiveWorkbook.SaveAsの使用例です。c:\happyに保存してあるエクセル2002.xlsというワークブックを開き、そのワークブックのワークシートをゴソゴソ編集した後、ActiveWorkbook.SaveAs開いたワークブックを別名で保存(B)します。

ワークブックを選択する場合には番号や名前などの識別子を指定する必要があります。例では、開いたワークブックの「名前」を取得し、その名前で選択するようにしています。ちなみに名前の取得ですが、開いた直後は開いたワークブックが選択されている状態なので、この隙にActiveWorkbook.Nameで名前を取得しました。ワークブックの名前取得については、7.3 ワークブックの名前を知る方法もどうぞ。

Application.DisplayAlertsについては、「使用例1/自分自身を別な名前で保存する」と同じです。

なお、ワークブックを閉じる方法については、3.5 ワークブックを閉じるをどうぞ。

Sub prcActiveWorkbookSave()

    Dim strWorkBookName As String

    Workbooks.Open Filename:="c:\happy\エクセル2002.xls"
    strWorkBookName = ActiveWorkbook.Name

    'コピー元範囲(自分自身)の指定
    ThisWorkbook.Activate
    Range("B2:D10").Copy

    '開いたワークブックの1つ目のワークシートへ
    'コピーした部分を貼り付けます
    Workbooks(strWorkBookName).Worksheets(1).Range("B2:D10").PasteSpecial

    '@各種の確認ダイアログを非表示
    Application.DisplayAlerts = False
    'A保存するワークブックを選択します
    Workbooks(strWorkBookName).Activate
    'B選択したワークブックを別名で保存します
    ActiveWorkbook.SaveAs Filename:="c:\happy\エクセル2002v.xls"
    'C各種の確認ダイアログを表示
    Application.DisplayAlerts = True

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
Copyright(C) 1999-2006 結城圭介。 All rights reserved