ウォーターサーバーとコーヒーマシンが一体化した画期的マシン >>

アクセスで身長、体重、標準体重、肥満度、BMIを算出したいのですが、どこに計算式を入力したらよいのか解りません。EXCELなら簡単にできますが、入力フォームを作って誰でも簡単に入力できるようにしたいのでアクセスで作成したいと考えています。計算式の入力の仕方(場所)を教えてください。よろしくお願いします。。。

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

A 回答 (5件)

Alt + F11 で VBE のウィンドウを開き、メニュー → 挿入 → 標準モジュール


で下記のコードを標準モジュールに挿入します。
フォームのコントロール名がそれぞれ
身長、体重、標準体重、肥満度、BMI とすると
例えば肥満度でしたら
そのコントロールソースに
=debu([身長],[体重]) とすれば良いと思います

Function DEBU(Height As Variant, Weight As Variant) As Variant の引数
Height に「身長」コントロールの値が
Weight には「体重」コントロールの値が入ります。

この下からコピペ

'標準体重=身長(m)の2乗×22、
Function standardWeight(Height As Variant) As Double
On Error GoTo err
standardWeight = (Nz(Height, 0) / 100) ^ 2 * 22
'小数第二位で四捨五入
standardWeight = Int(standardWeight * 10 + 0.5) / 10
Exit Function

err:
standardWeight = -999
End Function

'肥満度(%)=体重/標準体重×100-100、
Function DEBU(Height As Variant, Weight As Variant) As Double
On Error GoTo err

DEBU = Weight / ((Height / 100) ^ 2 * 22) * 100 - 100
DEBU = Fix(DEBU * 10 + 0.5) / 10
'DEBU = Int(DEBU * 10 + 0.5) / 10
Exit Function

err:
DEBU = -999
End Function

'BMI=体重/身長(m)の2乗です。
'入力は体重と身長のみで、身長の単位はcmで入力したいと思っています。
Function BMI(Height As Variant, Weight As Variant) As Double
On Error GoTo err

BMI = Weight / (Height / 100) ^ 2
BMI = Int(BMI * 10 + 0.5) / 10
Exit Function

err:
BMI = -999
End Function
    • good
    • 0
この回答へのお礼

ありがとうございました。うまくできました。またよろしくお願いします。

お礼日時:2006/06/25 23:41

簡単に作るには、


テキストボックス
[身長],[体重],[標準体重],[肥満度],[BMI]
を作成し、
コマンドボタン「計算」を作成し、押下したときのイベントにそれぞれ計算をして表示させるというのがよいと思います。

例としては

Private Sub 計算_Click()
Me.BMI.Value =me.体重.value/(me.身長.value)^2
・・・・・・
me.refresh
End Sub

もしくは計算した値をメッセージボックスで表示させるとか、

身長、体重に数値が正しい単位で入力されていることを入力時、もしくは計算時にチェックしなければなりません。
    • good
    • 0
この回答へのお礼

ありがとうございました。またよろしくお願いします。

お礼日時:2006/06/25 23:42

履歴管理をしなくてよいなら、



フォーム上にテキストボックスをいくつか配置して、身長、体重が入力されたときに標準体重、肥満度などを計算させて表示させるのが(VBAで書くのが)手っ取り早いと思います。 

標準体重は計算で出しているものですか? それとも、年齢、性別などでテーブルなどを参照しているのでしょうか? 

履歴管理をするならば、テーブルをいくつか作る必要があります。 一般的に使いやすくするためには、感受性のケースでは患者データをフォームに呼び込むためには患者IDを入力した際に、VBAなどでテーブルを検索して該当データをフォームに呼び込んでいした。 

この回答への補足

履歴管理はしません。単純に体重と身長を入力したら、計算で標準体重、肥満度、BMIが表示されるようにしたいです。入力は身長(cm)、体重(Kg)のみで、計算式は、標準体重=身長(m)の2乗×22、肥満度(%)=体重/標準体重×100-100、BMI=体重/身長(m)の2乗です。

補足日時:2006/06/22 13:28
    • good
    • 0

私なら標準モジュールに自前の関数を作成して


