親子におすすめの新型プラネタリウムとは?

Accessについてです。
フォームの「年齢」のコントロールソースに、年齢が自動計算できるよう
=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
と入れましたが、フォームはきちんと自動計算されて年齢が表示されるのですが、テーブルには反映されません(コントロールソース「年齢」を選択しなければやはりなにも反映されないのでしょうか)
テーブルに反映させるにはどうしたらよいのでしょうか。

質問者からの補足コメント

  • 初心者のためできれば具体的に詳しい手順を知りたいです。

      補足日時:2016/05/20 11:18
  • 単純に

    年齢 = DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"

    で解決しました。ありがとうございました。

    No.11の回答に寄せられた補足コメントです。 補足日時:2016/05/24 17:17
  • 単純に

    年齢 = DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"

    で解決しました。ありがとうございました。

    No.10の回答に寄せられた補足コメントです。 補足日時:2016/05/24 17:17

このQ&Aに関連する最新のQ&A

A 回答 (11件中1~10件)

途中から失礼します。


『計算で求められるものはテーブルに保存しない』のが原則かと思います。
テーブルに保存した場合には現時点での年齢を求めるために
更新クエリを毎回行わねばなりません。
なので、
テーブルからは年齢フィールドは削除し、クエリに演算フィールドを設定します。
テーブル1が
ID    オートナンバー型
氏名   テキスト型
生年月日 日付時刻型
・・・
のデザインで
ID 氏名  生年月日
1 ポチ  2006/04/01
2 トラ  2010/10/10
のようなデータが入っているとします。

クエリを新規作成して添付図のようにします。(読めるかな)
デザイングリッドの、年齢:DateDiff("yyyy",・・・・は画面スペース上途中で切れていますので
年齢: DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd"))
にします。
『才』を入れた状態にしたいのなら
年齢フィールドのどこかで右クリックしプロパティを表示させ
書式欄に、0\才
とします。
このクエリをフォームのレコードソースにしてください。
年齢フィールドは数値型のままなので右詰で表示されますし
抽出や平均年齢などの計算もやりやすくなるかと思います。
「【Access】フォームで自動計算した年」の回答画像11
この回答への補足あり
    • good
    • 0
この回答へのお礼

遅くなりましたが回答ありがとうございました。

クエリでもできましたがどうしてもテーブルに反映させたいのです。

年齢の更新後処理のイベントプロシージャで

Private Sub 生年月日_AfterUpdate()
年齢 = Year(date())-Year([生年月日])
End Sub

でテーブルにも反映させることができましたが
単純にいまの年2016から生まれ年を引いた数に
なってしまいます。。

お礼日時:2016/05/24 17:11

遅くなりました。


ちょっとまとめますね。
年齢のコントロール名をtxt年齢、生年月日のコントロール名をtxt生年月日とします。どちらもテキストボックスです。

Private Sub txt生年月日_AfterUpdate()

txt年齢= DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"

End Sub

これでいけると思うんだけど…
この回答への補足あり
    • good
    • 0
この回答へのお礼

遅くなりましたが回答ありがとうございました。

年齢の更新後処理のイベントプロシージャで

Private Sub 生年月日_AfterUpdate()
年齢 = Year(date())-Year([生年月日])
End Sub

でテーブルにも反映させることができましたが
単純にいまの年2016から生まれ年を引いた数に
なってしまいます。。

お礼日時:2016/05/24 17:10

参考になるかな?


http://accessvba.pc-users.net/form/event.html

エラーが出ます?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

今日は時間がなくなってしまったので明日またチャレンジしてみますTT

お礼日時:2016/05/20 17:58

おしい!


年齢のコントロール名=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"

ちなみに、テーブルの方の年齢のデータ型は文字列になってます?数値型だとエラーになると思います。

隣の席なら、すぐ解決するんですけどね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
コントロール名はプロパティシートの名前とはちがうのでしょうか。
データ型はテキスト型にしています。

お礼日時:2016/05/20 17:38

あ、もしかして、フォームのプロパティ画面に貼り付けちゃいました?


もしそうなら、更新後処理のイベントプロシージャ内に記述してください。

アクセスをしばらく触ってないもので、細かいところは忘れてます…
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

Private Sub 生年月日_AfterUpdate()

= DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"

End Sub

ではおかしいですよね…TT

お礼日時:2016/05/20 16:57

年齢コントロールの名前はそのまま(年齢)でいいですよ。

つまり、年齢コントロール名もコントロールソースも「年齢」と。(なんかややこしいですね。)

こういう名前とフィールドの混同があるので、出来ればコントロール名はフィールドと同一にしないほうがいいんですよね。

出来ました?
スマホなんで、遅くてすいません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。こちらこそ何度もすみません。

年齢コントロール名もコントロールソースも「年齢」、
生年月日の更新後処理を=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
にしましたが、できません。。
更新後処理のところはイベントプロシージャは使用しなくて良いのですよね?

お礼日時:2016/05/20 15:56

であれば、生年月日のコントロールの中に「更新後イベント」があると思います。


そこに記述してください。

年齢コントロール名=年齢コントロールソースの計算式。

生年月日のコントロール名は[生年月日]となっていれば、そのままコピペでいけると思います。
カーソル移動時に反映されます。(たしか)

年齢コントロールのコントロールソースが、テーブルの年齢フィールドに設定されていれば反映されていると思います。

※もし反映されていない場合は、レコード移動時かもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
生年月日の「更新後処理」に=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
年齢の「名前」にも=DateDiff("yyyy",[生年月日],Date())+(Format([生年月日],"mmdd")>Format(Date(),"mmdd")) & "才"
年齢のコントロールソースは「年齢」にするということでしょうか。
何度も申し訳ないです。

お礼日時:2016/05/20 14:19

では、どのタイミングで更新したいのでしょうか?



登録ボタンが一般的ですが、更新クエリという方法もあります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
タイミングとしては、フォームで生年月日入力→年齢自動計算されて勝手に表示される
→登録ボタンを押して登録→テーブルを開くと反映されているという感じを考えています。

お礼日時:2016/05/20 13:52

ちなみに、「連結されている」とは、コントロールの値とテーブルの値が連動していて、かつ、フォームの方を変更するとテーブルも変更される状態のことを言います。



見た目が同じなんで、間違いやすいですけどね。
    • good
    • 0

なるほど、分かりました。



まず、フォームの年齢テキストにはテーブルの生年月日を取得し、年齢を計算するという式が設定されています。これは連動はしますが、連結はされていません。
なので、そのフォームのどこかにテキストボックスを追加して、そのテキストのコントロールソースをテーブルの年齢と連結させてください。
コントロールソースに[年齢]でいけると思います。

よくある勘違いなんですが、フォームを自動生成すると、テーブルのフィールド名とテキストボックスの名前が同じになってしまうんで、連結している、と勘違いしてしまいます。実際は、コントロールソースの方が重要なんです。

で、その新しく作成したコントロールに年齢を手入力するとテーブルに反映されてると思います。

ここまで確認できたら、あとはどのタイミングで反映させるかだけです。

理解できました?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
実際にやってみて理解できましたが、フォームには年齢欄が2つになってしまうということですか?
>新しく作成したコントロールに年齢を手入力する
作業なくして実現するのは不可能なのでしょうか。

お礼日時:2016/05/20 13:01

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessで生年月日から現在の年齢を求めるには?

Access2002を使用しています。
生年月日のフィールドに「1965/05/01」を入力しているとします。
その場合、現在の年齢フィールドに今日現在の年齢の「41歳」と出すようにするにはどういった式をどこに入れればよいでしょうか?

また、現在の年齢と何ヶ月かまで求めることは出来ますか?
例えば上記の例ですと、「41歳3ヶ月」と。
勿論、何ヶ月というフィールドは別に作ってもOKです。

どうぞよろしくお願い致します。

Aベストアンサー

>すようにするにはどういった式をどこに入れればよいでしょうか?
下の式を出したいところに書きます
年齢: DateDiff("yyyy",[誕生日],Date())+(Format([誕生日],"mmdd")>Format(Date(),"mmdd")) & "才"

>年齢と何ヶ月かまで求めることは出来ますか?
(DateDiff("m",[誕生日],Date())+(Format([誕生日],"dd")>Format(Date(),"dd")))\12 & "才" & (DateDiff("m",[誕生日],Date())+(Format([誕生日],"dd")>Format(Date(),"dd"))) Mod 12 & "ヶ月"

Qアクセスである時点での年齢を計算する方法

アクセスのクエリで年齢を求めたいのですが方法がわかりません。
教えていただけますでしょうか。

「対象者が学校に入学したときに何歳だったか」を計算したいです。

「生年月日」と「入学年月日」のフィールドがあります。
これを使って計算できますでしょうか。

Aベストアンサー

日付/時刻型ですか?
それと法律上は誕生日の前日に年をとるらしいので注意
Int(Format([入学年月日],"yyyy.mmdd")-Format([生年月日]-1,"yyyy.mmdd"))

QAccessで勤続年数(○年○ヶ月)を表示する方法

質問タイトルのまんまなのですが、
入社年月日と退職年月日を入力し、その期間が『○年○ヶ月』という
表示にするためには、どんな関数を使って設定をしたらよいのでしょうか…。
Excelでも似たような、関数があるようですが、使用の仕方が異なるようで(涙)

アドバイスよろしくお願いします。

Aベストアンサー

表示するようにするなら下記で表示できます。
フォームなどのコントロールソースにコピーしてください。クエリにもOKです。
=Int((IIf(DatePart("d",[入社年月日])>DatePart("d",[退社年月日]),DateDiff("m",[入社年月日],[退社年月日])-1,DateDiff("m",[入社年月日],[退社年月日]))/12)) & "年" & IIf(DatePart("d",[入社年月日])>DatePart("d",[退社年月日]) And DateDiff("m",[入社年月日],[退社年月日])=0,DateDiff("m",[入社年月日],[退社年月日])-1,DateDiff("m",[入社年月日],[退社年月日])) Mod 12 & "ヶ月"

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

Qアクセスで西暦データを和暦表示させる方法

テーブルのデータは西暦で管理していますが、レポートでは和暦で出力する方法は無いでしょうか。生年月日の表示などはどうしても和暦の方が一般的なので、変則的な方法を探していますので、教えて下さい。

Aベストアンサー

Accessでの和暦の表示
ge   H1
gge   平1
ggee  平01

gggee\年     平成01年
ggge\年m\月d\日   平成1年1月1日
gggee\年mm\月dd\日 平成01年01月01日

ge\/m\/d H1/1/1
gee\/mm\/dd H01/01/01

レポートの日付のフィールドのプロパティの書式で上記より選んで設定してください。

QACCESS IIF関数 複数条件の設定について

 選択クエリにおいて、あるフィールド「 X」 のレコード数値が
 
  0<[X]<=50   であれば A 
  50<[X]<=100  であれば B 
  100<[X]<=150  であれば C

 と表記させるフィールド「Y」を追加したいと考えています。
 この場合、Yのフィールド設定で指定する数式についてご教授願います。

 一応、
  IIf(0<[X]<=50,"A","") Or IIf(50<[X]<=100,"B","") Or IIf(100<[X]<=150,"C","")

  としましたが、実行すると、Yの列がすべて「-1」と表記されてしまいます。

 何卒よろしくお願いいたします。

Aベストアンサー

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A", [X]<=100, "B", [X]<=150, "C", True, "")


なお、数学あるいは一般生活では確かに「0<[X]<=50」という表記をしますが、
Accessの関数などではこれだと正しい結果が得られません。
正しく認識させるためには、等号・不等号を挟んだ式は、「左辺」と「右辺」の
2つの要素からなる形にする必要があります。
(「0<[X]<=50」は「[X]>0 And [X]>=50」と分割してやる、と)

但し、今回のご質問のような『連続した範囲』であれば、前(左)で既出となる
式の要素で「[X]<=0」が「真(=-1)」とならなかった時点で、「[X]>0」が保証
されますので、上記のように、「[X]>0」を省略して「[X]<=50」だけを条件として
指定すればOk、ということになります。
(「0<[X]<=50」の次が「80<[X]<120」などのように、「50~80」が欠けた
 場合は、省略ができない、と)


【参考】
「0<[X]<=50」は、このままだと「0 < ([X]<=50)」という式と解釈されます。
この場合、「[X]<=50」は、「真(=-1)」か「偽(=0)」か「Null」のいずれかに
なります。
何にせよ、「0<[X]<=50」全体として「正(=-1)」となることがないため、
ご質問の式では、IIF関数は常に第3引数に指定された値「""」を返す
ことになります。

この結果、式全体としては「"" Or "" Or ""」という形となり、「0かNull」
以外なので、「真(=-1)」という値が返された、ということです。

なお、Nullについては、以前、他の方の質問につけた回答も、併せて参考までに:
http://oshiete.goo.ne.jp/qa/4850675.html

a)IIF関数で対応する場合:
 IIF関数の第2引数または第3引数に、IIF関数を入れ子とする必要があります。

