- ベストアンサー
コンボボックスにdateで取得した月の日数分を表示したい
プログラム初心者です。VBAなのですが、エクセルから取得してきたある月の日数分だけの日付をコンボボックスに追加したいのですが、どうしたらいいでしょうか? その月の末日をmatsuとしていろいろ考えてみましたが、どうもわかりませんでした。 matsu=Day(DateSerial(年,月,1) ←年と月は可変です。 これを工夫してある月の末日を取得したと考えています。これを For i = 1 To matsu cmbNyu.AddItem (i & "日") cmbTai.AddItem (i & "日") Next i でコンボボックスに追加・・・とうゆう予定なのですが・・・?この方法じゃなくてもいいので何か方法がありましたらどんなことでもいいのでお力をお貸しください。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その月の月末日を取得するのですよね。 エクセルから取得する月を基に DateAdd("d",-1,(DateAdd("m",+1,Format$(月,"mm")))) 月から取得する月数の翌月を求めDateAddとFormat$で翌月を求めれば日付は1が帰ってくるはずですからその日付から1日引いた日付がその月の月末日。 これではどうでしょうか。
その他の回答 (2)
- nishi6
- ベストアンサー率67% (869/1280)
ある月の翌月の0日がある月の末日になります。 (DateSerialの月に13や日に0をセットできます。) Sub matuCalc() Dim 年 As Integer Dim 月 As Integer Dim matsu As Integer 年 = Year(Now()) 月 = Month(Now()) matsu = Day(DateSerial(年, 月 + 1, 0)) MsgBox matsu End Sub
お礼
有難うございました。私もその方法を思いつき、試してみました。できそうだたので、これでいきたいと思います。またお世話になるかと思いますのでよろしくお願いします。
- imogasi
- ベストアンサー率27% (4737/17069)
>お礼のmatsu = day(DateSerial(year(now),month(now)+1,0))のところが正しいのかなと気になって、私もやって見ました。 下記がご参考になれば。 Sub test01() ' MsgBox Now() ' MsgBox Year(Now()) ' m=Month(Now()) + 1 ' MsgBox m ' MsgBox DateSerial(2002, 7, 1) m = Month(Now()) ' m = 12 If m = 12 Then m = 1 y = Year(Now()) + 1 Else m = Month(Now()) + 1 y = Year(Now()) End If a = DateSerial(y, m, 1) MsgBox a MsgBox DateValue(a - 1) '月末日 MsgBox Day(DateValue(a - 1)) End Sub 注釈の’を適当に外して確認してください。
お礼
有難うございます。ですが、初心者のため注釈の'のどれを外せばいいのかわからなくてメッセージボックスが出てきませんでした。すいません・・・ matsu = day(DateSerial(year(now),month(now)+1,0)) でなんとかできているような感じでしたので、理解できたこれでいこうかなと思うのですが・・・間違ってますか?間違ってたらこのシステムを納めて間もなく社員からいろいろ言われるんでしょうね(^_^;) バグ処理に追われそうです。有難うございました。
お礼
有難うございます。DateAdd関数とゆうものの使い方がわからないので、それを調べてからすこし考えてみたいと思います。回答をお待ちしている間、私なりに考えてみたのですが、 matsu = day(DateSerial(year(now),month(now)+1,0)) こんな感じで・・・(^_^;) 社内システムの出勤管理システムを任されたものの、大学も文系のため全くプログラム初心者で今年の4月までプログラムのプも知らなかったもので・・・ O_cyanさんの考えていただいたコードを使わしていただこうかと思います。 また、何かありましたらよろしくお願いいたします。