クエリ・フォーム・レポートで呼び出すようにします
これなら不都合が有った場合でも一箇所(関数)を変更すれば良いので
最初は戸惑うかもしれませんが長期的にはメンテナンスがし易いかと
思います。

標準体重、肥満度、BMI の求め方の公式?が分からないので・・
(BMIってなに?)
ここまでにいたします。

この回答への補足

ありがとうございます。標準体重=身長(m)の2乗×22、肥満度(%)=体重/標準体重×100-100、BMI=体重/身長(m)の2乗です。ちなみに入力は体重と身長のみで、身長の単位はcmで入力したいと思っています。よろしくお願いします。

補足日時:2006/06/22 13:41
    • good
    • 0
この回答へのお礼

ありがとうございました。またよろしくお願いします。

お礼日時:2006/06/25 23:42

たとえば



[テキスト0]と[テキスト1]というテキストボックスがあって[テキスト2]というテキストボックスに合計を出すとしたら[テキスト2]のプロパティのコントロールソースに=[テキスト0]+[テキスト1]とか書きますね。

コレが一番エクセル的かも。

でも、アクセスの場合、VBAを使う方がわかりやすいかも。

また、データはテーブルに置くと思うのですがそのデータをどういう方法でフォームに表示させるか、そのあたりも気になりますね。連結フォームなのか非連結フォームなのか。

とりあえず、そんなとこですが、他にも計算方法はあります。

この回答への補足

履歴管理はしないので、非連結フォームのつもりです。

補足日時:2006/06/22 13:44
    • good
    • 0
この回答へのお礼

ありがとうございました。またよろしくお願いします。

お礼日時:2006/06/25 23:43

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

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

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

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

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エクセルで標準身長・体重の求め方

はじめまして。
福祉施設で働いており、データの管理をしています。
児童の身長から標準体重を計算で出したいのですが、お知恵を拝借できますでしょうか?

1)まず、身長に応じた標準体重をデータ化しました。
2)次に、身測データの身長・体重をデータ化しました。
3)身測データの身長から(1)でデータ化した標準体重を表示させたいのです。

問題は、身測結果の身長が必ずしも(1)の身長と一致しないことです。
例えば、100cmに対して○○kgという(1)のデータに対して身測の身長が99.8cm等々・・・。
(1)のデータ内から最も近い数字を探してあてはめてくれるような関数などありましたらご教授下さい。

わかりにくい文章で大変申し訳ありませんが、ヨロシクお願いします。

Aベストアンサー

こんにちは。VLOOKUP関数を使うといいと思いますよ。
標準体重を表示させたいセルに次のよう関数を入れてみてください。
=VLOOKUP(身測データの身長が入力されているセル,身長に応じた標準体重の範囲,身長に応じた標準体重の範囲の中で、範囲内で標準体重のデータが入力されている列を、左端からの列数で指定,true)
最後のtrueがポイントで、ここをtrueに指定しておくと、ちょうど一致する数値がなかった場合、検索値未満で最も大きい値を参照して値を返します。
例)A1からB20まで標準体重のテーブル(A列に身長、B列に身長に応じた標準体重を入力)、D列に身測データの身長が入力されていた場合。

=VLOOKUP(D1,$A$1:$B$20,2,TRUE)

ちょっと分かりにくい説明で申し訳ありませんが、どうぞよろしくお願いいたします。

QWordで、1ページを丸ごと削除するには?

1ページしか必要ないのに、真っ白な2ページ目がその下に表示されてしまった場合、この余分な2ページ目を一括削除(消去)する為に、何かいい方法があるでしょうか?

Aベストアンサー

<表示されてしまった場合>
これはそれなりに理由があるわけで、改ページや改行によって、次のページにまで入力が及んでいる時にそうなります。
特に罫線で表を作成し、ページの下一杯まで罫線を引いたときなどには、よくなる現象です。

さて、メニューの「表示」で段落記号にチェックが入っていないと、改行や改ページなどの入力情報が見えず、白紙のページを全て選択→削除してもそのままということが良くあります。
1 改行マークが白紙のページの先頭に入っていれば、それをBackSpaceで消してやる。
2 罫線を使っている場合は、それでも効果がない場合がありますが、その時は行数を増やしてやる。
などの方法があります。

