- ベストアンサー
VBAでの日数のカウント
Functionを使って、年号と月を入力したらその月の日数が分かる関数を作りたいのですが、どうしたらいいでしょうか。 ちなみにinputboxで表示させたいのですが。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 このような内容は、一般の関数でよいはずです。VBAの必要性がないと思います。まあ、もちろん、Evaluate で入れても可能ですが。 A1: H17 A2: 7 =DAY(DATEVALUE(A1 &"/"& A2+1 &"/1")-1) // 以下は、H17 と年号を関数に直接入れる場合は、"H17" とクォーテーションマークで括らなくてはなりません。InputBox の役割がよく分かりませんが、以下のようなことでしょうか? '<標準モジュール登録> Function DaysInMonth(Nen As Variant, Mon As Variant) Dim myDate As Date myDate = DateValue(Nen & "/" & Mon + 1 & "/1") - 1 DaysInMonth = Day(myDate) End Function Sub main() Dim Nen As Variant, Mon As Variant Nen = Application.InputBox("年号を入れてください", Type:=2) If VarType(Nen) = vbBoolean Or Nen = "" Then Exit Sub Mon = Application.InputBox("月数を入れてください", Type:=2) If VarType(Mon) = vbBoolean Or Mon = "" Then Exit Sub MsgBox Nen & "年" & Mon & "月 は、 " & DaysInMonth(Nen, Mon) & " 日です。" End Sub
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
普通の関数でできますね。 あえてユーザー関数にするなら、エクセルが日付のシリアル値で値をもってくれているおかげで、来月1日から当月1日を引けばよい。 Function tukid(y, m) d1 = DateSerial(y, m, 1) d2 = DateSerial(y, m + 1, 1) MsgBox d2 & " " & d1 tukid = d2 - d1 End Function でよいとおもいます。Msgboxはテストのため入れたもので削除してください。
お礼
ありがとうございます。 どのようにしたら日数計算が出来るのか参考になりました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
'年号と月からその月の日の数を返す Function monthDay(年号, 月) As Integer Dim dateStr As String Dim aDate dateStr = 年号 & "/" & 月 & "/1" aDate = DateValue(dateStr) monthDay = Day(DateSerial(Year(aDate), Month(aDate) + 1, 0)) End Function '--------------------------------------------------------------- 使い方: 平成15年の2月の月の日 =monthDay("H15",2) 2004年の2月の月の日 =monthDay(2004,2) >inputBoxで表示 については意味がよく分かりません
お礼
ありがとうございます。 初心者なので、とても参考になります。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
Function Get日数(ByVal in年 As Integer, ByVal in月 As Integer) As Integer Dim dat今月一日 As Date Dim dat今月末日 As Date Dim dat翌月一日 As Date '今月一日 dat今月一日 = DateSerial(in年, in月, CInt(1)) '翌月一日 = 今月一日 + 一ヶ月 dat翌月一日 = DateAdd("M", "1", dat今月一日) '今月末日 = 翌月一日 - 一日 dat今月末日 = DateAdd("d", -1, dat翌月一日) '今月末日がそのまま今月の日数 Get日数 = Day(dat今月末日) End Function
お礼
即答していただき、ありがとうございます。 参考になりました。
補足
ありがとうございます。私が表示したいもの、そのものでした。 ただ、as longを使って表示させたいと思っているのですが、variantじゃなくても出来るものでしょうか。 出来たらアドバイスをお願いします。