式: IIF([X]<=0, "", IIF([X]<=50, "A", IIF([X]<=100, "B", IIF([X]<=150, "C", ""))))


b)別の組込関数を使用する場合:
 IIF関数は二択ですので入れ子にする必要がありますが、Accessのクエリで
 使用できる、似た機能の関数に、Switch関数というものもあります。
 これであれば、入れ子にする必要がなくなります。
 (詳しくは、Accessのヘルプを参照下さい)

式: Switch([X]<=0, "", [X]<=50, "A"...続きを読む

Qアクセス: フォーム上で計算した数字をテーブルに保存したい。

 こんばんは。また質問させてもらいます・・。
これがアクセスに関して、最後の質問になるようにしたいです!!

 さて、フォームに入力したものは自動的にテーブルに保存されます。
しかし、フォーム上で計算したものは、テーブルに反映されていませんでした。
過去の質問にフォーム上計算したものは、テーブルに反映されないということがわかりました。
では、一体どうすればいいのでしょうか。

 フォームのコントロールソースには
=([QTY]*[COST]) 数量*値段を入れています。

どうすれば、テーブルに表示できるでしょうか。
ご教授お願いいたします。

過去の質問は、こちらを参考しました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1002073

Aベストアンサー

クエリーを覚えると便利です。
テーブル=オペレーターが入力したりする項目
クエリー=テーブルのデータプラスそれから計算出来るさまざまな項目

例えばQTYとCOSTはテーブルに
合計は 合計:[QTY]*[COST}
というようにクエリーに追加すれば、テーブルに
合計という項目を持つ必要がありません。
テーブルの「合計」を削除しても差支えありません。

また入力日という項目をテーブルに持ち
後の整理の目的でクエリーには
年:Year([入力日])
月:Month([入力日])
などとする事も可能です。

これで何年何月のデータだけを抽出したい場合でも
クエリーの抽出条件に 2004 とか 8(月)とかを
入力するだけでOKです。

合計、平均、最大、最小なども....

データベースはクエリーにあるレコードをいちいち保存するのではなく、計算式だけを覚えていて、開くたびに
計算して表示してくれるだけなのです。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Qアクセスで特定のレコードのみのレポートを印刷したいのですが。

アクセス2003である特定のレコードのみのレポートを印刷したいと思っています。現在開いているフォームのレコードのみを印刷(レポートとして)印刷するには、ファイル→印刷→ページ指定で現在印刷しているのですが、他に方法はないでしょうか?単に「レポートの印刷」とすると全てのレコードが印刷されてしまいます。今のところ特定のレコードのみ印刷するには、まずページ数を調べなければいけないので不便です。せっかくパラメータクエリなどで、そのレコードのフォーム画面を表示させても、レポート印刷につながらないので、どなたか良い方法を教えていただけないでしょうか?よろしくお願いいたします。

Aベストアンサー

レポートの基となるクエリを開きます。
フォームに表示されている項目の中で主キーとなるフィールドがどれかを決めます。
そのクエリの中でその主キーフィールドのWHERE条件の欄を選択してビルドを開きます。
レポートを選択するフォームの一覧を開きます。
先ほど選んだ主キーの項目を選んでダブルクリックします。
Ok
そうすれば、フォームから印刷ボタンを押せば開いているページだけが印刷されます。
但し、複数ページの指定をするには、更に複雑な設定が必要ですが、
今の照会した方法を応用すればできるはずです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング