• ベストアンサー

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

Wendy02の回答

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

こんにちは。 せっかく、zap35さんが書いていただいたので、私から少し書かせていただきたいのですが、A1 方式で書くと、別になりますが、R1C1 方式ですと、相対参照にする場合は、すべて同じ式になってしまいます。 前回のレイアウトから、コントロールツールの[テキストボックス]を一つ増やしました。 ワークシート      名前   生年月日  入所年月日 行数  ---------------------------------------------------    TextBox1  TextBox2  TextBox3  TextBox4 コマンドボタン  [日付] ←名前-定義-登録[今日] ================================================== ←ウィンドウ枠の固定 TextBox4 に行数を入れる。 (コマンドボタンをクリックすると、最終データの次の行が出る)        数式の保護はなされてはいません。        今は、自動スクロールがされていません。 TextBox4 に、入力してある行を入力すると、その行に入力されているデータが出てきます。 ----------------------------------------------------- '*********************** 'シートモジュール (シートタブから、コードの表示をクリック) '*********************** '----------------------------------------------------- Private Sub CommandButton1_Click()   Dim gyou As Long   Dim Tx1 As String, Tx2 As String, Tx3 As String   '行数のチェック   If Val(TextBox4.Value) = 0 Then     MsgBox "行数が入っていません。", vbInformation     Exit Sub   Else     gyou = Val(TextBox4.Value)   End If      '名前   If TextBox1.Text = "" Then     MsgBox "お名前が入っておりません。", vbInformation     Exit Sub   Else     Tx1 = TextBox1.Text   End If      '生年月日   If Not IsDate(TextBox2.Value) Or Year(DateValue(TextBox2.Value)) < 1900 Then     MsgBox "生年月日の日付の入れ方が違います。 " & TextBox2.Text, vbInformation     Exit Sub   Else     Tx2 = CDate(TextBox2.Text)   End If      '入所年月日   If Not IsDate(TextBox3.Value) Or Year(DateValue(TextBox2.Value)) < 1900 Then     MsgBox "入所年月日の日付の入れ方が違います。" & TextBox2.Text, vbInformation     Exit Sub   Else     Tx3 = CDate(TextBox3.Text)   End If      '本日に対する日付のチェック   If Not (DateValue(Tx3) > DateValue(Tx2) And _     Date > DateValue(Tx3) And _     Date > DateValue(Tx2)) Then     MsgBox "日付の入力をもう一度調べてください。本日より先の日付は入れられません。", vbInformation     Exit Sub   End If   '入力   Cells(gyou, 1).Value = Tx1      Cells(gyou, 2).NumberFormatLocal = "yy/mm/dd" '日付書式   Cells(gyou, 2).Value = Tx2      Cells(gyou, 3).NumberFormatLocal = "yy/mm/dd" '日付書式   Cells(gyou, 3).Value = Tx3      Cells(gyou, 4).FormulaLocal = "=DATEDIF(RC[-2],RC[-1]-1,""y"")&""歳"""   Cells(gyou, 5).FormulaLocal = "=DATEDIF(RC[-3],今日-1,""y"")&""歳"""   Cells(gyou, 6).FormulaLocal = "=DATEDIF(RC[-3],今日,""m"")&""ヶ月""" 'データの最後の次の行   TextBox4.Value = Cells(65536, 1).End(xlUp).Offset(1).Row End Sub Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '名前  If KeyCode.Value = 9 Or KeyCode.Value = 13 Then   TextBox2.Activate  End If End Sub Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '生年月日  If KeyCode.Value = 9 Or KeyCode.Value = 13 Then   TextBox3.Activate  End If End Sub Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '入所年月日 If KeyCode.Value = 9 Or KeyCode.Value = 13 Then   TextBox1.Activate  End If End Sub Private Sub TextBox4_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)   '行数の入力   Dim i As Integer   Dim gyou As Long   gyou = Val(TextBox4.Value) '行をずらす場合は、数字を足します   If gyou > 0 Then     If KeyCode = 13 Then       If IsDate(Cells(gyou, 2).Value) Then         For i = 1 To 3           Me.OLEObjects("TextBox" & i).Object.Value = Cells(gyou, i).Text         Next i       Else         '2列目が文字列の場合は、終了(タイトルの場合)                  If VarType(Cells(gyou, 2)) = vbString Then Exit Sub         For i = 1 To 3           Me.OLEObjects("TextBox" & i).Object.Value = ""         Next i         TextBox1.Activate       End If     End If   End If End Sub

kaeruhousi
質問者

お礼

本当に何度もありがとうございます。 全て試したわけではないですが、なんかうまくいきそうな予感がします。 やはり、値そのものより式を入れるという発送の転換が 大切でした。 いろいろな本を読んでも、それぞれ書いてあることが違って 迷っていたのですが、皆さんのおかげで何とかなりそうです。 これからも他にこの欄を参考にされる方もいると思うので、ユーザーフォームや日付などのことについて触れられていた、私の持っている本を書いておきます。 『すっきりわかったエクセルVBA』 →ユーザーフォームについては書いてあり、  満年齢の表示は触れられていません。回答していただいた  中にあった、エラーの処理については触れられています。 『かんたんプログラミングEXCELBVA』 →基礎的な内容らしく、フォームには触れられていません。 『EXCELVBAスーパーマスター』 →満年齢の表示にdateddiffを使っていますが他に操作を  している様子があります。該当部分以外の内容もほとんど  理解できませんでした。全体的に敷居が高いようです。 『やさしく学ぶエクセルVBA』 →満年齢の表示にマクロのdateddiffは使うなと書いてありました。 『日経PCエクセルマクロ活用バイブル』 →満年齢については触れられていない。 です。 本当の所、私が習作で作ったコードとかも貼っていきたいのですが 業界は結構狭いので私の身元が割れてしまうこともあるので、 それは、ご容赦願います。これからは自分で努力しますが もし、他にも質問が出た場合には (実は他に列が40以上もあったりします…) いつかご協力を御願いいたします。 皆さん本当にありがとうございました。

関連する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 としたのですが、表示されたユーザーフォームの×印を押さないとマクロが動きません。 宜しくお願い致します。