• 締切済み

データの評価について教えてください!!

エクセルで 血液検査の数値データを入力しそれについて 評価をつけるというフォーマットを作りたいと考えています 今のところ、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文より長文でより面倒でした・・・ 何か良い方法があれば教えていただきたいです よろしくお願いします

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.7

こんにちは! お邪魔します。 解釈が違っていたらごめんなさい。 すべての基準は↓の画像の真ん中の表だという事で回答されてもらいます。 各項目毎の数値を真ん中の表の基準に合わせるために、 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)
回答No.6

データベースとして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))))))

回答No.5

#1です >一人について何項目もデータがあるのです >その場合もVLOOKUPは使えますか? 使えます。 単純に下へオートフィルの作業が使えないだけです 評価が同じでよいなら D2セル =IF(C2="","",INDEX($F$2:$F$6,MATCH(C2,INDEX($G$2:$I$6,,MATCH(A2,$G$1:$I$1,0))))) 下へオートフィル ただし、黄色の部分は重複をなくし、同じ値を使うこと (順番は関係ない)

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

=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)
回答No.3

こんにちは。 評価の分類数が多いほど、IFのネストが深くなり大変ですよね。 でも別にIFでなくてもいいのですよね? 評価用の基準値を記入したシートを1枚作成し、 その表からVLOOKUPでとりだす方法が 簡単でメンテもしやすいのでは、と思いました。 添付した画像は、式の「範囲」に名前の定義を使用しています。 シート2(評価基準シート)のA1:B7に「白血球」、 D1:E7は「赤血球男」と名前をつけて式を簡略化しました。 ご参考になれば幸いです。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.2

>他のシートでは数値のセル番地が違っていたりして データがシート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が表示されます。 直前までと同じ符号にするほうがわかりやすい式になるでしょう

Smn0sd
質問者

お礼

回答ありがとうございます 数値ぜんぜん違いました。申し訳ありません 正しくは ************** 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,"要注意","異常")))) とすればよいでしょうか?

回答No.1

[Ctrl]+[F3]名前の定義 名前 白血球表 参照範囲 =$E$2:$F$6 C2セルに =IF(A2="","",LOOKUP(B2,白血球表)) または =IF(A2="","",VLOOKUP(B2,白血球表,2)) 下へオートフィル

Smn0sd
質問者

お礼

回答ありがとうございます 書き方が悪くてすみません 一つの項目について何人ものデータがあるわけではなく 一人について何項目もデータがあるのです その場合もVLOOKUPは使えますか?

関連するQ&A