- 締切済み
データの評価について教えてください!!
エクセルで 血液検査の数値データを入力しそれについて 評価をつけるというフォーマットを作りたいと考えています 今のところ、IF文でやってみているのですが ひとつひとつ基準となる数値が違うため 20項目くらいについてそれぞれIF文を設定するのが大変です 例えば、白血球であれば ****************** 5.9以下 異常 6.0~6.4 要注意 6.5~8.0 正常 8.1~9.0 要注意 9.1以上 異常 ******************* という基準なので =IF(セル番地>=9000,"異常",IF(セル番地>=8600,"要注意", IF(セル番地>=3200,"正常",IF(セル番地>=2600,"要注意", IF(セル番地<=2500,"異常"))))) と設定しています 一応評価はきちんと出ているのですが 他のシートでは数値のセル番地が違っていたりして セル指定をやり直したりと面倒です また赤血球、脂質、などなど項目ごとに基準も違います VBAはまったくの素人でネットで検索してやってはみたものの、 IF文制御という方法で 数値を入力すると”正常”とか”異常”とか ポップアップが出るとこまでしかできませんでした これも白血球だけで普通のIF文より長文でより面倒でした・・・ 何か良い方法があれば教えていただきたいです よろしくお願いします
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! お邪魔します。 解釈が違っていたらごめんなさい。 すべての基準は↓の画像の真ん中の表だという事で回答されてもらいます。 各項目毎の数値を真ん中の表の基準に合わせるために、 B列に入力した数値を右側の表の数値で割った数値を作業列のC列に表示させます。 それに基づいて、状態を表示するようにしてみました。 ↓の表で説明させていただくと・・・ C2セル =IF(B2="","",B2/INDEX($L$2:$L$9,MATCH(A2,$K$2:$K$9,0))) D2セル =IF(C2="","",INDEX($I$2:$I$6,MATCH(C2,$F$2:$F$6,1))) という数式を入れて、C2・D2セルを範囲指定してオートフィルで下へコピーしています。 以上、参考になれば幸いですが、 的外れの回答なら読み流してくださいね。m(__)m
- KURUMITO
- ベストアンサー率42% (1835/4283)
データベースとしてSheet2のA1セルに白血球の文字が入りA2から下方にお示しの例では5.9 6.4 8.0 9.0 9.1とA6まで入力します。B列のB2セルからはそれに対応した評価を入力します。 同様にして、赤血球についてもC1セルに赤血球と入力して、C2セルから下方に数値を、また、D2セルから下方にはそれに対応した評価を入力します。 数値の行や評価の行は下方に何行でも構いません。 また、検査項目にそれぞれについては2列ずつに入力するようにします。 そこでSheet1に戻って、A列の1行目から白血球などの検査項目が入力され、C列には検査の数値が入力されるとします。そこでそれぞれのデータについての評価ですがD1セルに次の式を入力し、下方にオートフィルドラッグすればよいでしょう。 =IF(C1="","",IF(COUNTIF(Sheet2!$1:$1,A1)=0,"",IF(C1<=INDEX(Sheet2!$A:$AA,2,MATCH(A1,Sheet2!$1:$1,0)),INDEX(Sheet2!$A:$AA,2,MATCH(A1,Sheet2!$1:$1,0)+1),IF(C1>=INDEX(Sheet2!$A:$AA,COUNTA(INDEX(Sheet2!$A:$AA,1,MATCH(A1,Sheet2!$1:$1,0)):INDEX(Sheet2!$A:$AA,100,MATCH(A1,Sheet2!$1:$1,0))),MATCH(A1,Sheet2!$1:$1,0)),INDEX(Sheet2!$A:$AA,2,MATCH(A1,Sheet2!$1:$1,0)+1),IF(COUNTIF(INDEX(Sheet2!$A:$AA,1,MATCH(A1,Sheet2!$1:$1,0)):INDEX(Sheet2!$A:$AA,100,MATCH(A1,Sheet2!$1:$1,0)),C1)=1,INDEX(Sheet2!$A:$AA,MATCH(C1,INDEX(Sheet2!$A:$AA,1,MATCH(A1,Sheet2!$1:$1,0)):INDEX(Sheet2!$A:$AA,100,MATCH(A1,Sheet2!$1:$1,0)),1),MATCH(A1,Sheet2!$1:$1,0)+1),INDEX(Sheet2!$A:$AA,MATCH(C1,INDEX(Sheet2!$A:$AA,1,MATCH(A1,Sheet2!$1:$1,0)):INDEX(Sheet2!$A:$AA,100,MATCH(A1,Sheet2!$1:$1,0)),1)+1,MATCH(A1,Sheet2!$1:$1,0)+1))))))
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
- mshr1962
- ベストアンサー率39% (7417/18945)
=LOOKUP(セル番地,{-9999,2600,3200,8600,9000},{"異常","要注意","正常","要注意","異常"}) 上記の式で -9999~2599:異常 2600~3199:要注意 3200~8599:正常 8600~8999:要注意 9000以上 :異常 になります。 {-9999,2600,3200,8600,9000}と{"異常","要注意","正常","要注意","異常"} をセル範囲での参照も可能です
- mako_sea
- ベストアンサー率47% (62/130)
- Sinogi
- ベストアンサー率27% (72/260)
>他のシートでは数値のセル番地が違っていたりして データがシート1ではA列にあり、シート2ではC列にあるのでしょうか その場合シート1の評価がE列なら、シート2ではF列にすれば評価式をCopy&Pasteすればすむ筈です。 データと評価の相対位置を一定にしましょう。 >また赤血球、脂質、などなど項目ごとに基準も違います 評価基準シートを設け、絶対参照($A$1 など)とすればよいでしょう。 =IF(セル番地>='基準値'!$A$1,"異常",IF(セル番地>='基準値'!$A$2,"要注意",・・・ ところで提示されている評価式と基準値が異なるのはコピーミスとしても、 >=IF(セル番地>=9000,"異常",IF(セル番地>=8600,"要注意", IF(セル番地>=3200,"正常",IF(セル番地>=2600,"要注意", IF(セル番地<=2500,"異常"))))) これの最後のIf式は<=2500となっており、直前のセル番地>=2600との評価結果から 2501~2599はFalseが表示されます。 直前までと同じ符号にするほうがわかりやすい式になるでしょう
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
お礼
回答ありがとうございます 数値ぜんぜん違いました。申し訳ありません 正しくは ************** 2.5以下 異常 2.6~3.1 要注意 3.2~8.5 正常 8.6~8.9 要注意 9.0以上 異常 ******************* です式は1000倍してあります 今作っている表を貼り付けてみたのですが この表の各項目について評価基準についての評価式を 別シートに作るということでしょうか? 理解が悪くて申し訳ありません >これの最後のIf式は<=2500となっており、直前のセル番地>=2600との評価結果から 2501~2599はFalseが表示されます。 ということは >=IF(セル番地>=9000,"異常",IF(セル番地>=8600,"要注意", IF(セル番地>=3200,"正常",IF(セル番地>=2600,"要注意","異常")))) とすればよいでしょうか?