• ベストアンサー

Excel VBAで年齢を求める(Win2000、Office2000)

現在、VBAでExcelのシートに書き込むフォームを作っており、日付に関することで困っています。 フォーム上には複数のComboBox、TextBoxが並んでおり、OKボタンをクリックすることで、フォーム上に並んだ、ComboBox、TextBoxの値をセルに書き込むようにしています。 ユーザーフォーム上に 年を入力するComboBox1 → 1972 月を入力するComboBox2 → 1 日を入力するComboBox3 → 1 *いづれも、プルダウンから数字を選択して入力するようにしています。 この3つの入力値を合わせて、1972/01/01と認識させて、TextBox1に"32"才と表示させたいのですが・・・現在、3つのComboBoxから日付を変数にセットするところまで出来ています。 ↓ Private Sub ComboBox3_Change() Dim B As Date B = Me.ComboBox1.Value & "/" & Me.ComboBox2.Value & "/" & Me.ComboBox3.Value 問題は、このあと誕生日を求める方法がわからず困っています。 *TextBox1に表示されるタイミングは、日を入力するComboBox3が入力された時としたいです。 宜しくお願い致します。

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

  • ベストアンサー
noname#13477
noname#13477
回答No.3

訂正です。 Dim B As Integer If Trim(Year(Now)) = Me.ComboBox1.Value Then '同年の場合、0歳とする B = 0 Else '去年末時点の年数を数える B = Year(Now) - Me.ComboBox1.Value - 1 '今年の誕生日を迎えていたら1年プラスする If Format(Now, "mm/dd") >= Format(Me.ComboBox2.Value & "/" & Me.ComboBox3.Value, "mm/dd") Then B = B + 1 End If End If Me.TextBox1.Text = B

rurucom
質問者

お礼

ご丁寧にありがとうございます。

その他の回答 (3)

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

DatediffやWorksheetFunction.Datedifなど旨く行かず http://support.microsoft.com/default.aspx?scid=kb;ja;JP407898 に行き着いて、なんとか結果がでました。 Private Sub TextBox3_LostFocus() Dim d1 As Double Dim d2 As Double Dim S As String d1 = DateSerial(TextBox1.Text, TextBox2.Text, TextBox3.Text) d2 = Date S = "Datedif(" & d1 & "," & d2 & "," & """Y""" & ") " yy = Evaluate(S) Cells(1, "A") = yy End Sub こんなやり方しかないのか、疑問を持ちつつ。

rurucom
質問者

お礼

ありがとうございます。 お時間をとらせてすみません。

noname#13477
noname#13477
回答No.2

Dim B As Integer '去年末時点の年数を数える B = Year(Now) - Me.ComboBox1.Value - 1 '今年の誕生日を迎えていたら1年プラスする If Format(Now, "mm/dd") >= Format(Me.ComboBox2.Value & "/" & Me.ComboBox3.Value, "mm/dd") Then B = B + 1 End If Me.TextBox1.Text = B

rurucom
質問者

お礼

早速ありがとうございます。大変助かりました。

noname#6715
noname#6715
回答No.1

Date型と DateValue,DateDiff,DateSerial等を用いてみては? http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_k08.htm

rurucom
質問者

お礼

ありがとうございます。いろいろと参考になります。