[[20150720223743]] 『ファイル名の日付がシリアル値になってしまう』(fafa) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ファイル名の日付がシリアル値になってしまう』(fafa)

Excelで月ごとのファイルを作成していて、ファイル名はKV-1-2015⁻06.xlsmとなっています。

現在開いているファイル名から翌月のファイル名のファイルを作成するためのマクロの中で、DateAddのコードのところで年号・月がシリアル値で表示されてしまいます。
コードの一部ですが次のようになっています。

Dim myfile As String
Dim s As String
Dim sYear As String
Dim sMachine As String
Dim nwfi As String
Dim nwfr As String
Dim SaveDir As String

myfile = ThisWorkbook.Name
s = Replace(myfile, ".xlsm", "")
sYear = Left(Right(s, 7), 4)
sMachine = Left(s, Len(s) - 8)
nwfi = Format(DateAdd("m", 1, Replace(Replace(Replace(myfile, sMachine, ""), "-", ""), ".xlsm", "")), "yyyy-mm")
nwfr = Format(DateAdd("m", 1, Replace(Replace(Replace(myfile, sMachine, ""), "-", ""), ".xlsm", "")), "yyyy")
SaveDir = "C:\Users\Desktop\" & sMachine & "\" & nwfr
・・・

マウスを持っていくとnwfiの値が"2451⁻10"、nwfrが"2451"となっています。
何が原因でしょうか?
改善策等ありましたらアドバイスよろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


 >>何が原因でしょうか? 
 >>改善策等ありましたらアドバイスよろしくお願いします。 

 まず、この不具合の発生の場所を自分で調べます。
 最終的に、Replaceの三連発をDateAddでくるみ、さらにFormatで仕立て上げる1行コードにするとしても、
 原因究明のためには、まず単発に書き直します。

 Sub Test()
    Dim myfile As String
    Dim s As String
    Dim sYear As String
    Dim sMachine As String
    Dim nwfi As String
    Dim nwfr As String
    Dim SaveDir As String

    myfile = "KV-1-2015-06.xlsm"

    s = Replace(myfile, ".xlsm", "")

    sYear = Left(Right(s, 7), 4)
    sMachine = Left(s, Len(s) - 8)

    myfile = Replace(myfile, sMachine, "")
    myfile = Replace(myfile, "-", "")
    myfile = Replace(myfile, ".xlsm", "")
    myfile = DateAdd("m", 1, myfile)
    myfile = Format(myfile, "yyyy-mm")

 End Sub

 で、このプロシジャの任意のところをマウスでクリックし、F8 を押してステップ実行を開始します。
 コードが黄色く光りながら進んでいきます。
 myfile = Replace(myfile, sMachine, "") の黄色が、次のコードに移ったら、このコードが実行されたということですから
 ここで myfileにマウスを当てます。すると、myfileの値がポップアップされます。
 このようにして、1行1行、実行しながら myfileの値を調べます。
 最初は思惑通り。でも、どこかで、あれ?? となります。
 犯人はそこです。

 次に、

 Sub Test2()
    Dim s As String

    s = "2015"
    MsgBox DateAdd("m", 1, s)

    s = "201506"
    MsgBox DateAdd("m", 1, s)

    s = "2015/06/01"
    MsgBox DateAdd("m", 1, s)

 End Sub

 こんなコードを書いて実行してみます。
 最初の2つ、表示される日付は なんだこれは? でしょうし、上記のステップ実行で、あれ? となった現象だと思います。

 日付データは、ご自身でコメントされる通り、正体はシリアル値です。
 このシリアル値は 整数部に 1900年1月1日の0時を1 とした【経過日数】、小数部に、その時刻の24時間に対する割合が入っています。

 2015 というのは 2015年ではなく 2015日目、201506 は 2015年6月ではなく 201506日目 とみなされます。

(β) 2015/07/21(火) 05:32


 こんな組み立て方も。

 Sub Test3()
    Dim s As String

    s = "KV-1-2015-06.xlsm"
    s = Replace(s, ".xlsm", "")

    MsgBox Left(s, Len(s) - 7) & Format(DateAdd("m", 1, Right(s, 7) & "-01"), "yyyy-mm") & ".xlsm"

 End Sub

(β) 2015/07/21(火) 05:52


回答ありがとうございます。
dateaddに問題があるとは思っていましたが、201506になっていたためにダメだったんですね。
nwfiのところで2015の前の"-"を消すつもりが、年号と月の間の分も消してしまったために、シリアル値に変換されてしまったようですね。
nwfi = Format(DateAdd("m", 1, Replace(Replace(myfile, Left(s, Len(s) - 7), ""), ".xlsm", "")), "yyyy-mm")

このようにして無事2015⁻07が得られるようになりました。
複雑な式は一つ一つ噛み砕いて確かめることが大事だと非常に勉強になりました。
どうもありがとうございました。
(fafa) 2015/07/21(火) 18:06


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.