QAccess 同じデータをたくさんのレコード(同一列)に一度に入力するには

いつもお世話になっています。
Accessの基本的な入力に関して教えてください。
同じデータをたくさんのレコード(同一フィールド)に一度に入力するには、どうすればよいか教えてください。

Excelの列方向へのコピーと同じような感覚でできないのでしょうか?

よろしくお願いします。

Aベストアンサー

質問の回答にならないかも知れませんが・・・

1.EXCELでコピーするための元データを作成します
  ※仮にレコードが1000件ある場合はEXCELで1000行作ります。

2.Excelのデータをコピーします。

3.Accessのテーブルを開きます。

4.先頭レコードの貼り付けをしたい項目にカーソルを合わせます。(カーソルは白の十字)

5.下方向へドラッグし、項目を選択します。

6.貼り付けをします。

※貼り付けに失敗した場合、元に戻せませんので必ず元ファイルのコピーを取ってから行ってください

よろしければ、お試し下さい

Q抽出条件でデータ型が一致しません。のエラーメッセージが出る

フォームで入力された値を、
次のファイルでクエリを読み込むときに代入するASPを作成しましたが、実行しようとすると、
「データ型が一致しません。」のエラーメッセージが出ます。
DBはACCESSを使用しています。ACCESSの対象テーブルで、
データ型を「テキスト型」にすると問題ないのですが、
「数値型」にすると、「データ型が一致しません」の
エラーメッセージになります。
フォームでは、プルダウンで「数値」を選択するようになっています。
宜しくお願いします。

Aベストアンサー

Where区に指定した条件のフィールドが数値なら『'』でくくる必要がありません

Set rs = db.Execute("SELECT テーブル3.* FROM テーブル3 WHERE (テーブル3.番号)=" & bangou)
といった具合に修正してみましょう

『'』でくくる必要があるのは対象のフィールドが文字列の場合です

Qエクセル 0や空白のセルをグラフに反映させない方法

以下の点でどなたかお教えください。

H18.1~H20.12までの毎月の売上高を表に記載し、その表を元にグラフを作成しています。グラフに反映させる表の範囲はH18.1~H20.12の全てです。
そのためまだ経過していない期間のセルが空白になり、そこがグラフに反映され見づらくなります。
データを入力する都度グラフの範囲を変更すればいいのですが、うまく算式や設定等で空白や0円となっているセルをグラフに反映させない方法はありますか?

お手数ですが、よろしくお願いいたします。

Aベストアンサー

売上高のセルは数式で求められているのですよね?
それなら
=IF(現在の数式=0,NA(),現在の数式)
としてみてください。
つまり、0の場合はN/Aエラーにしてしまうんです。N/Aエラーはグラフに反映されません。

QAccess 2010で実行時エラー3061

Access 2010でDoCmd.SendObjectを使用してメールを自動生成したいのですが、実行時エラー3061でとまってしまいます。デバッグすると、Set RS = DB.OpenRecordset("30DaysQuery")でとまっています。生成するメールは1通、その本文に複数データを列記という形です。イメージとしてはこんな感じです。→<http://www.tsware.jp/tips/tips_464.htm>
大した知識もなく作っています。言葉足らず、情報足らずの点があれば、ご指摘ください。よろしくお願いします。

Private Sub EmailReminder_Click()

Dim DB As Database
Dim RS As Recordset
Dim Subject As String
Dim Body As String

Subject = "Audit Corrective Actions"
Body = "Good Morning Sir/Ma'am," & vbCrLf _
& "This is an auto generated email." & vbCrLf _
& "In response to a recent audit, your attention is needed for the following item(s)." & vbCrLf & vbCrLf _
& "Please advise when these actions are completed. If you have any questions please feel free to contact our office. Thank you for your help and cooperation in this matter. Have a nice day." & vbCrLf & vbCrLf _
& "Corrective Actions:" & vbCrLf _

