• ベストアンサー

エクセルのマクロでの満年齢および経過時間の表示

Wendy02の回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 全体的な組み立て方が、分かりませんが、UserForm の テキストボックス を三つを入力すると、 ---------------------- 名前   「TextBox1      」 生年月日 「TextBox2      」 入所年月日 「TextBox3      」 CommandButton1 --------------------- セルには、 名前、生年月日、入所年月日、入所年齢、現在の年齢、入所期間 の5つが入れられるようにしたいというわけですね。 しかし、問題は、 >Cells(gyou,1) >(gyouは行番号をあらわす変数)など このgyou をどうするか、という具体的な案が出されていません。 以下は、データの最後の行にしてありますが、「現在の年齢」「入所期間」は、「今日」に対する差ですから、実際、マクロで入れてしまうというのには、少し、無理があるのかなって思います。 私が、ご質問者さんの同じ立場なら、マクロにはしないで、#2さんのようなスタイルにします。リストされたデータがあれば、圧倒的に、ワークシートスタイルのほうが入力が早いです。私は、現役の時は、数千件のデータを、延べ6時間ぐらいで入力していましたから。マクロは使っても、数式を入れる程度です。それは、データ量にもよります。 'UserForm モジュール --------------------------- Private Sub CommandButton1_Click() Dim myDate1 As Variant Dim myDate2 As Variant Dim o1 As Long Dim o2 As Long Dim o3 As Long Dim i As Long      myDate1 = "": myDate2 = ""   o1 = 0: o2 = 0: o3 = 0      If TextBox2.Value <> "" And TextBox3.Value <> "" Then     If IsDate(TextBox2.Value) And IsDate(TextBox3.Value) Then       myDate1 = CDate(TextBox2.Value) '生年月日       myDate2 = CDate(TextBox3.Value) '入所年月日              o1 = mDATEDIF(myDate1, myDate2) '入所時の年齢       o2 = mDATEDIF(myDate1, Date) '現在の年齢       o3 = mDATEDIF(myDate2, Date, "m") '入所期間              With ActiveSheet       '行数の決定(データの最後の次)       i = .Range("A65536").End(xlUp).Offset(1).Row       If MsgBox(TextBox1.Value & "さん" & vbCrLf & _           CDate(myDate1) & vbCrLf & _           CDate(myDate2) & vbCrLf & _           o1 & "歳" & vbCrLf & _           o2 & "歳" & vbCrLf & _           o3 & "ヶ月" & vbCrLf & _           i & "行目に書き込みますが、これでよろしいですか?", vbOKCancel) = vbCancel Then          Exit Sub        End If              .Cells(i, 1).Value = TextBox1.Value & "さん"       .Cells(i, 2).Value = myDate1       .Cells(i, 3).Value = myDate2       .Cells(i, 4).Value = o1 & "歳"       .Cells(i, 5).Value = o2 & "歳"       .Cells(i, 6).Value = o3 & "ヶ月"      End With     End If   End If   End Sub Function mDATEDIF(日付1 As Variant, 日付2 As Variant, Optional typ As String) Dim Fdate As Long Dim Ldate As Long Dim i As Integer  If typ = "" Then   typ = """y"""   i = 1  Else   typ = """" & typ & """"   i = 0  End If  Fdate = CLng(日付1)  Ldate = CLng(日付2) - i '満年齢を出す場合 mDATEDIF = Evaluate("DATEDIF(" & Fdate & "," & Ldate & "," & typ & ")") End Function '------------------------------ たぶん、もし、こういうスタイルで、不満を感じるとしたら、やはり、行数の決め方にあるとは思います。別途、TextBox に行数を入れるようなスタイルがよいのかもしれません。

kaeruhousi
質問者

お礼

ありがとうございます。 実際のところ、私も、マクロは使いたくないのです。 実際に、上記のデータ以外にも、入所されている方のデータは たくさんあり、入所者のデータベースは横に長いデータベース になります。実際には、それの簡便に行う関数は全て作ってあり 自分で操作をする分には何の支障も無いのですが、私以外の 人が使えないというデメリットがあります、誰でもデータの 入力と、変更を行えるものを作る必要があったのです。 私の職場では、エクセルの罫線を引くのもままならない人がいるので・・・ gyouをどうするのかが不明確というのは、指摘いただいて、気がつき増した。実際には、 私は『すっきりわかったエクセルVBAマクロ作成のつぼ』などの 本に準拠して作ったのですが、 private sub commanndbutton_click() gyou=cells(1.1)'行の番号が表示されているセル gyou=gyou+1 とし、ボタンを押すたびに、表示される行が変わっていくように作っていました。 ご指摘に答えられたかどうかも自信がありませんが、これからも 学習していきます。

