none
年齢表示のやりかた RRS feed

  • 質問

  •  VBA初心者です。 ユーザーフォームを使って、名簿の入力をやりたいと思っているのですが、年月の表示がうまくできません。

     基準となる年月日をテキストボックスに入力して、それを元に生年月日から満年齢を表示させたいと思っています。

     今日現在の日時での表示は何とかなったのですが、基準年月日を組み込むことができません。                     また、これと同じように、所属の通算年月を表示させたいのですが、うまくできません。 (〇年〇月のように) どのようなやり方をすればよいのかわからずにつまずいてしまいました。

    よい方法がありましたら、ご教授お願いいたします。  入力、表示はすべてテキストボックスを使用しています。すべてのデータを入力後、コマンドボタンでシートに飛ばそうと思っています。

     

    Private Sub txt生年月日_Change()
      With Me.txt生年月日
           If Not IsDate(.Value) Then Exit Sub
           Me.txt年齢.Value = Application.Evaluate("datedif(""" & CDate(.Value) & """,today(),""y"")")
      End With
    End Sub

    2008年11月30日 17:59

回答

  • 基準年月日に関しては、today()を基準年月日に置き換えるだけで良さそうです。通算年月については、比較する二つの日付について、年部分と月部分をそれぞれ取り出し、年 x 12 + 月として月単位に換算し、その差をとって、それを12で割って、商を年、余りを月にしてしまえば良いと思います。

     

    2008年12月1日 0:56
    モデレータ
  •  k-nt さんからの引用

     コードですが、テキストボックスの基準年月日を変数に指定して、組み込むことで大丈夫でしょうか?

     

    txt基準年月日も日付であるかどうかを確認した方が良いと思います。

    また、CDate(.Value)の後で文字列連結をされていますが、これではCDateで日付型に変換する意味がありません。文字列連結時に再び文字列型に変換されています。

     

    あと、どのような環境でVBAを使用されているのかわからないのですが、可能であればカレンダーコントロールやDTPickerなどの日付を扱うコントロールの使用もご検討されると良いと思います。

    2008年12月2日 1:11
    モデレータ

すべての返信

  • 基準年月日に関しては、today()を基準年月日に置き換えるだけで良さそうです。通算年月については、比較する二つの日付について、年部分と月部分をそれぞれ取り出し、年 x 12 + 月として月単位に換算し、その差をとって、それを12で割って、商を年、余りを月にしてしまえば良いと思います。

     

    2008年12月1日 0:56
    モデレータ
  • 早速の返信ありがとうございました。today()を変えることで、できるのですね。早速やってみます。

    通算年月については、無理せずに、年と月の二つのテキストボックスを使うことで、何とかなりそうです。ですが、せっかくのアドバイスですので、こちらもチャレンジしてみたいと思います。 

     コードですが、テキストボックスの基準年月日を変数に指定して、組み込むことで大丈夫でしょうか?とにかくいろいろとやってみます。

     

    Private Sub txt生年月日_Change()

      txtkijyunn=txt基準年月日
      With Me.txt生年月日
           If Not IsDate(.Value) Then Exit Sub
           Me.txt年齢.Value = Application.Evaluate("datedif(""" & CDate(.Value) & """,txtkijyunn,""y"")")
      End With
    End Sub

    2008年12月1日 16:12
  •  k-nt さんからの引用

     コードですが、テキストボックスの基準年月日を変数に指定して、組み込むことで大丈夫でしょうか?

     

    txt基準年月日も日付であるかどうかを確認した方が良いと思います。

    また、CDate(.Value)の後で文字列連結をされていますが、これではCDateで日付型に変換する意味がありません。文字列連結時に再び文字列型に変換されています。

     

    あと、どのような環境でVBAを使用されているのかわからないのですが、可能であればカレンダーコントロールやDTPickerなどの日付を扱うコントロールの使用もご検討されると良いと思います。

    2008年12月2日 1:11
    モデレータ
  • 返信が遅くなって申し訳ありませんでした。 試行錯誤の結果、何とか解決しました。 初心者ということもあり、コードの意味を完全に理解できていないことも一因だと感じました。 これからもいろいろと試して、ひとつずつやって行きたいと思います。 ありがとうございました。 また、何かありましたら、質問させていただきますので、そのときはご指導お願いいたします。

    2008年12月9日 13:50
  • こんにちは。中川俊輔です。

     

    trapemiyaさん、回答ありがとうございます。

     

    k-ntさん、はじめまして。フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、trapemiyaさんの回答へ回答済みチェックをつけさせていただきました。

     

    今後ともフォーラムをよろしくお願いします。

    それでは!

    2008年12月11日 9:16