• ベストアンサー

ファイル名を日付にしたいのですが、うまく行きません

Sheet1のセルA1に"2016/5/1"のデータが有ります。 このデータをファイル名にして保存したいので、以下のVBAを作りました。 しかし、ファイル名が"2016/5/1"ではなく、"ym"になってしまいます。 どうしたらよいでしょうか? Option Explicit Sub コピー保存() Dim ym As Long Sheets("Sheet1").Range("a1").Select ym = Range("z1") ThisWorkbook.SaveCopyAs _ Filename:="H:\" & "ym" & ".xlsm" End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

いろいろ、問題がありますね。 まず、何よりも「"ym"」としていることです。 「"ym"」とした時点で、「ym」という文字列になってしまいます。 変数を「"」で囲ってはいけません。 また、「ym = Range("Z1")」って何ですか? それから、ファイル名は文字列ですから、「Dim ym As String」とします。 他にも、「Windows」にはファイル名として使えない文字があります。 半角の「?」や「¥」マークなどですが、半角の「/」もその一つです。 したがって、半角の「/」は全角にする必要があります。 結果、私が作るなら、 Option Explicit Sub コピー保存() Dim ym As String ym = Range("A1").Value ym = Replace(ym, "/", "/") ThisWorkbook.SaveAs Filename:="F:\" & ym & ".xlsm" End Sub となります。

crossinlove
質問者

お礼

Z1はA1の誤りでした。 ご教示いただいたコードで動作確認できました。 ありがとうございます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>"2016/5/1"ではなく、"ym"になってしまいます 理由は、すでに回答がある通りだし、極く初心者的なミス。 ファイル名は文字列で指定するもの。 ーー Sub test01() Dim filename As String filename = Format(Range("A1"), "yymmdd") MsgBox filename filename = Format(Range("A1"), "yyyymmdd") MsgBox filename End Sub ' A1 セルに半角で2016/5/1 と入れた場合 '前半では 上記は 160501となる、公判では20160501となる。 こういう書式指定と質問者がしたい日付の表し方を明確にして質問すべきでしょう。 ファイル名の中の年月日の区切りのつもりだろうが、スラッシュは使えない。 A1セルに入れる日付の入れ方も規制しないとならないだろう。 上記は日付シリアル値(文字列でない)をA1セル入れるという前提での話。 この辺もあいまいのままでは。 A1セルにファイル名やその意©j恥部を入れさせるというのは手が込んでいるだけで凝って回っているだけでは? ーー Range("a1").Select ym = Range("z1") これはどういう意味?Z1はA1のミススペルか。Range("a1").Select しなくても、ym = Range("z1") は有効のはず。 ーー http://excelwork.info/excel/booksavecopyas/ ブックのコピーを保存(SaveCopyAs メソッド) 本当に SaveCopyAs メソッド を使うケースなのか?

crossinlove
質問者

お礼

動作確認できました。 ありがとうございます。 Z1はA1のミススペルです。 /が使えないのは把握していませんでした。 SaveCopyAs メソッドは、都度日付のブックを作ろうとしていたので、必要でした。 そこのところの説明が不足していました。 日付もハイフンかアンダーバーか月日表記かを質問するなら指定しておいたほうが良かったです。 ありがとうございます。

  • f272
  • ベストアンサー率46% (8019/17139)
回答No.1

"ym"と書けば、当然に変数名のymとは関係なく、文字列のymです。 変数として使いたければ、ymとします。 なお、windowsのファイル名には / という文字はつかえません。

crossinlove
質問者

お礼

""で囲むと変数が使えなくなるんですね。 半角/駄目なんですね。 全角はOKなんですね。 ありがとうございます。

