こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセル 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に表示させたいのです。
よろしくお願いします。

投稿日時 - 2005-05-25 15:47:12

QNo.1409155

a32

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

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

投稿日時 - 2005-05-25 20:19:58

ANo.3

そんなに難しく考えなくても良いと思いますよ。

Sheet2.Range("A1").Value = Year(Date) & "/" & Month(Date) & "/" & Sheet1.Range("A1").Value
で良いと思います。

#2の方同様、Sheet1の[A1]の内容はチェックしてませんので、エラー処理を追加してください。

まあエラー処理をしなくても、データを単純に結合しているだけなので表示が崩れるぐらいの問題しか出ないと思います。
たとえば、Sheet1の[A1]の内容が、「A」だった場合、Sheet2の[A1]の内容は「2005/5/A」になるだけです。

投稿日時 - 2005-05-25 17:07:59

ANo.2

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

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

で如何でしょうか。

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

投稿日時 - 2005-05-25 16:25:43

ANo.1

sheet2のA1セルに

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

ではダメでしょうか。

投稿日時 - 2005-05-25 16:05:43

あなたにオススメの質問