関連するQ&A

  • エクセル生年月日から満年齢を出したい

    一難去ってまた一難… E2セルに今日の日付、C4セルに生年月日で、 =DATEDIF(C4,$E$2,"Y") の式で今日現在の年齢を出すことはできたのですが、今日現在の年齢ではなく満年齢を出す方法はあるでしょうか? よろしくお願いします。

  • マクロで年齢の自動計算

    エクセルのA1のセルに生年月日を入力するとB1のセルに年齢が自動入力されるマクロを組みたいのですが教えてください。関数(DATEDIF)を利用してのやりかたはわかるのですがマクロを組んで同じことはできないでしょうか。よろしくお願いいたします。

  • 年齢表示: ◯歳Xヶ月

    「DATEDIF」関数で、満年齢を表示させる方法がありますが、これを応用するか、或いは応用しなくても、生年月日から基準日までの; 「何歳と何ヶ月」 を表示させる関数、方法を教えてください。

  • EXCEL エクセル 年齢 DATEDIF関数 空白の場合

    EXCEL2007 年齢を計算するのに A1セルに 生年月日を入力、 B1セルに年齢  =DATEDIF(A1,TODAY(),"y")で  満年齢がでると思うのですが A1セルが空白の場合 109となります。 A1セルが空白の場合 B1セルも空白になる関数を教えてください。 本を見ながらの初心者です。よろしくお願いします。

  • エクセルの年齢の計算方法について

    エクセルで、A1に「現在の日付」、A2に「生年月日」を入れ、 A3のセルで次のとおり計算式、 =DATEDIF(A2,$A$1,"Y")&"年"&DATEDIF(A2,$A$1,"YM")+1&"ヶ月" を入力し、「○○年○○ヶ月」と表示させました。 このA2「生年月日」と、A3「○○年○○ヶ月」のデータがいくつかあるのですが、「○○年○○ヶ月」の平均値を求めることは可能でしょうか? その場合の、計算式等をお教えていただけないでしょうか? 分かりにくい説明で申し訳ありません。 よろしくお願いいたします。

  • エクセルで年齢式がコピーできない

    エクセルで名簿を作っています。 最初の一人の生年月日と今日の日付から満年齢を出せたまではいいのですが、全員分の満年齢を出そうとして式をドラッグしてコピーしようとしたところ、#VALUE!と#NUM!が交互に出て、年齢が表示されません。 E2セルに今日の日付(=TODAY())、C4に最初の人の生年月日を入力しています。 最初の人の年齢は=DATEDIF(C4,E2,"Y")の式で正常に表示されているのですが、この式をドラッグでコピーすると、以下、#VALUE!と#NUM!が交互に表示されます。コピーされた式をひとつずつ調べると、 =DATEDIF(C4,E2,"Y") ←正常に表示 =DATEDIF(C5,E3,"Y") ←#VALUE!と表示 =DATEDIF(C6,E4,"Y") ←#NUM!と表示 =DATEDIF(C7,E5,"Y") ←#VALUE!と表示 =DATEDIF(C8,E6,"Y") ←#NUM!と表示 … といった感じで続いていて、要は今日の日付を入力しているE2セルを正しく参照していないようです。これを、 =DATEDIF(C4,E2,"Y")  =DATEDIF(C5,E2,"Y")  =DATEDIF(C6,E2,"Y")  =DATEDIF(C7,E2,"Y")  =DATEDIF(C8,E2,"Y")  のように、常にE2を参照させる方法があるはずだと思うのですが、どうすればいいでしょうか? よろしくお願いします。

  • 年齢の表示を桁合わせする

    今日現在の年齢を表示したときに、”月”を二桁表示にする方法を教えてください。見た目を 〇〇歳〇〇ヶ月と表示したい。   下記のような表です。 式は '=DATEDIF(C5,$A$5,"y")&"歳"&DATEDIF(C5,$A$5,"ym")&"ヶ月" と作りました。  今日    氏名 生年月日   年齢 2014/9/4 aa S25.10.31 63歳10ヶ月       bb S58.8.10  31歳0ヶ月      cc H20.7.20   6歳1ヶ月 ※OKWaveより補足:「富士通FMV」についての質問です。

  • Excelマクロで・・・

    任意の変数nを参照し、範囲A1:(A1+n)の最大値を 計算するマクロを作りたいと考えています。 とりあえず Formula="max(Cells(1,1),Cells(1,n))"と書いてみた のですが、(当然なのでしょうが)ダメでした。 良く分からないですがFormulaを使う時はA1とかB15 しか入力出来ないようです。何か良い方法をご存知 でしたらどうかよろしくお願い致します。

  • 元号入力した生年月日から満年齢を求める方法

    セルA1に元号で生年月日を入力しセルA2に今日(入力日)現在の満年齢を表示させることができますか? 可能な場合の設定を教えてください。 よろしくお願いします。

  • エクセル マクロ起動中のメッセージを表示したい

    いつもお世話になります。 エクセルで、マクロを起動して、動作が終了するのに時間がかかるため、起動中に、「マクロ起動中です」のメッセージが表示されるようにしたいのです。 自分なりに考えて、"A"というメッセージのみのユーザーフォームを作って、マクロの最初と最後に A.show ~中略~ A.Hide としたのですが、表示されたユーザーフォームの×印を押さないとマクロが動きません。 宜しくお願い致します。