• 締切
  • 困ってます

エクセル VBAの日付計算?について

  • 質問No.1409155
  • 閲覧数345
  • ありがとう数0
  • 回答数4

お礼率 6% (7/109)

現在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件)

  • 回答No.4

ベストアンサー率 57% (3570/6233)

あまり、こういうのは考えたこともありませんでしたが、こんな方法もあるかなって思います。#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)としないのは、セルの書式を変えているので、そのまま、自動キャストが使えるって考えました。
  • 回答No.3

ベストアンサー率 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」になるだけです。
  • 回答No.2

ベストアンサー率 62% (292/464)

転記してゆくVBAの過程でのことですね。
もし、そうだとすると、

Worksheets("Sheet2").Range("A1").Value = _
Date - Day(Date) + Worksheets("Sheet1").Range("A1").Value

で如何でしょうか。

但し、Sheet1のセルA1の内容をチェックしていませんので、数値以外が
想定される場合を考慮し、エラーに対処が必要と思います。
  • 回答No.1

ベストアンサー率 25% (1361/5264)

sheet2のA1セルに

=DateSerial(Year(Date), Month(Date), 1)のセ+A1-1

ではダメでしょうか。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ページ先頭へ