Set DB = CurrentDb()
Set RS = DB.OpenRecordset("30DaysQuery")
Do Until RS.EOF
Body = Body &
"------------------------------------------------------" & vbCrLf _
& "[Due Date: " & RS!DueDate & "] [Agency: " & RS!Agency & "] [Report: " & RS!Report# & "]" & vbCrLf _
& "Corrective Action: " & RS!CorrectiveAction & vbCrLf _
& "Recommendation: " & RS!Recommendation & vbCrLf
RS.MoveNext
Loop
DoCmd.SendObject , , acFormatTXT, RS!Email, "***@bbb.com", ,
Subject, Body, True
RS.Close
Resume Next

End Sub

Access 2010でDoCmd.SendObjectを使用してメールを自動生成したいのですが、実行時エラー3061でとまってしまいます。デバッグすると、Set RS = DB.OpenRecordset("30DaysQuery")でとまっています。生成するメールは1通、その本文に複数データを列記という形です。イメージとしてはこんな感じです。→<http://www.tsware.jp/tips/tips_464.htm>
大した知識もなく作っています。言葉足らず、情報足らずの点があれば、ご指摘ください。よろしくお願いします。

Private Sub EmailReminder_Click()

Dim DB As...続きを読む

Aベストアンサー

> 下記のように書き換えたところ、「エラー3265 このコレクションには項目がありません」とい うエラーに変わり、

はい、これなら一目で原因がわかります。

かなり分かりにくいメッセージではありますが、この場合には
「レコードセットの フィールドコレクション に 指定した項目名が見つからないよ」 という意味でしょう。
実際には、エラーになった行にあるコレクション の種類ごとに調べる必要があります。
(フォームのテキストボックス名が間違っている場合など。)

項目数が少ない場合は
止まって、黄色になっている行の 項目名の上にマウスを持っていくと
正常なものはその値、間違っている項目名のところは 「コレクションには項目がありません」 が表示されます。

では、フィールド名は絶対に間違っていないのになぜ?
という疑問にはこちら。

Access 2007 の予約語と記号
http://office.microsoft.com/ja-jp/access-help/HA010030643.aspx

Access データベースでの作業時に使用すべきでない特殊文字
http://support.microsoft.com/kb/826763/ja

フィールド、コントロール、およびオブジェクトの名前について
http://office.microsoft.com/ja-jp/access-help/HP005186769.aspx

Access 2007 または Access 2003 でクエリを実行すると、全角のアラビア数字が原因でエラー メッセージが表示される
http://support.microsoft.com/kb/932994/ja

先頭文字が全角数字のフィールド名を含む Access のクエリを最適化すると、フィールドの定義が失われる場合がある
http://support.microsoft.com/kb/937915/ja

半角カタカナ や 機種依存文字 を 避けるのは言うまでもありません。

"30DaysQuery" のような数字で始まるもの、
"Report" のような 予約語 とぶつかるもの、
「_」 (アンダーバー) 以外の記号(全角・半角) を 含むもの
は、後々分かりにくいエラーなどのトラブルを起こす可能性があります。

できるだけ使用しないことをお勧めします。

直接の回答は

手っ取り早いのは

RS!Report# を RS![Report#] に変更する。

根本的な対策は、「Report#」 という テーブルのフィールド名を変更する。
(例: ReportNo 、 ReportNum など)

テーブルのフィールド名 変更が 影響が大きすぎるなら
クエリの フィールド名 を変更する。
(クエリのフィールドのところに 「ReportNo: Report#」 とか。)

Report という フォーム名もかなりビックリです。
F_Report とか frmReport など のような命名 がお勧めです。

> 下記のように書き換えたところ、「エラー3265 このコレクションには項目がありません」とい うエラーに変わり、

はい、これなら一目で原因がわかります。

かなり分かりにくいメッセージではありますが、この場合には
「レコードセットの フィールドコレクション に 指定した項目名が見つからないよ」 という意味でしょう。
実際には、エラーになった行にあるコレクション の種類ごとに調べる必要があります。
(フォームのテキストボックス名が間違っている場合など。)

項目数が少ない場合は
止まって、黄...続きを読む


人気Q&Aランキング