Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3375 / 13644 ツリー ←次へ | 前へ→

【62631】年齢表示の仕方 夏子 09/8/17(月) 17:24 質問[未読]
【62632】Re:年齢表示の仕方 neptune 09/8/17(月) 17:41 回答[未読]
【62634】Re:年齢表示の仕方 夏子 09/8/18(火) 15:00 質問[未読]
【62635】Re:年齢表示の仕方 Abebobo 09/8/18(火) 15:48 発言[未読]
【62638】Re:年齢表示の仕方 夏子 09/8/18(火) 18:41 お礼[未読]
【62636】Re:年齢表示の仕方 neptune 09/8/18(火) 17:11 発言[未読]
【62640】Re:年齢表示の仕方 夏子 09/8/18(火) 18:51 お礼[未読]
【62641】Re:年齢表示の仕方 Abebobo 09/8/18(火) 19:38 発言[未読]
【62645】Re:年齢表示の仕方 夏子 09/8/19(水) 7:23 お礼[未読]
【62647】Re:年齢表示の仕方 Yuki 09/8/19(水) 8:50 発言[未読]

【62631】年齢表示の仕方
質問  夏子  - 09/8/17(月) 17:24 -

引用なし
パスワード
   年齢を出したいのですが

UserFormにOptionButonが4個あり明治、大正、昭和、平成となっておりその下にComboBoxが3個"年"、"月"、"日"があります。
OptionButonの明治、大正、昭和、平成のいずれかをクリックした後、ComboBoxで各年、月、日を選択しComandButtonをクリックすると指定したセルに元号表記にて表示できるようにはしたのですが、そのマクロの内容から現在時点での年齢を出したいのですが今一つです。
やはりDateDiffでの処理になるのでしょうか?
よろしくお願いいたします。

【62632】Re:年齢表示の仕方
回答  neptune  - 09/8/17(月) 17:41 -

引用なし
パスワード
   ▼夏子 さん:

>やはりDateDiffでの処理になるのでしょうか?
それが一番簡単と思います。

>今一つです。
何が?これではまったくわからない。

【62634】Re:年齢表示の仕方
質問  夏子  - 09/8/18(火) 15:00 -

引用なし
パスワード
   ▼neptune さん:

分かりづらい説明ですみません。
知りたいのは和暦表記から現在の年齢を出すステートメントが知りたいのですが
よろしくお願いいたします。


>▼夏子 さん:
>
>>やはりDateDiffでの処理になるのでしょうか?
>それが一番簡単と思います。
>
>>今一つです。
>何が?これではまったくわからない。

【62635】Re:年齢表示の仕方
発言  Abebobo  - 09/8/18(火) 15:48 -

引用なし
パスワード
   'A1 に 昭和
'B1 に 43
'C1 に 6
'D1 に 1
'が記入されている場合

Sub Keisan()
Dim Birth As Date
Birth = DateValue(Range("A1").Value & _
         Range("B1").Value & "年" & _
         Range("C1").Value & "月" & _
         Range("D1").Value & "日")
MsgBox DateDiff("yyyy", Birth, Now()) & "歳です"
        
End Sub

【62636】Re:年齢表示の仕方
発言  neptune  - 09/8/18(火) 17:11 -

引用なし
パスワード
   ▼夏子 さん:

Abebobo さんが、ずばりを書いてくれていますが、

>知りたいのは和暦表記から現在の年齢を出すステートメントが知りたいのですが
↑には細かく分けると3つの処理が含まれています。

DateDiffの構文は以下です。
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
これに合う様に、引数を与えてやるだけです。

なので、
1.各コントロールからデータを取得
2.1.のデータを組み合わせて、日付型のデータに変換
3.DateDiffを使用して計算

だけで済みます。
これが判っていたかどうかで返答も変わってきます。

処理全体の情報だけでなく、何がわからないのかは書いておきましょう。
でないと、質問ではなく、丸投げ(作成依頼)と同じとみなされ、レス
も付きにくくなります。

【62638】Re:年齢表示の仕方
お礼  夏子  - 09/8/18(火) 18:41 -

引用なし
パスワード
   ▼Abebobo さん:

ありがとうございます。
思ったより簡素なステートメントで和暦を計算出来ることに驚いています。

ただ時間間隔が"年単位"で求めるようですね。これにはやはりIfステートメントで"月、日"を判断し"0"または"-1"を代入するような方法しかないのでしょうか?
ご存知でしたら再度、ご教授ください。

>'A1 に 昭和
>'B1 に 43
>'C1 に 6
>'D1 に 1
>'が記入されている場合
>
>Sub Keisan()
>Dim Birth As Date
>Birth = DateValue(Range("A1").Value & _
>         Range("B1").Value & "年" & _
>         Range("C1").Value & "月" & _
>         Range("D1").Value & "日")
>MsgBox DateDiff("yyyy", Birth, Now()) & "歳です"
>        
>End Sub

