- ベストアンサー
エクセル、同じ数字が入らない。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
C列が得点?として計算しています。 上の方は ランク=IF(C1=100,"S",IF(C1>90,"A",IF(C1>70,"B","C"))) ただし90はBランクですね。 順位=SUMPRODUCT(($C$1:$C$100+1-ROW($C$1:$C$100)/100>C1+1-ROW()/100)*1)+1 (範囲は使用している物に合わせてください。) 下の方は 順位は上と同じで ランク=MID("SAABBBBBBBBBBC",MIN(順位,14),1) 順位でランクを振り分ける。
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17068)
#5です。関数を使ってやって見ました。作業列(C列)を1列使います。 (サンプルデータ)A1:D13 (A列)(B列) (C列) (D列) Aさん 90 90.1 B Bさん 100 100.1 A Cさん 90 90.2 B Dさん 100 100.2 S Eさん 90 90.3 B Fさん 95 95.1 A Gさん 60 60.1 B Hさん 70 70.1 B Iさん 80 80.1 B Jさん 75 75.1 B Lさん 65 65.1 B Kさん 85 85.1 B Mさん 72 72.1 B (VLOOKUP用の表) E1:F3 0 S 2 A 4 B 4以上(4,5、・・13)はB、2以上(2,3)はA、0以上(1)はSを意味している表です。 段階から値を求める、VLOOKUP関数のTRUE型で使う表です。 (関数式) C1に=B1+COUNTIF($B$1:$B1,B1)/10と入れる。 同じ点数は9人以下であると仮定し、わざと同点を違う 小数点付きの数値を与えている。 C1をC2以下の下方向に複写する。 D1に=VLOOKUP(RANK(C1,$C$1:$C$13),$E$1:$F$3,2,TRUE)といれ、下方向に 複写する。 (結果) 結果は上記D列の通りになる。 B列は、正整数のデータであると仮定が必要。
- imogasi
- ベストアンサー率27% (4737/17068)
普通の関数式では複雑にならざるを得ないようです。 そこでユーザー関数を作ってみました。 (データ)A1:B13に (A列)(B列) (C列)=関数式の結果 Aさん 90 B Bさん 100 A Cさん 90 B Dさん 100 S Eさん 90 B Fさん 95 A Gさん 60 B Hさん 70 B Iさん 80 B Jさん 75 B Lさん 65 B Kさん 85 B Mさん 72 B (関数式) C1に=rankx($B$1:$B$13,B1,1,2,10)と入れる。 絶対番地部分に注意。 C2からC13まで複写する。 結果は上記の通り。 同点の場合どちらが上ランクになるかは、問わない。 (コード) Function rankx(a, b, n1, n2, n3) Dim d(1000), r(1000) rw = b.Row Dim cl As Range i = 0 For Each cl In a i = i + 1 d(i) = cl r(i) = i Next For j = 1 To i For k = j To i If d(j) > d(k) Then GoTo p01 w = d(j) d(j) = d(k) d(k) = w w = r(j) r(j) = r(k) r(k) = w p01: Next k Next j For k = 1 To i If r(k) = rw Then Select Case k Case Is <= n1 rankx = "S" Case Is <= n1 + n2 rankx = "A" Case Else rankx = "B" End Select End If Next k End Function 上記を ツール-マクロ-VBEで出る画面において メニュの挿入ー標準モジュールで出る画面に先に、上記をコピーして、貼りつけておくこと。 やっていることは、指定列データを大ー>小の順に並べて 順位をつけて、指定した人数分の区切りで順に、S、A、Bを振っている。この点ではやっていることは常識的に思いつくことかと。
- s_yoshi_6
- ベストアンサー率73% (1113/1519)
もし同じ点数の場合、リストの上の方にある人が上位になる、ということでよければ、点数からそのセルの行番号に応じた十分小さい数(例えばエクセルの行数の最大値は65536なので、小数第1位を四捨五入しても1にならない程度で「行番号÷1000000」とか。ただし点数が小数もありうるのであれば、もっと小さくしなければなりません)を点数から引いてやって、その順番を使うという方法ではいかがでしょうか。 A列から右に、名前、点数、作業列、ランク、順番(質問に書かれていますので、順番の列も作成するものとします)として2行目から21行目まで入力していくものとします。 C2に =B2-ROW()/100000 D2に =IF(OR(B2="",B2<0,B2>100),"",IF(AND(B2=100,E2=1),"A",IF(AND(B2>90,E2<=3),"B",IF(AND(B2>70,E2<=13),"C","D")))) E2に =RANK(C2,$C$2:$C$21) かつ 右クリック→セルの書式設定で、ユーザー定義の種類に「0"番"」と入力 として以下コピーとします。 C列は列の非表示で隠すか、もしB列の点数が直接入力でなく、どこか別のセルの参照であって、かつ点数の数値を他の計算に使われないのであれば、参照セル(B2)をそのセルに代えてC列をそのまま点数欄にされてもよいと思います。(セルの書式は「数値」の小数点以下の桁数を0とするなどすれば、問題ないと思います) またE列(順番の列)を実際には作成しないのであれば、D2の式のE2のところに RANK(C2,$C$2:$C$21)を代入して、 =IF(OR(B2="",B2<0,B2>100),"",IF(AND(B2=100,RANK(C2,$C$2:$C$21)=1),"A",IF(AND(B2>90,RANK(C2,$C$2:$C$21)<=3),"B",IF(AND(B2>70,RANK(C2,$C$2:$C$21)<=13),"C","D")))) とされるとよいと思います。 P.S. 質問の Aさん 80 90 A 3番 Bさん 20 100 S 1番 Cさん 30 90 A 4番 Dさん 40 100 S 2番 Eさん 50 90 A 5番 は Aさん 90 A 3番 Bさん 100 S 1番 Cさん 90 A 3番 Dさん 100 S 1番 Eさん 90 A 3番 のことではないかと解釈して回答しました。
- hinebot
- ベストアンサー率37% (1123/2963)
まず、 Aさん 80 90 A 3番 Bさん 20 100 S 1番 Cさん 30 90 A 4番 Dさん 40 100 S 2番 Eさん 50 90 A 5番 左から2列目の数字(80,20,30,40,50)の意味を説明してください。 最後の順位付けの法則(基準)がわかりません。 補足お願いします。
補足
申し訳ないです・ 80.20.30.40.50はコードナンバーです。 順位は90、100、90、100、90で 同じ数字に関しては、上から順番ずつとしてあります。 説明不足で申し訳ありません。。
- peugeot307
- ベストアンサー率22% (29/130)
100点(?)でも2番だとAってことですか? 順番は先に振ってあるなら、Sの条件を 点数=100点 and 順番=1番でどうでしょう? もし順番を後から振るとしたら・・・ 同じ100点の人の順位はどうやって決めるのですか?
関連するQ&A
- エクセル IF関数 初心者です。。
A B C D Aさん 9:00 1 9:00 Bさん 10:00 2 9:30 Cさん 11:00 3 10:00 Dさん 12:00 4 10:30 Eさん 9:00 1 9:00 A列氏名 B列時間 C列 B列IF関数 9:00からは1、10時からは2、 11からは3・・・ D列はC列のVLOOKUP関数 1=9:00、2=9:30、3=10:00・・・ そこでお聞きしたいのですが・・ A B C D Aさん 9:00 1 9:00 Bさん 10:00 3 10:00 Cさん 11:00 4 10:30 Dさん 12:00 5 11:00 Eさん 9:00 2 9:30 IF関数を用いて IF(B1>=0.375),1,if(B1>=0.416666666666667),2,IF(B1>=0.458333333333333),3・・・ Eさんが2になるような数式がわかりません。 よろしくお願いします。。
- 締切済み
- オフィス系ソフト
- エクセルでのランクの出し方
以下のような表でランク関数を使うと、空白(計算式は入っています)を0と計算して順位をだしてしまいます。 A B C D E 1 山田 50 40 90 1 2 加藤 -75 20 -55 4 3 田中 25 -60 -45 3 4 2 D列にB,Cの合計を求める式として、=IF(A1="","",SUM(B1:B2)という数式を入れています。この表のデータは2人~4人になる可能性があります。 E列には、=RANK(D1,D1:D4)という数式が入っています。 そうしますと、セルD4を0とみなすのか、E4に順位2が入ってしまいます。 このD4を空白とみなし、1位から3位までで表示する方法はありますでしょうか?
- ベストアンサー
- Windows XP
- エクセル縦横検索
エクセルの縦横検索で関数がわからず何日も悩んでいます。。 <Sheet1> は商品コード・ランクごとの単価表です。 A列 B列 C列 D列 E列 F列 1 商品コード 商品名 Sランク Aランク BランクCランク 2 00010001 AA-1111 10.00 11.00 13.00 14.00 3 00100022 AB-222 11.00 12.00 15.00 16.00 4 00200033 BDB-123 20.00 21.00 22.00 23.00 5 00300033 CA-111 9.00 10.00 11.00 12.00 … ・・・ 10 01000033 OP-100 30.00 31.00 32.00 33.00 11 02000123 TD-358 10.00 11.00 12.00 13.00 以下5000行ほど続きます。 <Sheet2>は得意先ごとのランク表です。 商品群は商品コードの頭2桁目と3桁目(00、01等)でランクが決まっている為、1行目に2桁の数字を入れています。 A列 B列 C列 D列 E列 … 1 00 01 02 10 20 2 得意先コード 得意先名/商品群 AA AB BDB OP TD 3 11111 あああ S A C B C 4 11222 いいい A C B S A 5 12333 ううう C S S A B 6 12444 えええ A A B C C 7 12555 おおお B B C S B … ・・・ 横に50列ほど続きます。 <Sheet3>は入力画面です。 A列 B列 C列 D列 1 得意先コード 商品コード ランク 単価 2 11222 01000033 得意先コードと商品コードを打ち込むとC2にランク(例だとS)が出るようにしたいのですが、 VLOOKUP($A$2,Sheet2!,A1:Z100,MATCH(C2,Sheet1!A1:A5000,C1:F1)) とすると、アルファベットは出るのですが、ランク表どおりに出ません。01と10が同じ数字として認識されてしまいますし、2桁目と3桁目を認識する関数がわからないので、ここで止まっています。 ランクが出たら、隣の単価を求める関数もついでに教えていただけたらさいわいです。 よろしくお願い致します!
- ベストアンサー
- オフィス系ソフト
- Excel 関数 ランク比較
A列 B列 C列 今週 前週 ↑↓ X X E1 D ↑ E1 B ↑ A B ↓ 今週の状態(A列)と前週の状態(B列)を格納した列があります。 2つの状態を比較し、状態がよくなってれば「↑」、反対に悪くなってれば「↓」、変わらなければ何も表示しない ということを、C列に関数式を入れて、上記のように表示させたいです。 IF関数で作成しようとして考えていたのですが、うまく考えが纏まらず悩んでいます。 ランクは (良)X、A、B、C、D、E1、E2、S(悪)の順になります。 どうか教えて頂けますと幸いです。
- ベストアンサー
- オフィス系ソフト
- エクセルよろしくです
1 8:30 8:50 2 8:50 9:10 3 9:10 9:30 4 9:30 9:50 : : : 13 A B C D E F Aさん 9:00 11:00 2 8:50 9:10 Bさん 10:00 12:00 3 9:10 9:30 Cさん 10:00 15:00 4 9:30 9:50 Dさん 9:00 12:00 1 8:30 8:50 Eさん 11:00 13:00 5 9:50 10:10 : : : : : : Aは名前 Bはその人が来た時間 Cは帰った時間 Dは早く来た人の順番 Eは指導開始時間 Fは指導終了時間です。 現在はVLOOKを使いE、Fを出しています。 しかし、問題が着てない時間に指導してるということになりますので、IF関数で8:30~8:50来てる人には1をだす。8:50~9:10は2というIF関数と思っています。しかしそれでは、8:50~9:10という人が3人も4人もってことになります。 このようにしたいと思っています。 Aさん 9:00 11:00 3 9:10 9:30 Bさん 10:00 12:00 5 9:50 10:10 Cさん 10:00 15:00 6 10:10 10:30 Dさん 9:00 12:00 4 9:30 9:50 Eさん 11:00 13:00 7 11:10 11:30 : : : : : : 同じ時間が2人以上にならない関数ありましたらよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルのIFについて
何度もすみません、いつもありがとうございます。 また行き詰ったのでお力を貸してください。 前回 【状態】 ・B2:E2の中に【空白、◎、●、▲】のいずれかが入っている ・条件によりF2に【S,A,B,C,ネタ】が入る 【条件】 ・S⇒すべて◎ ・A⇒3回連続した◎がある ・B⇒◎3つ以上だが連続していない ・ネタ⇒●が1以下かつ、◎がない ・Cがそれ以外 で関数についてご質問したのですが、条件が変わってしまい以下のように作成したのですが FALSEになってしまいました。 =IF(COUNTIF(B2:E2,"◎")=4,"S",IF(COUNTIF(B2:E2,"◎")=3,IF(COUNTIF(C2:D2,"◎")=2,"A","B"),IF(COUNTIF(B2:E2,"●")=3,IF(COUNTIF(C2:D2,"●")=2,"C","ネタ"),IF(COUNTBLANK(B2:E2)=0,IF(COUNTIF(B2:E2,"▲")=0,"B","ネタ"),IF(COUNTIF(B2:E2,"▲")=1,IF(E2="▲","C","")))))) 新条件は ・S⇒すべて◎ ・A⇒3回連続した◎がある ・B⇒A以下、C以上 ・C⇒●が連続して3つ以上 ・ネタ⇒空白が1つ以上ある、または▲が2つ以上、未達成である 記号は ◎>●>▲>空白で、3/4が●以上かつ、B2からD2が●以上であると達成になります。 Bは組合せが多いですが、たとえば◎が2つ、●が2つだと達成になりますがC以上なのでBになる…といった具合です。 何度もすみません! 皆様のご協力に感謝します*
- 締切済み
- Excel(エクセル)
- エクセルの関数を教えてください
下のような表で、E7に =IF(AND(D6>A1,OR(C7:C12<(A7-0.05))),"A",IF(AND(D6<A1,OR(B7:B12>(A7+0.05))),"B","")) と関数を入れましたが求めているものになりません。 文章にすると、D6がA1より大きかった場合かつC7からC12の間でA7から0.05を引いた数値が どれか一つでもあればA、D6がA1より小さかった場合かつB7からB12の間でA7から0.05を足 した数値がどれか一つでもあればBそれ以外は空白というものです。 正しい関数を教えてください。 A B C D E 1 98.483 98.501 98.446 98.477 2 98.477 98.482 98.442 98.452 3 98.449 98.461 98.365 98.372 4 98.372 98.396 98.350 98.387 5 98.388 98.472 98.379 98.414 6 98.412 98.479 98.389 98.439 7 98.433 98.603 98.430 98.555 8 98.559 98.579 98.465 98.500 9 98.500 98.600 98.467 98.569 10 98.568 98.635 98.530 98.546 11 98.548 98.579 98.486 98.494 12 98.497 98.569 98.460 98.534 13 98.534 98.565 98.527 98.542
- 締切済み
- 財務・会計・経理
- 関数よろしくお願いします。(エクセル)
いつもお世話になっています。 知識不足のためよろしくお願いします。 回数、順番を出したいと思っています。 いい関数等ありましたら教えてくださいよろしくお願いします。 内容 氏名 時間 順番 Aさん 8:30 1 Bさん 8:30 1 Cさん 8:45 2 Dさん 8:30 1 RANKではCさんは4番になります。 2番にする関数ありましたら よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excelで4つの条件で計算式を変える
できるのかできなのかもわからず、試行錯誤してましたが、途方に暮れています。 A1のセルに「あいう」か「いろは」 B1のセルに「A」か「B」 の値が入るとすると、組み合わせは あいう・A あいう・B いろは・A いろは・B の4通りになりますが、この4通りに違う式を当てはめてE1セルに表示させたいのです。 あいう・Aの時は、(C1-D1)*10 あいう・Bの時は、(D1-C1)*10 いろは・Aの時は、(C1-D1)*500 いろは・Bの時は、(D1-C1)*500 のような感じですが、IF関数、AND関数いろいろやってみましたが、「あいう」のA、Bくらいなら大丈夫ですが、「いろは」も含めるとエラーになってしまいます。 どのように関数書けばちゃんと表示される(答えがでる)でしょうか。 =IF(A1="あいう",IF(B1="A",(C1-D1)*10,(D1-C1)*10)) ↑これなら「あいう」でA、Bに分けるのはいいと思うのですが、ここから先がよくわかりません。 「いろは」でも同じ様に分けたいのです。 このIF関数、A1が「あいう」だったら、B1が「A」の場合(C1-D1)*10 そうじゃない場合(Bの場合)は(D1-C1)*10の解釈で、偽の場合にIF関数使ってA1に「いろは」だったらのような感じでIF関数入れればなんとかなるのかな?と考えましたが、そもそもその考え方がおかしいのでしょうか?
- ベストアンサー
- Excel(エクセル)
- Excelの関数について
Excelの関数について教えてください。 C1に50、D1に30、E1に=SUM(A1:D1)、B2に=E1-SUM(A1:B1)、が入力されています。 このB2の計算式を、「もしB1:C1のどちらか片方(もしくは両方)に値が入力されているときはB2の計算式の結果が返ってくる。B1:C1のどちらも空欄のときは「#N/A」が返ってくる。0は入力有りとみなす」というようにしたいです。 IF関数にISBLANK関数を入れてみたんですが、片方に入力有りでも「#N/A」が返ってきてしまいます。 =IF(ISBLANK(B1:C1),NA(),E1-SUM(A1:B1)) ISBLANK関数じゃダメだったんでしょうか? どういうふうに変えればいいんでしょうか? すみませんがどなたか教えてください。
- ベストアンサー
- オフィス系ソフト
お礼
すばらしくできちゃいました^^ ありがとうございました。。