• ベストアンサー

VBAでの日数のカウント

Functionを使って、年号と月を入力したらその月の日数が分かる関数を作りたいのですが、どうしたらいいでしょうか。 ちなみにinputboxで表示させたいのですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 このような内容は、一般の関数でよいはずです。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

lemonail
質問者

補足

ありがとうございます。私が表示したいもの、そのものでした。 ただ、as longを使って表示させたいと思っているのですが、variantじゃなくても出来るものでしょうか。 出来たらアドバイスをお願いします。

その他の回答 (3)

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

普通の関数でできますね。 あえてユーザー関数にするなら、エクセルが日付のシリアル値で値をもってくれているおかげで、来月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はテストのため入れたもので削除してください。

lemonail
質問者

お礼

ありがとうございます。 どのようにしたら日数計算が出来るのか参考になりました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

'年号と月からその月の日の数を返す 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で表示 については意味がよく分かりません

lemonail
質問者

お礼

ありがとうございます。 初心者なので、とても参考になります。

回答No.1

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

lemonail
質問者

お礼

即答していただき、ありがとうございます。 参考になりました。

関連するQ&A