• 締切済み

エクセル VBA 今日の日付を変数にする

いつまでたってもVBA初心者のものですが 前回は、セルに入力されている日付を変数に利用する場合のことを 聞かしていただいたのですが 今回は、今日の日付を変数に利用する場合はどうすればいいのでしょう? Sub Today() Dim i As String i = Day(Today()) Range("A1").Value = i End Sub こんな感じなんですけど上手くいきません 何から何まで頼りっきりですが、よろしくお願いします

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.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

48946
質問者

お礼

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

noname#140971
noname#140971
回答No.4

<感想> まず、質問文を見てやったことは、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() とオリジナルな関数名を付与されることを勧めておきます。

48946
質問者

お礼

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

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

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

48946
質問者

お礼

>「Functionまたは変数が必要です」と出るじゃないですか。 そこまで、絞って言ってくれているのに Functionって何を指しているのか用語がよくわかっていない >すぐVBA todayでWEB照会してみたらどうです そういう探し方をすることすら知らない、というか発想できない

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.2

いろんな方法が有ります。 Sub Today() Dim i As String i = Date Range("A1").Value = i End Sub

48946
質問者

お礼

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

noname#78947
noname#78947
回答No.1

>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円程度でも買えますよ。

48946
質問者

お礼

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

関連するQ&A