変数で指定する方法を知りたいのですね。
この「すぐに役立つエクセルVBAマクロ集」には、
変数名で範囲指定して選択するには? のページがあります。
そこに掲載されている
「印刷枚数を変数で指定する方法」と、
「シート名と貼り付け位置を変数で指定する方法」を見ていただければわかるかと思いますが、
「今勉強中」ということですので、あらためて、まとめておきます。
1) ブック名を変数で指定して保存するマクロ
最初に確認しておきますが、質問の「セルの名前で … 保存する」の言葉の意味は、「セルに入っている文字列をブックの名前にする」
と解釈してよいでしょうか。
それとも、「セルに付けられている名前」と解釈すべきでしょうか。
ここでは素直に、前者として回答を進めます。
それと「シートを保存する」とあるのは、「ブックを保存」と解釈します。
ブックを保存するマクロは、
[Macro] - [ブックシート] のページに 「ブックを保存する、閉じる」
として掲載されていますが、関係部分を次に抜き出しておきます。
'=========================================================================================
Sub アクティブブックを名前を付けて保存する()
ActiveWorkbook.SaveAs "BBB.xls" '※1
End Sub
'-----------------------------------------------------------------------------------------
このマクロの "BBB.xls" の部分を変数におきかえると、次のとおりです。
ActiveWorkbook.SaveAs ブック名
セルの値を取り出すマクロは、
[Macro] - [値の出入・基本型] のページに 「セルの値を取り出す」
として掲載されていますが、関係部分を次に抜き出しておきます。
'=========================================================================================
Sub アクティブシートのセルの値を取り出す()
Windows("BBB.xls").Activate 'ブックをアクティブにする ※1
Sheets("SSS").Select 'シートを選択する ※2
年 = Cells(2, 1) 'A2セルの値を取り出す ※3
月 = Cells(2, 2) 'B2 〃 ※3
日 = Cells(2, 3) 'C2 〃 ※3
End Sub
'-----------------------------------------------------------------------------------------
このマクロを見習って次の 1行目のように作り、上のマクロと組み合わせましょう。 名前を取り出すセルは、とりあえず A2セルとして進みます。
ブック名 = Cells(2, 1) 'A2セルの値を変数「ブック名」に取り出す
ActiveWorkbook.SaveAs ブック名 'アクティブブックを名前を付けて保存する
2) 貼り付けるセルを任意に変更する方法
最初に説明した 変数名で範囲指定して選択するには? のページの
「シート名と貼り付け位置を変数で指定する方法」のとおりですが、もう1つ例示しておきます。
次のマクロは、
[Macro] - [コピー] のページに 「クリップボードを経由せずにコピーして貼り付ける」
として掲載されているものです。
'-----------------------------------------------------------------------------------------
Sub クリップボードを経由せずにコピーして貼り付ける()
Sheets("SSS").Range("A1:C3").Copy _
destination:=Sheets("SS2").Range("A4") '※1,2,3,4
End Sub
'=========================================================================================
このマクロは、"SSS"シートの A1:C3セル範囲をコピーして 、"SS2"シートの A4セルに貼り付けます。
あなたの希望との相違点は、(1)シート名が違うことと、(2)セルを任意に変更したいことですね。
マクロを次のように修正して、変数「貼り付け範囲」に任意のセルを設定すれば、よいでしょう。
'=========================================================================================
Sub クリップボードを経由せずにコピーして貼り付ける()
コピー範囲 = "A1:C3"
貼り付け範囲 = "A4"
Sheets("Sheet1").Range(コピー範囲).Copy _
destination:=Sheets("Sheet2").Range(貼り付け範囲)
End Sub
'=========================================================================================
|