『Excelを保存する際のファイル名変更』(はる0708) お世話になります。 現在、起動しているExcelのシートを別ブックで保存するマクロをネットで調べ作成してみました。 その際、ファイル名を下記コードで作成するようにしていますが、 ファイル名は、管理表&日付としたいです。 当初、日付は作成の日を考えていましたが、不都合があるため、シート"集計表"のセルI2に任意の日付けが入力されているため、管理表&”集計表”I2 セルの値をファイル名としたいのですが、修正方法がわかりません。 どのように修正すればいいかご教示ください。 '保存するブックの名前を作成 Dim A, B, C, D A = "管理表" 'ブックの名前 B = Format(Now() - 1, "yyyymmdd") '日付 C = A & "_" & B & ".xlsx" '拡張子を含むブックの名前 D = ThisWorkbook.Path & "\" & C 'ブックのフルパス '新しく作成したブックを名前を付けて保存(日付付き) ActiveWorkbook.SaveAs Filename:=D '新しく作成したブックを閉じる ActiveWorkbook.Close False よろしくご指導ください。 < 使用 Excel:Excel2016、使用 OS:Windows10 > ---- ■1 >ネットで調べ作成してみました。 して、コードは理解できているのでしょうか? ■2 >当初、日付は作成の日 >シート"集計表"のセルI2に任意の日付けが入力されている B = Format(Now() - 1, "yyyymmdd") '日付 ~~~~~~~~~ ↑だと【マクロを実行した日の前日】になってますよね。 ということは・・・・ ■3 ことは足りてますが、マクロはSub〜End Sub までが1つプロシージャと呼ばれるかたまりですから、提示されるなら一通り提示されるとお互いに誤解が無くてよいとおもいます。 (もこな2) 2023/04/18(火) 07:56:48 ---- 早速のご回答ありがとうございます。 また大変失礼いたしました。 当方、コードの理解は出来ておりません。ネットで調べながらの作成です。 そのため、今回ご質問をさせていただいております。 当初日付は、前日の日付としたかったため、-1としています。しかし不都合があったため、 セルの日付を参照したいと思っています。 コードにつきましては、以下のとおりとなります。 Sub 処理() ThisWorkbook.Worksheets("日次管理表").Copy With ActiveWorkbook.Worksheets("日次管理表").Range("B3:G5").CurrentRegion .Value = .Value End With '保存するブックの名前を作成 Dim A, B, C, D A = "管理表" 'ブックの名前 B = Format(Now() - 1, "yyyymmdd") '日付 C = A & "_" & B & ".xlsx" '拡張子を含むブックの名前 D = ThisWorkbook.Path & "\" & C 'ブックのフルパス '新しく作成したブックを名前を付けて保存(日付付き) ActiveWorkbook.SaveAs Filename:=D '新しく作成したブックを閉じる ActiveWorkbook.Close False End Sub どうぞ、ご教示ください。 (はる0708) 2023/04/18(火) 08:20:13 ---- C = A & "_" & B & ".xlsm" ActiveWorkbook.SaveAs D (?) 2023/04/18(火) 09:56:47 ---- ありがとうございます。 試してみます。 (はる0708) 2023/04/19(水) 19:16:12 ---- 解決したのかもしれませんが一応。 ■4 >当方、コードの理解は出来ておりません。ネットで調べながらの作成です。 コードの改造をするならば、まずはそのコードを理解できてないとダメです。 【ステップ実行】したり、【わからない命令をネット検索】したりしてちゃんと理解しましょう。 ■5 提示されたコードを整理(ちょっと改変)するとこんな感じです。 Sub 整理など() Dim 日付を表す数字 As String 日付を表す数字 = Format(ThisWorkbook.Worksheets("集計表").Range("I2").Value, "yyyymmdd") ThisWorkbook.Worksheets("日次管理表").Copy With Workbook(Workbooks.Count) .Worksheets(1).Range("B3:G5").CurrentRegion.Value = .Worksheets(1).Range("B3:G5").CurrentRegion.Value .SaveAs Filename:=ThisWorkbook.Path & "\管理表" & 日付を表す数字 .Close False End With End Sub ↑では【日付を表す数字】を「Now() - 1」で【マクロを実行した日の前日(の日時を示すシリアル値)】を得て、 Format関数で"yyyymmdd"形式に直しているわけですよね。 ですから、「■2」でヒントを出したように、今回は【シート"集計表"のセルI2に任意の日付け(を示すシリアル値)が入力されている】のですから↓のようにすればよいだけです。 日付を表す数字 = Format(Now() - 1, "yyyymmdd") ↓ ~~~~~~~~~ 日付を表す数字 = Format(ThisWorkbook.Worksheets("集計表").Range("I2").Value, "yyyymmdd") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ■6 余談ですが、元コードは拡張子の指定をしていますが、辻褄が合わない拡張子を指定してしまうと、後々困ったことになると思いますから、個人的には指定せずExcel君に任せてしまうことをお勧めします。 (好みの部分でもあるとおもいますので、判断はトピ主にお任せします) (もこな2) 2023/04/20(木) 07:36:58 ---- 誤字訂正 誤 With Workbook(Workbooks.Count) 正 With Workbooks(Workbooks.Count) 実際にはテストしてないので、ほかにもあるかもしれません。 (もこな2) 2023/04/20(木) 20:49:31