関連するQ&A

  • 「VBA} XLSMのファイルをXLSX保存したい

    いろいろとVBAが入っているシート1.xlsmがあります。 シート1の内容をXLSXで保存したいのですが、うまくいきません。 解決に向けてご教授ください。 <ステップ1 XLSMでは保存できます。> Private Sub hachu_Click() '担当者名取得(C4) Dim s As String s = Range("C4").Value Debug.Print (s) ActiveWorkbook.SaveCopyAs Filename:= _ "c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsm" '1013_161712木村.XLSM End Sub <ステップ2 XLSXで保存できますが、ファイルを開くときにエラーが出ます。>  FIG.1 Private Sub hachu_Click() '担当者名取得(C4) Dim s As String s = Range("C4").Value Debug.Print (s) ActiveWorkbook.SaveCopyAs Filename:= _ "c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsm" '1013_161712木村.XLSM End Sub <ステップ3 マクロのないシート2にあたい張り付けして、シート2だけ保存> 保存の際にFIG.2の様なアラートが出て、手作業が必要です。> 'シートの複製(複製すると新しいブックが立ち上がります) Worksheets(2).Copy '名前を付け、ファイル形式も決めて特定の場所に保存する。 ActiveWorkbook.SaveAs _ Filename:="c:\ " & Format(Date, "mmdd") & "_" & Format(Time, "hhmmss") & s & ".xlsx", _ FileFormat:=xlOpenXMLWorkbook

  • VBA中の”シート名”を”アクティブシート”に変更

    いつもお世話になっております。 非常に初歩的な質問なのですが、下記の2つのVBA中のシート名をアクティブシートに変更したいのですが、 sheetName = ActiveSheet.Name で試行錯誤するもうまくいきません。 実際のコードは下記の通りです。 これらのシート名”申請書”をアクティブシートに変更したいのです。 このコードは過去にここで教えて頂いたコードで出来ればこれを修正したいので宜しくお願いします。 1.Sub 申請書登録() Dim NewBookName As String With ThisWorkbook.Sheets("申請書") Windows("1.新規・変更登録申請書(原紙)・リスト②T用.xlsm").Activate For i = 5 To Sheets("規格登録・変更リスト").Range("A1048576").End(xlUp).Row + 1 If Sheets("規格登録・変更リスト").Range("B" & i).Value = "" Then With Sheets("規格登録・変更リスト") .Range("A" & i).Value = Sheets("申請書").Range("E3").Value .Range("B" & i).Value = Sheets("申請書").Range("O3").Value .Range("C" & i).Value = Sheets("申請書").Range("E4").Value ・・・・・・・・・・・・・・・・・・・ 2.Sub 申請書保存() Dim NewBookName As String With ThisWorkbook.Sheets("申請書") NewBookName = .Range("F22").Value & " " & .Range("E4").Value & " " & .Range("A2").Value & " " & .Range("A1").Value Worksheets("申請書").ExportAsFixedFormat Type:=xlTypePDF, Filename:="\***\XXXX\1.申請書\申請書" & "\" & NewBookName End With End Sub

  • VBA セル入力された日付データから年月のみを取り出してファイル名につけたい

    セル入力された日付データから年月のみを取り出してファイル名につけたい、のですが・・・ 下記のようなイメージです。  A列    B列 1 日付   商品名   2 2009/9/1 みかん    3 2009/9/2 とまと    4 2009/9/15 きゅうり という明細データがある場合、 このファイルのファイル名を明細行の1番上(A2セル)に日付の年月だけにして保存したいのですが、可能でしょうか。 (上の例だと200909.xlsになるようしたいのですが) ちなみに今は↓こんなコードでコピーしたファイルに名前をつけようとしていますが、エラーになってしまいます・・・ Sheets(1).Copy ファイル名 = "\" & Sheets(1).Range("B13").Value & ".xls" ActiveWorkbook.Close SaveChanges:=True, _ Filename:=ThisWorkbook.Path & ファイル名 宜しくお願い致します!

  • 日付のセルをファイル名にしたい

    お世話になります。 さてかなり前に2つのセルの内容をファイル名にしてpdfで保存して印刷画面の表示までをマクロにする下記のコードを教わって多くのエクセルで使用しているのですがE22が日付の場合が出てきました。 (E22").Textや.ValueやNETで探したコードも試したのですがダメでした。 (要するに分かっていません) やりたいことは、ファイル名は200216XXXXのようにyymmdd+A1セルの内容にしたいのです。 別のセルにE22を参照して「200213」というように表示させてもOKです。 一番簡単な方法を教えて下さい。 Sub 保存印刷() Sheets("提出").ExportAsFixedFormat Type:=xlTypePDF, _ Filename:="\\***\XXXX\?????" & "\" & Range("E22") & Range("A1") & ".pdf" Application.Dialogs(xlDialogPrint).Show End Sub

  • フォルダ名をだすには

    以下のコードでファイル名一覧がだせる。しかしフォルダ名がでない フォルダ名をだすには、どうすればいいか。  sub macro1() Target = InputBox("ディレクトリ名を入力", "ディレクトリの指定", "C:\Windows") Set FS = CreateObject("Scripting.FileSystemObject") Set Fol = FS.GetFolder(Target) Set Fil = Fol.Files ThisWorkbook.Sheets("Sheet1").UsedRange.Delete '見出しを付ける ThisWorkbook.Sheets(1).Range("B2") = "ファイル名" ThisWorkbook.Sheets(1).Range("C2") = "ファイル種別" ThisWorkbook.Sheets(1).Range("D2") = "最終更新日" ThisWorkbook.Sheets(1).Range("E2") = "説明" ThisWorkbook.Sheets(1).Range("B2:E2").Interior.Color = RGB(0, 0, 0) ThisWorkbook.Sheets(1).Range("B2:E2").Font.Color = RGB(255, 255, 255) ThisWorkbook.Sheets(1).Range("B2:Es2").HorizontalAlignment = xlCenter i = 3 For Each Fx In Fil 'ファイル名 sFile = Fx.Name 'ファイル名の書き出し ThisWorkbook.Sheets(1).Cells(i, 2) = sFile 'ファイル種別 sFType = Fx.Type '最終更新日時の書き出し ThisWorkbook.Sheets(1).Cells(i, 3) = sFType '最終更新日 sLMod = Fx.DateLastModified ThisWorkbook.Sheets(1).Cells(i, 4) = sLMod i = i + 1 Next End Sub

  • エクセルVBAの変数利用

    シートのC1セルに入力したブック名をアクティブにするための 変数なのですが、アクティブになりません。 下のようにしていますが、とのようにすればよいでしょうか? Sub test() Dim FileName As Range FileName = ThisWorkbook.Path & "\" & Sheets("sheet1").Range("C1") & ".xls" Workbooks.FileName.Activate End Sub

  • エクセルVBAで65536レコードを超えるCSVファイルの読み込み

    エクセル2000です。 現在CSV形式のファイルをもらい、エクセルVBAで1行づつエクセルに取り込み、加工しています。(CODEは、かなり省略していますが下記の通り) データは将来的には何万件におよぶことも考えられます。 ためしに65536を超えるデータを読み込ませたところ65536を超えたところでやはりエラーになりました。Workbooks.Openでエクセル形式で開いているので65536を超える部分は無視されるからだと思います。 このような場合には、どうやってCSVファイルからデータを読み込めばよいのでしょうか?(なお、エクセルは当分2007にはなりそうもありません。アクセスはまったく使えません。) Sub TEST01() Set cf = Workbooks.Open(Filename:=ThisWorkbook.Path & "\test.csv") Set zerro = cf.Sheets(1).Range("A1:AX1") ThisWorkbook.Sheets("Sheet1").Activate Do Until zerro.Cells(1).Value = "" ThisWorkbook.Sheets("Sheet1").Range("A1:AX1").Value = zerro.Value '処理マクロ省略 Set zerro = zerro.Offset(1) Loop End Sub

  • シート及びファイル名の付け方 その2

    何となく説明不足かと思い変更させていただきました。 Windows XP EXCELL2003です。 いつもお世話になります。 すでに下記でご指導いただきました。 http://oshiete1.goo.ne.jp/qa5331087.html ご教授を仰ぎたいのは  マクロを実行 した時この場合は   アクティブにしているシートに名前がつきます。   ※例えば シート名 「納請書1」(図の上側) これをアクティブなシートに関係なく、シート「FUKU」に 名前が (図の下側 赤い矢印) に付くようにしたいのですがご教授いただけないでしょうか。 マクロ 下記を参考に Option Explicit Sub Auto_Save() ActiveSheet.Name = Range("A4").Value ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Range("A4").Value End Sub よろしく御願いします。

  • VBAでの " の使い方をお教え下さい

     ThisWorkbook.SaveAs Filename:="C:???.xlsm"(???はファイル名です)をVBAの式に直す方法をお教えください。なお、???はセルを参照することにしています。具体的にはRange("O1")です。  ThisWorkbook.SaveAs Filename:="""C:" & "Range(""O1"").xlsm"""とすると、ファイル名に : は使えないというエラーメッセージが出ました。  " の使い方が分かりづらく、悩んでいます。正しい使い方はどのように考えれば良いかも教えていただければ幸いです。よろしくお願いします。

  • VBAで新規ファイル名

    VBAであるテンプレートのファイルを開いて、ファイル名をB3セルに入力された名前で保存したいのです。まず、下にマクロを示します。 Sub 新規_試作マスタ作成() ChDir "C:\Users\H1250-201\Desktop" Workbooks.Open Filename:="C:\Users\H1250-201\Desktop\試作マスター.xlsm" ChDir "D:\A\" & Format(Date, "yyyy年") & "\" & Format(Date, "yyyy年m月") & "" ActiveWorkbook.SaveAs Filename:="D:\A\" & Format(Date, "yyyy年") & "\" & Format(Date, "yyyy年m月") & "\" & Format(Date, "yyyymmdd") & " " & ThisWorkbook.Sheet1.Range("B3").Value & " 試作.xlsm", FileFormat _ :=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End Sub Dドライブの中のAというフォルダがあり、その中に、2014年→2014年1月の順にフォルダがあります。ただし、Aの中には2013年~2020年、2014年の中には、2014年1月~2014年12月のフォルダがあるのです。そこで、今日の日付を参照してそれに応じたフォルダ分けを行い、ファイルの頭に「日付」、その後に「B3セルに入力された名前」、「試作」の順に 「日付」 「B3セルに入力された名前」 「試作」という名前で保存されるマクロを作成したいのです。 上のマクロでは、ThisWorkbook.Sheet1.Range("B3").Valueの部分がおかしくてうまく行きません。個々の部分をただ文字列として"○○"とするとうまくいきました。 つまり、マクロのある自身のファイルのセルを参照したいのです。差し支えなければご回答願います。

専門家に質問してみよう