dポイントプレゼントキャンペーン実施中!

いつまでたってもVBA初心者のものですが
前回は、セルに入力されている日付を変数に利用する場合のことを
聞かしていただいたのですが
今回は、今日の日付を変数に利用する場合はどうすればいいのでしょう?

Sub Today()
Dim i As String
i = Day(Today())
Range("A1").Value = i
End Sub

こんな感じなんですけど上手くいきません
何から何まで頼りっきりですが、よろしくお願いします

A 回答 (5件)

今日の日付を変数で持ちたいなら以下のようになります


Sub Macro1()
Dim tDate As Date
 tDate = Date
 Range("A1").Value = tDate
End Sub

#02さんの補足で
>実は変数に利用するのは
>先月の月の数字なんです
>今日8月ですが
>1月の場合は変数に12を使いたいのです
これは意味が分かりません。もしかしたら「日付を変数で持つ」のではなく「月」を変数で持つということですか?
そうであれば整数型の変数になりますね

Sub Macro2()
Dim tDate As Date
Dim tMonth As Integer
 tDate = Date '日付型変数に格納する
 tMonth = Month(tDate) '日付型変数から「月」を取り出す
 MsgBox tMonth & "月"
End Sub
    • good
    • 0
この回答へのお礼

すいません質問の仕方が悪かったので
あらためて
質問しなおします

お礼日時:2007/08/17 12:48

<感想>



まず、質問文を見てやったことは、TODAYをExcelのヘルプで検索すること。
すると、日付/時刻関数として存在することが判りました。
つまり、これで、関数名の Today はチト拙いことが判ります。

ですから、VBエディタをオープンして、[挿入]-[標準モジュール]した後の[挿入]-[プロシージャ]の関数名を工夫。
Function を選び、[GetToday] としました。

Option Explicit

Public Function GetToday() As Date
  
End Function

その後、 As Date を付加して GetToday() 関数が、時刻/日付型を戻すようにしました。

Public Function GetToday() As Date
  Dim Hiduke As Date
  
  Hiduke = Date
  GetToday = Hiduke
End Function

もちろん、変数に取り込まなくても構わないです。

Public Function GetToday() As Date
  GetToday = Date
End Function

いずれにしろ、これで A1 の式に =GetToday() と書けば、本日の日付が表示されます。
なお、A1 の式に =Today() と書いても同じ結果を得られます。
そういう関数が用意されているので当然のことです。

<補足>

なお、特定のレンジに日付をコードでセットする場合のは、このような書き方も考えられます。

  SetToday Me.Range(a1), 0    ' 本日
  SetToday Me.Range(a1), -1    ' 先日
  SetToday Me.Range(a1), 1    ' 明日

<シートのモジュール>

Private Sub CommandButton1_Click()
  SetToday Me.Range(a1), 1
End Sub

<標準モジュール>

Public Sub SetToday(ByVal T As Range, ByVal M As Integer)
  T = Date + M
End Sub


VB だけで関数を用いている限りでは、既定の関数との関数名の競合という不具合はないかも知れません。
が、式に組み込むことも考えられます。
そういう意味では、GetToday()、SetToday() とオリジナルな関数名を付与されることを勧めておきます。
    • good
    • 1
この回答へのお礼

横着者に沢山のご意見ありがとうございます
いろんな調べ方があるのだと

お礼日時:2007/08/17 12:19

質問のコードを実行したら


i = Day(Today())
の行でエラー指摘があり、「Functionまたは変数が必要です」と出るじゃないですか。
そこまで、絞って言ってくれているのに、質問が
「>今日の日付を変数に利用する場合は
と一般的であるのはおかしい。
変数が未定義か関数が見つからないといっているのに。
エクセル関数のTODAY()とVBAのNOW()の違いは、不統一だが、有名な点。
「Accessの場合、今日の日付を取得する関数はTODAYではなくDateなのです。」 ということもある。
ーー
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr; …
Range("a1").Value = WorksheetFunction.today()
については、todayはワークシート関数として提供されていないので、エラーが出ます。
ーー
すぐVBA todayでWEB照会してみたらどうです。
ーー
Dim i As String
と文字列にしているが、Day関数は整数を戻すとなっていますよ。
今回はエラーにはならないですが。またエクセルの強力な数値化機能で、数がセットされているが。
ーー
Sub Today()
関数やステートメントその他にありそうな名前をストレートにモジュール名、変数名などに
使わないほうが良いのではないですか。
    • good
    • 0
この回答へのお礼

>「Functionまたは変数が必要です」と出るじゃないですか。
そこまで、絞って言ってくれているのに

Functionって何を指しているのか用語がよくわかっていない

>すぐVBA todayでWEB照会してみたらどうです

そういう探し方をすることすら知らない、というか発想できない

お礼日時:2007/08/17 12:07

いろんな方法が有ります。


Sub Today()
Dim i As String
i = Date
Range("A1").Value = i
End Sub
    • good
    • 1
この回答へのお礼

実は変数に利用するのは
先月の月の数字なんです
今日8月ですが
1月の場合は変数に12を使いたいのです
あんまり直接聞くのもなんなので
今日の日付の利用し方を聞いてそれから何とかしようかと

お礼日時:2007/08/17 11:43

>i = Day(Today())



ここが間違い。Day()の中にはToday()なんていうVBAで定義されていないでたらめな関数じゃなくてNowが入ります。それに質問者さんの書き方だと無駄が多いです。Sud Today()とEnd Subの間が質問者さんの書き方だと3行ですけど1行で済みます。一応、訂正済みのものを載せておきます。

Sub Today()
Range("A1").Value = Day(Now)
End Sub

それと、ココで聞く前に自分でも探す努力をしてください。「エクセル VBA」などで検索すればVBAの解説サイトがいくらでも出てきます。こんな初歩的な部分ならサイトの内容でほぼ確実に理解できますよ。もしくはVBAの解説本を買ってください。中古で探せば500円程度でも買えますよ。
    • good
    • 0
この回答へのお礼

厳しいご意見ありがとうございます
探し方がよく分からないというか
探してはみたんですけど

お礼日時:2007/08/17 11:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています