こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

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

何か良い方法があれば教えていただきたいです
よろしくお願いします

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-06-22 14:52:54

QNo.5065269

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.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

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-06-22 18:35:19

ANo.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))))))

投稿日時 - 2009-06-22 18:12:07

ANo.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)))))
下へオートフィル
ただし、黄色の部分は重複をなくし、同じ値を使うこと
(順番は関係ない)

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-06-22 17:47:55

ANo.4

=LOOKUP(セル番地,{-9999,2600,3200,8600,9000},{"異常","要注意","正常","要注意","異常"})
上記の式で
-9999~2599:異常
2600~3199:要注意
3200~8599:正常
8600~8999:要注意
9000以上 :異常
になります。
{-9999,2600,3200,8600,9000}と{"異常","要注意","正常","要注意","異常"}
をセル範囲での参照も可能です

投稿日時 - 2009-06-22 17:02:31

ANo.3

こんにちは。
評価の分類数が多いほど、IFのネストが深くなり大変ですよね。
でも別にIFでなくてもいいのですよね?
評価用の基準値を記入したシートを1枚作成し、
その表からVLOOKUPでとりだす方法が
簡単でメンテもしやすいのでは、と思いました。

添付した画像は、式の「範囲」に名前の定義を使用しています。
シート2(評価基準シート)のA1:B7に「白血球」、
D1:E7は「赤血球男」と名前をつけて式を簡略化しました。
ご参考になれば幸いです。

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-06-22 16:38:41

ANo.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が表示されます。

直前までと同じ符号にするほうがわかりやすい式になるでしょう

投稿日時 - 2009-06-22 15:21:47

お礼

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

とすればよいでしょうか?

投稿日時 - 2009-06-22 15:55:05

ANo.1

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

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2009-06-22 15:16:57

お礼

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

投稿日時 - 2009-06-22 15:41:47

あなたにオススメの質問