ExcelVBA初心者です。
下記プログラムを組んでいるのですがMyDateの戻り値が常に -1された数字になってしまいます。
たとえば、25を入力したら24になる。これはなぜなのでしょうか?
また、0だと30になってしまいます。
Sub hani()
Dim MyDate As Date
MyDate = Application.InputBox("報告する日を入力してください", "報告日", Format(Now, "dd"))
If Format(MyDate, "dd") > 0 And Format(MyDate, "dd") > 32 Then
MsgBox Format(MyDate, "dd")
MsgBox "範囲内"
Else
MsgBox Format(MyDate, "dd")
MsgBox "範囲外"
End If
End Sub
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
Excel関数の日付型シリアル値では0=1900/01/00ですが、VBAのDATE型では 0=1899/12/30 になります。
したがって、
00=1899/12/30
01=1899/12/31
02=1900/01/01
03=1900/01/02
:
25=1900/01/24
と、なります。このDATE型変数の日付部分だけを取り出しているので、25と入力すると24が返って来る事になりますし、00を入力すると30が返ってきます。
なぜ、起点日が1899/12/30なのかは知りませんが、Excel VBAだけでなく、Accessも同様だったはずです。
No.1
- 回答日時:
Application.InputBox関数の戻り値がVariant/String "26"になって,
これは数値として解釈できるからVariant/Long 26になって
このVariant/Longに対応するDate型の値が変数MyDateに格納されます。
つまり,シリアル値の考えから行くと,
http://www3.tokai.or.jp/excel/kansu/hiduke.htm
MyDateは1900/01/25です。1900/01/25に対して,
日を表示するので25になります。0を入力したときに30になる理由はわかりません
Sub hani()
MsgBox (CDate(26))
End Sub
とか
Option Explicit
Sub hani()
Dim i As Integer
'エラーにならない。Integerは整数だったはずで,
'3.1がそのまま代入できるわけじゃないから
'何らかの変換をして代入するはずだ。
'実際Msgbox関数で表示されたのは3.1じゃなかった。
i = 3.1
MsgBox (i)
End Sub
の結果を予測してみるといいかもしれませんね。
#VB.NET以降ではOption Strict Onをつけることで回避できるような仕組みがあったかと思いますが,VB6/VBAにはないでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Access(アクセス) エクセルのVBAについて教えてください。 4 2023/01/21 10:21
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Access(アクセス) チェックボックスにチェックが入った後の挙動 1 2022/08/21 12:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
Eclipseコンソール表示を、リセ...
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
C言語について
-
プログラミングC言語について
-
cout関数を使っているのですが...
-
C言語でつるかめ算をするにはど...
-
switch文 defaultについて
-
至急教えてください!プログラ...
-
java初心者です。入力されたの...
-
Userformの入力順序をタブオー...
-
WindowsでEOF
-
C言語
-
MinGWのC言語でCTRL+Zで処理が...
-
C言語scanf_sで何故か2回入力に...
-
C++のcinの動作
-
プログラムの進行が一時ストッ...
-
漢字のソートについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
double型が正常に認識されてい...
-
java初心者です。入力されたの...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
C言語scanf_sで何故か2回入力に...
-
if文の条件にscanf関数を使うと…?
-
プログラミングの問題です 「金...
-
Linuxで入力待ちなしkeyread関...
-
ワードで文字を入力する時の変...
-
cout関数を使っているのですが...
-
batプログラム上で文字列を入力...
-
Userformの入力順序をタブオー...
-
scanf が無視されます
-
C言語 逆ピラミッドの作り方
-
gets_sがうまく動かない
-
Excel VBAで、Application.Inpu...
おすすめ情報