【62640】Re:年齢表示の仕方
お礼  夏子  - 09/8/18(火) 18:51 -

引用なし
パスワード
   ▼neptune さん:
ありがとうございます。
1、2はわかるのですが、3のDateDiffの構文が判りません。
firstdayofweekとfirstweekofyearは月と週の違いを判定させるものですか?
よろしくお願いいたします。

>▼夏子 さん:
>
>Abebobo さんが、ずばりを書いてくれていますが、
>
>>知りたいのは和暦表記から現在の年齢を出すステートメントが知りたいのですが
>↑には細かく分けると3つの処理が含まれています。
>
>DateDiffの構文は以下です。
>DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
>これに合う様に、引数を与えてやるだけです。
>
>なので、
>1.各コントロールからデータを取得
>2.1.のデータを組み合わせて、日付型のデータに変換
>3.DateDiffを使用して計算
>
>だけで済みます。
>これが判っていたかどうかで返答も変わってきます。
>
>処理全体の情報だけでなく、何がわからないのかは書いておきましょう。
>でないと、質問ではなく、丸投げ(作成依頼)と同じとみなされ、レス
>も付きにくくなります。

【62641】Re:年齢表示の仕方
発言  Abebobo  - 09/8/18(火) 19:38 -

引用なし
パスワード
   >ただ時間間隔が"年単位"で求めるようですね。・・・・
年齢を算出したいなら年単位ですよ   ね・・・。

>Ifステートメントで"月、日"を判断し"0"または"-1"を代入するような方法しかないのでしょうか?
???です。
そこら辺は、ComboBox でしてますよね!
DateValueを理解してますか?

Sub tt()
Dim D As Date
D = DateValue("昭和13年11月6日 ")
MsgBox D
MsgBox CLng(D) ' シリアル値
End Sub

>3のDateDiffの構文が判りません。
>firstdayofweekとfirstweekofyearは月と週の違いを判定させるものですか?
firstdayofweekは 週の計算をするときに、何曜日を初めにするか

firstweekofyearも 週の計算をするときに、一月を どう扱うかを設定するもの

??だと思います。 私もまだヘルプがしっかり読めません(悲)
でも、読む癖は付いています。いつもへこみますけど(笑)

間違っていればneptune さんから補足があるはず  です。

【62645】Re:年齢表示の仕方
お礼  夏子  - 09/8/19(水) 7:23 -

引用なし
パスワード
   ▼Abebobo さん:
説明が至らなくてすみません。Abebobo さん方法で実行すると指定した誕生日の前であろうと後であろうと同じ年齢を表示したものですから・・・

>>ただ時間間隔が"年単位"で求めるようですね。・・・・
>年齢を算出したいなら年単位ですよ   ね・・・。
>
>>Ifステートメントで"月、日"を判断し"0"または"-1"を代入するような方法しかないのでしょうか?
>???です。
>そこら辺は、ComboBox でしてますよね!
>DateValueを理解してますか?
>
>Sub tt()
>Dim D As Date
>D = DateValue("昭和13年11月6日 ")
>MsgBox D
>MsgBox CLng(D) ' シリアル値
>End Sub
>
>>3のDateDiffの構文が判りません。
>>firstdayofweekとfirstweekofyearは月と週の違いを判定させるものですか?
>firstdayofweekは 週の計算をするときに、何曜日を初めにするか
>
>firstweekofyearも 週の計算をするときに、一月を どう扱うかを設定するもの
>
>??だと思います。 私もまだヘルプがしっかり読めません(悲)
>でも、読む癖は付いています。いつもへこみますけど(笑)
>
>間違っていればneptune さんから補足があるはず  です。

【62647】Re:年齢表示の仕方
発言  Yuki  - 09/8/19(水) 8:50 -

引用なし
パスワード
   ▼夏子 さん:
>▼Abebobo さん:
>説明が至らなくてすみません。Abebobo さん方法で実行すると指定した誕生日の前であろうと後であろうと同じ年齢を表示したものですから・・・

横から失礼します。
簡単なサンプルです。
Sub TEST2()
  Dim dt1 As Date
  Dim dt2 As Date
  Dim old As Long
  
  dt1 = CDate("2008/8/20")      ' 誕生日
  dt2 = Date             ' 今日
  old = DateDiff("yyyy", dt1, dt2)  ' DateDiffの結果
                    ' 年だけの計算だったら月日の比較で
  If DateSerial(Year(dt2), Month(dt1), Day(dt1)) > dt2 Then old = old - 1
  Debug.Print old
End Sub

3375 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free