ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュのコンボボックスで日付入力する方法

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。

現在ユーザーフォームのコンボボックスを使って、
年・月・日をそれぞれ入力したいと考えています。

ここで一つ壁にぶち当たりました。
ユーザーフォームが表示された時に、
コンボボックスに今日の日付が表示されるように
したいのですが方法が分かりません。

特に、
?VBA上で今日の日付を取得する方法
?取得できた値から、年・月・日を振分ける方法
が分かりませんでした。

ご存知の方よろしくお願いします!!

コメント(8)

Date関数で現在の日付が取得できます。
あとは、Year関数、Month関数、Day関数で年月日に分解してください。

Sub Sample()
  MsgBox Date
  MsgBox Year(Date) & vbCrLf & Month(Date) & vbCrLf & Day(Date)
End Sub

月のコンボボックスだけを例にすれば、

Private Sub UserForm_Initialize()
  Dim i As Long
  With ComboBox1
    For i = 1 To 12
      .AddItem i
    Next i
    .Text = Month(Date)
  End With
End Sub

のような感じですか。
date関数(もしくはnow関数)とformat関数の組み合わせが楽かと思います。

田中亨さんの仰る通りInitializeイベントで変数に日付データを格納しておき、
その変数からyear、month、day関数で年月日を取得するのがスマートかと。

Private Sub UserForm_Initialize()
Dim datBuf As Date

datBuf = Date '今日の日付をdatBufに格納

ComboBox1.AddItem CStr(datBuf) 'コンボボックスの要素1に日付データを格納

MsgBox Year(datBuf) '月の取得
MsgBox Month(datBuf) '日の取得
MsgBox Day(datBuf) '日の取得
End Sub
コメントが微妙に間違ってますね。

> MsgBox Year(datBuf) '月の取得

年の取得

> MsgBox Month(datBuf) '日の取得

月の取得

format関数の使い方は調べてください。
すごく酔ってますので適当レスご容赦。
>田中亨さん
まさにこれをやりたかったです。
分かりやすく教えて下さりありがとうございます。

>よっちゃんさん
酔っててしんどい時にも関わらず、丁寧なレスを頂き
ありがとうございます。
format関数っていう方法初めて知りました。
ありがとうございます。
僕もマクロ初心者で、教えて欲しいことが2点あります。

田中亨さんのレスより。

1.i はなぜ「Long」なのでしょうか?
  ただなんとなく、であればいいのですがByteなどではなく
  Longでなければならない理由はありますか?

2.For〜Nextを入れている理由はComboBox1に1〜12の数字を
  格納するためですか?AddItemの使い方がわからないもの
  でしたので。

すごく初歩的な質問で申し訳ありませんがよろしくお願いします。

>トピ主さん
便乗してしまってどうもすみません。
>1.i はなぜ「Long」なのでしょうか?
>  ただなんとなく、であればいいのですがByteなどではなく
>  Longでなければならない理由はありますか?

32Bit OS であるWindowsのばあいは、Longをつかうのがもっとも
こうりつてきだからでしょう。
Integerならともかく、Byteはこのようなばあいにつかうメリット
はありません。


>2.For〜Nextを入れている理由はComboBox1に1〜12の数字を
>  格納するためですか?AddItemの使い方がわからないもの
>  でしたので。

ちがいます。
ループをつかうことと、AddItemメソッドをつかうことはべつです。
ループをつかわずに、こうかいてもいいのですから。
Private Sub UserForm_Initialize()
  With ComboBox1
    .AddItem 1
    .AddItem 2
    .AddItem 3
    .AddItem 4
    .AddItem 5
    .AddItem 6
    .AddItem 7
    .AddItem 8
    .AddItem 9
    .AddItem 10
    .AddItem 11
    .AddItem 12
    .Text = Month(Date)
  End With
End Sub

# IMEのちょうしがわるくて、ひらがなばかりですみません。
>ビリーさん
丁寧な回答をありがとうございます。

2については僕の表現が下手でしたね。でも考えていた内容と
同じようでした。もしこれが日付で31日までつくるのであれば
For i=1 to 31 になるってことですよね。

1の理由は効率なんですね。僕は扱う数字の大きさによって
Byte/Integer/Single/Doubleを使い分けていましたが
そういうことではないようですね。
なんて豪華な回答陣なんだ。うらやましい。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。