
Accessについてです。
フォームの「年齢」のコントロールソースに、年齢が自動計算できるよう
=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
と入れましたが、フォームはきちんと自動計算されて年齢が表示されるのですが、テーブルには反映されません(コントロールソース「年齢」を選択しなければやはりなにも反映されないのでしょうか)
テーブルに反映させるにはどうしたらよいのでしょうか。
A 回答 (11件中1~10件)
- 最新から表示
- 回答順に表示
No.11
- 回答日時:
途中から失礼します。
『計算で求められるものはテーブルに保存しない』のが原則かと思います。
テーブルに保存した場合には現時点での年齢を求めるために
更新クエリを毎回行わねばなりません。
なので、
テーブルからは年齢フィールドは削除し、クエリに演算フィールドを設定します。
テーブル1が
ID オートナンバー型
氏名 テキスト型
生年月日 日付時刻型
・・・
のデザインで
ID 氏名 生年月日
1 ポチ 2006/04/01
2 トラ 2010/10/10
のようなデータが入っているとします。
クエリを新規作成して添付図のようにします。(読めるかな)
デザイングリッドの、年齢:DateDiff("yyyy",・・・・は画面スペース上途中で切れていますので
年齢: DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd"))
にします。
『才』を入れた状態にしたいのなら
年齢フィールドのどこかで右クリックしプロパティを表示させ
書式欄に、0\才
とします。
このクエリをフォームのレコードソースにしてください。
年齢フィールドは数値型のままなので右詰で表示されますし
抽出や平均年齢などの計算もやりやすくなるかと思います。

遅くなりましたが回答ありがとうございました。
クエリでもできましたがどうしてもテーブルに反映させたいのです。
年齢の更新後処理のイベントプロシージャで
Private Sub 生年月日_AfterUpdate()
年齢 = Year(date())-Year([生年月日])
End Sub
でテーブルにも反映させることができましたが
単純にいまの年2016から生まれ年を引いた数に
なってしまいます。。
No.10
- 回答日時:
遅くなりました。
ちょっとまとめますね。
年齢のコントロール名をtxt年齢、生年月日のコントロール名をtxt生年月日とします。どちらもテキストボックスです。
Private Sub txt生年月日_AfterUpdate()
txt年齢= DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
End Sub
これでいけると思うんだけど…
遅くなりましたが回答ありがとうございました。
年齢の更新後処理のイベントプロシージャで
Private Sub 生年月日_AfterUpdate()
年齢 = Year(date())-Year([生年月日])
End Sub
でテーブルにも反映させることができましたが
単純にいまの年2016から生まれ年を引いた数に
なってしまいます。。
No.9
- 回答日時:
No.7
- 回答日時:
あ、もしかして、フォームのプロパティ画面に貼り付けちゃいました?
もしそうなら、更新後処理のイベントプロシージャ内に記述してください。
アクセスをしばらく触ってないもので、細かいところは忘れてます…
回答ありがとうございます。
Private Sub 生年月日_AfterUpdate()
= DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
End Sub
ではおかしいですよね…TT
No.6
- 回答日時:
年齢コントロールの名前はそのまま(年齢)でいいですよ。
つまり、年齢コントロール名もコントロールソースも「年齢」と。(なんかややこしいですね。)こういう名前とフィールドの混同があるので、出来ればコントロール名はフィールドと同一にしないほうがいいんですよね。
出来ました?
スマホなんで、遅くてすいません。
回答ありがとうございます。こちらこそ何度もすみません。
年齢コントロール名もコントロールソースも「年齢」、
生年月日の更新後処理を=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
にしましたが、できません。。
更新後処理のところはイベントプロシージャは使用しなくて良いのですよね?
No.5
- 回答日時:
であれば、生年月日のコントロールの中に「更新後イベント」があると思います。
そこに記述してください。
年齢コントロール名=年齢コントロールソースの計算式。
生年月日のコントロール名は[生年月日]となっていれば、そのままコピペでいけると思います。
カーソル移動時に反映されます。(たしか)
年齢コントロールのコントロールソースが、テーブルの年齢フィールドに設定されていれば反映されていると思います。
※もし反映されていない場合は、レコード移動時かもしれません。
回答ありがとうございます。
生年月日の「更新後処理」に=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
年齢の「名前」にも=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
年齢のコントロールソースは「年齢」にするということでしょうか。
何度も申し訳ないです。
No.3
- 回答日時:
ちなみに、「連結されている」とは、コントロールの値とテーブルの値が連動していて、かつ、フォームの方を変更するとテーブルも変更される状態のことを言います。
見た目が同じなんで、間違いやすいですけどね。
No.2
- 回答日時:
なるほど、分かりました。
まず、フォームの年齢テキストにはテーブルの生年月日を取得し、年齢を計算するという式が設定されています。これは連動はしますが、連結はされていません。
なので、そのフォームのどこかにテキストボックスを追加して、そのテキストのコントロールソースをテーブルの年齢と連結させてください。
コントロールソースに[年齢]でいけると思います。
よくある勘違いなんですが、フォームを自動生成すると、テーブルのフィールド名とテキストボックスの名前が同じになってしまうんで、連結している、と勘違いしてしまいます。実際は、コントロールソースの方が重要なんです。
で、その新しく作成したコントロールに年齢を手入力するとテーブルに反映されてると思います。
ここまで確認できたら、あとはどのタイミングで反映させるかだけです。
理解できました?
回答ありがとうございます。
実際にやってみて理解できましたが、フォームには年齢欄が2つになってしまうということですか?
>新しく作成したコントロールに年齢を手入力する
作業なくして実現するのは不可能なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
- Excel(エクセル) 関数の質問です 3 2022/03/24 12:41
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Excel(エクセル) 現時点の年齢を算出して、その年齢と一致したセルを色付けしたい。 4 2022/06/23 17:49
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- その他(パソコン・スマホ・電化製品) エクセル 平均年齢 4 2022/06/04 18:18
このQ&Aを見た人はこんなQ&Aも見ています
-
アクセス: フォーム上で計算した数字をテーブルに保存したい。
Access(アクセス)
-
Accessのテーブルのフィールドに式を入れる方法
Access(アクセス)
-
Accessのフォームで計算した結果をテーブルに表示したい
Access(アクセス)
-
-
4
フォームの計算がテーブルに反映するには?
その他(データベース)
-
5
アクセス2000/4月1日現在の年齢の計算方法を教えて下さい。
Access(アクセス)
-
6
クエリのデータをテーブルに入れたい
Access(アクセス)
-
7
Accessで勤続年数(○年○ヶ月)を表示する方法
その他(データベース)
-
8
access2013 フォームで計算した値をテーブルに代入したい
Access(アクセス)
-
9
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
10
Acccessで2つのテーブルから1つのフォームをつくりたい
Access(アクセス)
-
11
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
12
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
13
Accessでコードを入れると名前がでるようにしたい
Access(アクセス)
-
14
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
15
クエリ上でフィールド名が2つあるときの見分け方
Access(アクセス)
-
16
「年」と「月」だけの日付の表示方法
Excel(エクセル)
-
17
Access サブフォームでの選択行の取得
その他(データベース)
-
18
ラベルとテキストボックスのグループ化を解除したい
Access(アクセス)
-
19
ACCESS Yes/No型の集計
その他(Microsoft Office)
-
20
レコードを保存するコード アクセスvba
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
INSERT INTO ステートメントに...
-
Accessのフィールド数が255しか...
-
SQLServer2005のSQL文での別名...
-
ACCESSで400以上のフィールドが...
-
固有レコード識別子の選択とは??
-
アクセス エラーを数値「0」に...
-
ACCESSDBで、NULLデータをすべ...
-
アクセス メモ型 255文字...
-
アクセス A列コピー B列貼り...
-
accessのレポートで元になるテ...
-
フィールド数の多すぎる・フィ...
-
Accessの最大レコード数制限
-
ACCESSのフォームでアルファベ...
-
Accessで、固定アルファベット+...
-
【Access】フォームで自動計算...
-
主キーはオートナンバー型のID...
-
アクセス VBAで列の入れ替...
-
SQLで特定の文字を含むものを削除
-
Officeアクセス テーブル「テ...
-
主キーの位置
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフィールド数が255しか...
-
INSERT INTO ステートメントに...
-
Accessでテーブルの値をテキス...
-
ACCESSで400以上のフィールドが...
-
SQLServer2005のSQL文での別名...
-
アクセス エラーを数値「0」に...
-
accessのレポートで元になるテ...
-
アクセス メモ型 255文字...
-
【Access】フォームで自動計算...
-
Accessで、固定アルファベット+...
-
アクセス A列コピー B列貼り...
-
ACCESSでオートナンバーを任意...
-
ACCESSでの改行コード
-
ファイルメーカーでCountifの様...
-
主キーはオートナンバー型のID...
-
ACCESS VBAにてCSV...
-
accessで重複を防ぎたい
-
ACCESSで和暦を西暦に・・・
-
Access:リンクテーブルマネー...
-
ACCESSでテーブルのフィールド...
おすすめ情報
初心者のためできれば具体的に詳しい手順を知りたいです。
単純に
年齢 = DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
で解決しました。ありがとうございました。
単純に
年齢 = DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
で解決しました。ありがとうございました。