質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

354閲覧

VBA DateDiff関数の使い方

321Kurumins

総合スコア18

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/05/09 04:29

コンボボックスに日付を2つ入力してもらってその日付の日数差をDateDiffを使って表示するようにしたいです。
今のやり方では日数差ではなくよくわからない日付が出るのでやり方を教えてください。

Sub ボタン1_Click() Dim n, g, p As Long Dim h As String n = ComboBox1.Text g = ComboBox2.Text p = ComboBox3.Text h = n & "/" & g & "/" & p Dim n2, g2, p2 As Long Dim h2 As Date Dim h3, dd As Date n2 = ComboBox4.Text g2 = ComboBox5.Text p2 = ComboBox6.Text h2 = n2 & "/" & g2 & "/" & p2 h3 = CDate(h) dd = DateDiff("d", h2, h3) MsgBox dd End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

修正しました。以下のようにしてください。
不明点は、補足してください。

VBA

1Sub ボタン1_Click() 2 Dim n, g, p As Long 3 Dim h As String 4 5 n = ComboBox1.Text 6 g = ComboBox2.Text 7 p = ComboBox3.Text 8 h = n & "/" & g & "/" & p 9 10 Dim n2, g2, p2 As Long 11 Dim hh As String 12 Dim h2 As Date 13 Dim h3 As Date 14 Dim dd As Long 15 n2 = ComboBox4.Text 16 g2 = ComboBox5.Text 17 p2 = ComboBox6.Text 18 hh = n2 & "/" & g2 & "/" & p2 19 h2 = CDate(hh) 20 h3 = CDate(h) 21 dd = DateDiff("d", h2, h3) 22 23 MsgBox dd 24End Sub 25

投稿2022/05/09 04:52

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DateDiffの結果をDate型ではなくLong型で受け取れば正常に出てきます。
エクセルでも、適当な数字を入れて日付型を指定すると、それをシリアルとして変な日付が出てきますが、同じことが起きています。

VBA

1Sub ボタン1_Click() 2Dim n As Long, g As Long, p As Long 3Dim h As String 4 5n = ComboBox1.Text 6g = ComboBox2.Text 7p = ComboBox3.Text 8h = n & "/" & g & "/" & p 9 10Dim n2 As Long, g2 As Long, p2 As Long 11Dim h2 As Date 12Dim h3 As Date 13Dim dd As Long 14n2 = ComboBox4.Text 15g2 = ComboBox5.Text 16p2 = ComboBox6.Text 17h2 = n2 & "/" & g2 & "/" & p2 18 19h3 = CDate(h) 20dd = DateDiff("d", h2, h3) 21 22MsgBox dd 23 24End Sub

投稿2022/05/09 04:48

Usirow

総合スコア364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Dim h3, dd As Date とddをDate型で宣言しているので日付表示になります。
日数差なので、Long型で宣言すればいいでしょう。
(ちなみに、上記のコードでは、h3 は Variant型になります。)

上記の点も含めて型宣言を正しく修正すると、下記のようなコードになります。

vba

1Sub ボタン1_Click() 2 Dim n As String, g As String, p As String 3 Dim h As String 4 5 n = ComboBox1.Text 6 g = ComboBox2.Text 7 p = ComboBox3.Text 8 h = n & "/" & g & "/" & p 9 10 Dim n2 As String, g2 As String, p2 As String 11 Dim h2 As String 12 Dim dd As Long 13 n2 = ComboBox4.Text 14 g2 = ComboBox5.Text 15 p2 = ComboBox6.Text 16 h2 = n2 & "/" & g2 & "/" & p2 17 18 dd = DateDiff("d", h2, h) 19 20 MsgBox dd 21 22End Sub

あと、CDate関数で、日付として成立するかどうかチェックするコードを追加した方がいいでしょう。

投稿2022/05/09 04:46

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問