- ベストアンサー
Access2007を使用しています。現在、社員マスターを作成していて
Access2007を使用しています。現在、社員マスターを作成していて生年月日から年齢を計算させています。 その計算結果(年齢)が40歳以上の場合、社会保険・介護保険・厚生年金という項目(YesNo型に設定しています)にそれぞれにチェック(Yes)を。40歳未満の場合は、健康保険・厚生年金のみにチェックが自動的につくように設定したいと思っています。いろいろと調べてIIFを使うのかな?と思って読んでみたのですが、うまくいきません。どのように設定したらいおいのでしょうか。宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>Aならば1でそれ以外は2といったパターンだと思うのですが その通りです。 >Aならば1、Bならば2cならば3といった場合も使えるのでしょうか? >AかつBならば1でそれ以外は2という式もIIFでいいんでしょうか? 一度に3つ以上の選択肢に IIF を用いるには =IIF(論理式,真のときの値,偽の時の値)で「偽の時の値に」IIF関数を入れ子にします。 =IIF(論理式1,真のときの値,IIF(論理式2,真のときの値,偽の時の値)) 即ち =IIF(A,1,IIF(B,2,3)) 選択肢が多くなると入れ子の入れ子…と複雑さが増します。 選択肢が2つの場合IIF 選択肢が3つ以上の場合SWICH とお考えになればいかがでしょう >SWICHを使うのかbetween使うのか … 「SWICHを使うのかIIF使うのか」ですね 論理演算子として <,<=,=,>=,and,or,between 等があります。 探究心がおありで、ご理解も正確ですね VBA,SQL文も覗いて見られてはと思いますが
その他の回答 (3)
- shinkami
- ベストアンサー率43% (179/411)
難しいようですがIIF の パラメータは エクセルのif関数と同じです =IIF(論理式,真のときの値,偽の時の値) 前回回答は65歳以上にチェックをつける式です。 すみません40歳未満ですね 次式に訂正してください =IIf(Int(DateDiff("d",[生年月日],Date())/365.25)<40,Yes,No)
お礼
ありがとうございました。 できました!! IIF覚えると、いろいろと使えそうですね。 これはAならば1でそれ以外は2といったパターンだと思うのですが、Aならば1、Bならば2cならば3といった場合も使えるのでしょうか?また、AかつBならば1でそれ以外は2という式もIIFでいいんでしょうか?SWICHを使うのかbetween使うのか、いまいちよくわからなかったもので。
- shinkami
- ベストアンサー率43% (179/411)
お考えの通り iif を使います =IIf(Int(DateDiff("d",[生年月日],Date())/365.25)>=65,Yes,No) ※ 詳細に検証したわけではありませんが 満年齢は次式を使っています。 =year(date()-[生年月日])-1900
お礼
難しいですね・・・。 IIfの続きの式に苦戦していました。 式まで書いていただきありがとうございます。 さっそくやってみます!!!
- shinkami
- ベストアンサー率43% (179/411)
補足お願いします。 ・VBAを使用していますか(満年齢計算時にフラグの設定処理を追加すると思うのですが) ・満年齢の基準日は何時ですか 起算日設定時?、今日?、レポート時
補足
早速の回答ありがとうございます。 説明不足で申し訳ございません。 年齢の計算は 起算日・・今日 計算式・・=Int(DateDiff("d",[生年月日],Date())/365.25) です。 フォームで非連結で上記年齢算出計算をさせて、マクロで年齢という項目へ値の代入をさせています。 宜しくお願い致します。
お礼
ありがとうございました。 大変勉強になります。IIFで増やしていこうとすると複雑になりますよね。 やっぱり、今回はSWICHでやってみたいと思います!! 今は参考書片手にネットで調べながらなのでVBAやSQLについて無知ですが VBA、SQLができるようになるとできることもたくさん増えると思うので勉強してみたいと思います。 ちょっと、Accessが楽しくなってきました!! ご丁寧にありがとうございました。