• ベストアンサー

Excel VBAで年度をまたぐ期間の月末日を求める方法

soma3の回答

  • ベストアンサー
  • soma3
  • ベストアンサー率39% (16/41)
回答No.3

簡単ではありますが、ソースを紹介します。 Dim startDate As String Dim endDate As String Dim iLoop As Integer startDate = Sheet1.TextBox1.Text endDate = Sheet1.TextBox2.Text For iLoop = 0 To DateDiff("m", CDate(startDate), CDate(endDate)) - 1 MsgBox DateAdd("d", -1, DateAdd("m", iLoop + 1, CDate(startDate))) Next Sheet1.TextBox1.Textのテキストボックスに開始月が 「03年11月」という形式で入力されています。 Sheet1.TextBox2.Textのテキストボックスに終了月が 「04年4月」という形式で入力されています。 このような場合、メッセージボックスでの表示となりますが、 「2003/11/30」 「2003/12/31」 「2004/01/31」 「2004/02/29」 「2004/03/31」 と3月分まで表示されます。

biwajima
質問者

お礼

有難うございました。 まさに私の求めていたコードです。 > For iLoop = 0・・・ ゼロから初めて良いんですね~ イマイチ意味が分かりません

関連するQ&A

  • VBA 値が月末の時は月に1を足して日は1とする

    よろしくお願いします。 次へのコマンドボタンを押すと下の段にカーソルが移動します。 ※1 その時に日に1を足して表示しますが、前段の値が月末の時は、 自動的に月に1を足して日は1とする。 ※2 同じように月が12の場合は年に1を足して月は1、日も1とする TextBox1⇒年 TextBox2⇒月 TextBox3⇒日 ActiveCell.offset(1, 0).Activate TextBox3.Value = TextBox3.Value + 1 ActiveCell.Value=TextBox1.Value &"/"& TextBox2.Value &"/"& TextBox3.Value

  • エクセルvbaセル範囲について

    困っております。 ご教授ください。 エクセルシート上に1~10の数字が列方向に並んでいます。 ユーザーフォームでtextbox1とtextbox2を作成します。 textbox1とtextbox2は1~10の間で範囲を入力します。 textbox2でエンターを押されたときに処理が開始します。 例えばtextbox1に「3」、textbox2に「8」が入力された場合、 3,4,5,6,7,8のセル範囲を選択したいのですがどのようにすればよろしいでしょうか。 よろしくお願いします。

  • エクセル 期間内で一番多い月をカウントする方法

    エクセルを使い、複数の項目に関係する期間で、一番多い月(または各月の重複数)を把握したいと思っています。 例)   開始月,終了月 A 2011/4,2011/7 B 2011/6,2011/12 C 2011/7,2011/10 の場合、4,5,11,12は1、6,8,9,10は2、7は3という感じです。 開始月と終了月は出ているのですが、ここから途中の月数のカウント・・・となると、 関数で出来るのかと悩みます。 アドバイスをいただけると助かります。

  • エクセルVBAのAutoFilterについて

    はじめまして。今回初めてエクセルVBAに挑戦していますが、行き詰まってしまいました。 エクセルで顧客管理データベースを作っています。シートの一番上の行に、ID、顧客名、依頼内容、依頼日、処理終了日・・・・などデータベースでいう「フィールド名」を入力し、2行目以下に顧客データを打ち込む形です。 当社では週一回会議で、前の週の新規顧客名の一覧と前の週に処理終了した顧客名の一覧をリストにして配りますが、エクセルVBAを使ってそのリストを作るプログラムを作ろうと試みました。  まず、UserFormを用いて、抽出したい期間(何年何月何日から何年何月何日)をそれぞれTextBox1、TextBox2の値で所得します。そして、開始年月日をDateFromという変数に代入、終了年月日をDateToという変数に代入し、AutoFilterで検索して別シートにコピーするという流れです。  前置きが長くなりましたが、質問です。 1 この変数の定義、つまり DateFrom = UserForm1.TextBox1.value という文で所得しようと思いますが、うまくいきません。書式がおかしいのでしょうか? 2 AutoFilterの使い方を「新しいマクロの記録」を使って見てみると Selection.AutoFilter Field:=10 _ , Criteria1:=">=2004/4/27", Operator:=xlAnd _ , Criteria2:="<=2004/5/10" というかたちになるようですが、>=2004/4/27の部分を変数を使って指定するには、書式はどのようにしたらいいのでしょうか。このまま>=DateFromの形ではうまくいかないようです。

  • エクセル関数で期間を求める方法について

    エクセル関数で期間を何年何ヶ月と1個のセルに求める方法が過去の質問の回答で A1にスタート(開始日) B1にエンド(終了日) C1セルに =DATEDIF(A1,B1,"Y")&"年" & DATEDIF(A1,B1,"YM") & "月" カレンダの応答日主義で1ヶ月を数える計算がありました。 これとは別に何年何ヶ月の月計算を属した日から属した日までの月数 (例)開始日2005年3月31日~終了日2005年4月1日の場合2ヶ月で計算させる方法を A1にスタート(開始日) B1にエンド(終了日) C1セルに 何と入れたら良いかどなたか教えてください。

  • VBAで月末日の求め方について

    Excel VBAでUserForm1で年月日を入力すると、その月の月末日を取得したいと思っています。 下のようなプログラムにすると、 「2006/3/1」と入力された場合は、lasDayに「31」が取得されるのですが、    myDate = TextBox1.Text    lasDay = Day(DateAdd("d", -1, DateAdd("m", 1, myDate))) 「2006/3/5」などと入力された場合もlasDayに「31」を取得するには どのようにしたらよいのでしょうか。 また、入力された日にちが25日以降の場合は、 翌月の月末日の値を取得したいのですが、どのようにしたらよいのでしょうか。 (例:「2006/2/25」と入力したら、lasDayは翌月(3月)の月末日「31」を取得) どのたか回答お願いします。

  • エクセルでの期間計算(月末数でカウント)

    エクセルで月数をカウントしたいのですが、 月末に在籍した場合はカウント、 月末に居ない場合はカウントしない、 と言う形で月数を求める良い方法はありますか? 例) 初        末       結果 4月1日    4月10日    0 4月1日    4月30日    1 4月1日    5月10日    1 4月1日    5月25日    1 4月1日    6月1日     2 4月10日   4月25日    0 4月10日   5月5日     1 4月10日   5月25日    1 4月10日   6月1日     2 このようなイメージですが、良い方法はありますでしょうか?

  • エクセルVBA、年齢計算について質問です

    失礼いたします、生年月日、基準日をテキストボックスに入力し、年齢を算出するマクロを作成してるのですが質問です。 以下のようなマクロを組んでいるのですが。 Dim 生年月日 As String Dim 開始日付 As String Dim 年齢 As String 生年月日 = "H" + UserForm1.TextBox1.Value + "/" + UserForm1.TextBox2.Value + "/" + UserForm1.TextBox3.Value 年齢基準日 = "H" + UserForm4.TextBox1.Value + "/" + UserForm1.TextBox5.Value + "/" + UserForm1.TextBox6.Value 年齢 = Application.Evaluate("=datedif(""" & Format(生年月日, "yyyy/mm/dd") _ & """,""" & Format(年齢基準日, "yyyy/mm/dd") & """,""y"")") 上記のようにそれぞれH”年”/”月”/”日”という形で取得しています。 この場合、適正な値が入力されると上手くいきますが、日付として成立しない値(例えば月に80など)を入力した場合にエラーが発生します。 エラーが発生した場合にエラー処理(例としてMsgBox+Goto処理)をしたいのですがどのようなコードを記入すればいいでしょうか?

  • EXCEL 月末の値の取得

    家計簿をEXCELにて作成しているのですが、1年の月末時点での残金が知りたく、色々な関数を試しましたがどうもうまく抽出できません。 下の様に1つの口座の入出金を記録しているのですが、ここから、 ◆1月 \1,077,256 ◆2月 \856,059  ・   ・  ・   ・ と12月までの各月末のデータを抽出しようとした場合、どの様にすればよろしいのでしょうか? どなたかご存じの方、教えて下さい。   A      B      C 2009/1/5   項目名  \897,389 2009/1/10  項目名  \887,389 2009/1/23  項目名  \1,145,746 2009/1/26  項目名  \1,077,256 2009/2/2   項目名  \957,652 2009/2/12   項目名  \887,389 2009/2/25   項目名  \833,652 2009/2/27   項目名  \856,059 2009/3/12   項目名  \651,079   ・      ・     ・   ・      ・     ・   ・      ・     ・

  • Accessクエリーにて開始日と終了日から期間を算出

    Accessのクエリーにて、開始日と終了日から該当月の貸し出し期間の算出方法を教えて下さい。 条件ですが、 月単位での算出の為、1ヶ月は「1」、半月は「0.5」で算出します。 当月に開始された明細では、 15日までに開始されれば1ヶ月で算出 16日以降に開始されれば半月で算出 当月に終了された明細では、 15日までに終了されれば半年で算出 16日以降に終了されれば1ヶ月で算出 同月内に開始・終了の場合は1ヶ月で算出 貸し出し中の明細の場合、「終了日」はNULLです。 算出年月 200712の場合のデータは下記の通りです 「算出年月」、「開始日」、「終了日」、 200712、20071210、、、期間は「1」 200712、20071220、、、期間は「0.5」 200712、20050505、20071219、期間は「1」 200712、20061222、、、期間は「1」 200712、20071201、20071210、期間は「1」 宜しくお願い致します。