- 締切済み
エクセル VBAの日付計算?について
現在sheet1にある表をsheet2に転記してゆくVBAを作成しております。sheet1にある日付データセルA1(日のみ)が入っているセルと月初を求めるVBA(DateSerial(Year(Date), Month(Date), 1))を加算して西暦/月/日にしたいのです。 例えば、DateSerial(Year(Date), Month(Date), 1)の答は、2005/05/01になってきます。そこに日付データセルA1が20だとすれば、表示は、2005/05/20となると思います。それをsheet2 セルA1に表示させたいのです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
あまり、こういうのは考えたこともありませんでしたが、こんな方法もあるかなって思います。#3さんのエラー処理は、こんな方法でできると思います。 OS側の設定の日付の書式のプロパティも変えてみましたが、問題はありません。私の予測の付かないものは、分からないし、それは、使う人のお任せになってしまいますね。 Sub test() Dim myDate As Variant With Sheet2.Range("A1") .NumberFormatLocal = "yyyy/mm/dd" myDate = Format$(Date, "yyyy/mm/") & Sheet1.Range("A1").Text If IsDate(myDate) Then .Value = myDate End With End Sub myDate をCDate(myDate)としないのは、セルの書式を変えているので、そのまま、自動キャストが使えるって考えました。
- Aquarius172
- ベストアンサー率36% (111/308)
そんなに難しく考えなくても良いと思いますよ。 Sheet2.Range("A1").Value = Year(Date) & "/" & Month(Date) & "/" & Sheet1.Range("A1").Value で良いと思います。 #2の方同様、Sheet1の[A1]の内容はチェックしてませんので、エラー処理を追加してください。 まあエラー処理をしなくても、データを単純に結合しているだけなので表示が崩れるぐらいの問題しか出ないと思います。 たとえば、Sheet1の[A1]の内容が、「A」だった場合、Sheet2の[A1]の内容は「2005/5/A」になるだけです。
- ja7awu
- ベストアンサー率62% (292/464)
転記してゆくVBAの過程でのことですね。 もし、そうだとすると、 Worksheets("Sheet2").Range("A1").Value = _ Date - Day(Date) + Worksheets("Sheet1").Range("A1").Value で如何でしょうか。 但し、Sheet1のセルA1の内容をチェックしていませんので、数値以外が 想定される場合を考慮し、エラーに対処が必要と思います。
- 6dou_rinne
- ベストアンサー率25% (1361/5264)
sheet2のA1セルに =DateSerial(Year(Date), Month(Date), 1)のセ+A1-1 ではダメでしょうか。