2017-07-13 6 views
2

現在、私のExcelには、yyyymmと書かれた年月の文字列があります。 例:201706yyyymm数値の文字列をvbaを使用して終了月の日付に変換する方法は?

今は別のワークシートの月末に変換したいと思います。例:20170630

質問は今、文字列の月の値に基づいて曜日を自動作成するようExcelに指示するのですか?

if文を使用して、文字列の末尾の終了値に基づいて毎月宣言することを計画していました。 (つまり:2017 、date = 20170630)

しかし、2月のうるう年はうまくいかないと思っていました。それ以外の方法もありますか?

答えて

3

はこれを試してみてください、この機能に詳細を取得するためにthisページをご覧ください

dtmDate = 201706 (or put there value from cell) 

dhLastDayInMonth = DateSerial(Left(dtmDate, 4), Right(dtmDate, 2) + 1, 0) 
+0

ありがとうございます。好奇心から、コードの「+ 1、0」部分は何をしますか? – hjh93

+1

'Right(dtmDate、2)'は月を返し、 '+ 1'はそれに1を加えて7月を参照します。 0は曜日の数字です.0の数字は効果的に前の月の最後の日ですので、6月30日です。 –

1

私はしばしば、翌月の初日(常に1日目)をとり、日付の1を引いて少しの回避策を使用します。残念ながら、それだけで日付値を扱う:

はこの1つを試してみてください:

Sub LastDayOfMonth() 

    strInput = "201711" 
    y = Left(strInput, 4) 
    m = Right(strInput, 2) 

    dat = DateSerial(y, m + 1, 1) - 1 

End Sub 
2

あなたの問題を解決する最も簡単な方法でもVBA makroを使用しないことです。 DateLeftRight、およびEOMonth関数を使用すると、文字列を下の例のように正確に日付に変換できます。あなたもVBAを必要としない、この使用

=EOMONTH(DATE(LEFT(A1;4);RIGHT(A1;2);1);0) (例えば、日付文字列がA1にある場合)を

+1

使用例: '= EOMONTH(LEFT( "201711"、4)& " - " &RIGHT( "201711"、2)&" - 01 "、0)' –

1
Dim dLast As Date 
dLast = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy"))) 

それとも、セルA1に日付を入れる場合は、メッセージボックスを通して:

MsgBox Format([eomonth(A1,6)], "dd/mm/yyyy") 
関連する問題