• ベストアンサー

値のrank付け後に関連するセルの数値を1セル内に

エクセルに詳しくないので教えてください。 1から8の機械があります。 入力された値を元にテスト結果にrank関数でランク付けしました。 どの機械が優秀かひと目でわかるように機械順に番号を表示させたいと思います。 求めるのは、赤いセルの部分です。 入力してある数字は回答例で、この様に表示したいということです。 困っているのでよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.9

画像は鮮明でないし、同じ質問を繰り返す。 MATCH関数も分からない。 計算部分と印刷部分は分ければよいだけの話なので、セルを結合させる意味が分からない。 過去の質問もリンクさせない。 回答するのをやめようと思いましたが、ほかの回答者ために回答させていただきます rank 関数で表示された順位の関連セルを並べ http://okwave.jp/qa/q7821656.html rank関数で表示されたセルの親セルを順番に整列 http://okwave.jp/qa/q7821795.html R4セル =SUMPRODUCT(MOD(SMALL(10*B3:Q3+B2:Q2,{9,10,11,12,13,14,15,16}),10)*10^{7,6,5,4,3,2,1,0}) R11セル も同様 =SUMPRODUCT(MOD(SMALL(10*B10:Q10+B9:Q9,{9,10,11,12,13,14,15,16}),10)*10^{7,6,5,4,3,2,1,0}) 結合なしのR15セル =SUMPRODUCT(MOD(SMALL(10*B14:I14+B13:I13,{1,2,3,4,5,6,7,8}),10)*10^{7,6,5,4,3,2,1,0}) (10*順位+機械番号)を昇順で並べ替え、1の位(機械番号)を取り出し、 左からそれぞれに10の7乗、10の6乗、・・・10の0乗(=1) を掛けて合計する

gekikaraou
質問者

お礼

ご回答ありがとうございます。 画像は鮮明でないし、同じ質問を繰り返し、MATCH関数もわかりません。 駄目駄目づくしでしたが、今回の回答で出来ました。 何度も教えてくださり、ありがとうございます。

その他の回答 (8)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.10

目的の結果を得るだけなら、列で並べ替えるだけです。 1つのセルに表示させたいなら、「&」か「Concatenate」でつなぐだけ。 RANKを第1優先、機械番号を第2優先にするだけだが、RANKをとるまでもなく、値で並べてもいい。 「困っているので」って、困るように考えてはいないか。

gekikaraou
質問者

補足

毎日80個近いデータを処理し、並べ替えの手間がもったいないので関数で出来る質問をしました。 ひと目で比較するためです。 質問をご理解ください。 ありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.8

 ANo.4、5です。  何度も申し訳御座いません。  御質問文中には記述がなかったため、「同順位が複数ある場合には、番号の若い順に表示させる」という条件が判ってはおりませんでした。  従いまして、No.4、5の関数は、目的を果たす事が出来ない場合が御座います。  そこで、提案ですが、 >私の提示した画像ではBCセルが結合されているんですが という事であれば、1つのセルの幅は小さくなる訳ですから、何も結合されて1個になっているセル内に、機械ナンバーを全て詰め込むような無理をしなくとも、横一列に並んでいる8個のセルの中に、機械ナンバーを1個ずつ入れて表示させる方が、関数が単純になって良いと思います。  又、機械ナンバーの並べ方が、数字が大きい方から順番に並べられていますが、その様な並べ方では「番号が小さい方を優先して表示させる」事は難しくなり、「番号が大きい方を優先して表示させる」事になってしまいますから、是非とも、機械番号の並べ方は、数が小さいものが左、数が大きいものが右に来る様な並べ方に変更して下さい。  その場合、順位に重複する値が複数存在する場合にも対応する様にするには、以下の様な方法となります。  まず、テスト結果の順序を表示させるセルを、、テスト1がD6、テスト2がD13というような各テストごとに1セルずつとするのではなく、  テスト1がD6セル~K6セルの計8個のセル、テスト2がD13セル~K13セルの計8個のセルに、1位~8位までの各々の順位の順番に、機械ナンバーを表示させる様にするものとします。  まず、D6セルに次の関数を入力して下さい。 =IF(COLUMNS($D:D)>COUNT($B3:$Q3),"",INDEX(2:2,IF(ISNUMBER(1/(SMALL($B3:$Q3,COLUMNS($D:D))<COLUMNS($D:D))),MATCH(SMALL($B3:$Q3,COLUMNS($D:D)),INDEX($12:$12,MATCH(C6,$11:$11,0)+1):$Q3,0)+MATCH(C6,$11:$11,0),MATCH(COLUMNS($D:D),$B3:$Q3,0)+COLUMN($B3)-1)))  次に、D6セルをコピーして、E6~K6の範囲と、D13~K13の範囲に貼り付けて下さい。 ※こちらの関数は、同地・同順位のセルが幾つ存在している場合であっても、テスト結果の順序を正しい順番で表示させる事が出来ます。

gekikaraou
質問者

お礼

ご回答ありがとうございます。 いろいろ試してみたのですが、今回はシートの変更をせずに関数だけで済んだNo9のcoaltarさんのやり方が良いようでした。 とは言え、考えていただきありがとうございました!

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

回答No6です。 B列から右の列は2列毎に結合されてQ列までの表となっているとのことですね。 でしたらB3セルには次の式を入力してQ3セルまでドラッグコピーします。 =RANK(B4,$B4:$P4,1)+B2/100 D6セルには次の式を入力します。 =INDEX(B2:P2,MATCH(SMALL(B3:P3,1),B3:P3,0))&","&INDEX(B2:P2,MATCH(SMALL(B3:P3,2),B3:P3,0))&","&INDEX(B2:P2,MATCH(SMALL(B3:P3,3),B3:P3,0))&","&INDEX(B2:P2,MATCH(SMALL(B3:P3,4),B3:P3,0))&","&INDEX(B2:P2,MATCH(SMALL(B3:P3,5),B3:P3,0))&","&INDEX(B2:P2,MATCH(SMALL(B3:P3,6),B3:P3,0))&","&INDEX(B2:P2,MATCH(SMALL(B3:P3,7),B3:P3,0))&","&INDEX(B2:P2,MATCH(SMALL(B3:P3,8),B3:P3,0)) その他の操作は回答No6 のとおりです。

gekikaraou
質問者

お礼

ご回答ありがとうございます。 せっかく考えていただいたのですが、今回はひとつの関数を入れれば済んだNo9の方のやり方を採用しました。 一緒に考えていただきありがとうございます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.6

ランク付けを行っていますが重複したデータが有る場合には機械Noの小さい数値の機械によるテスト結果が優先されるとのことですね。そんな場合も考慮してランク付けの操作においては重み付けをするなどの操作が必要でしょう。 テスト結果としてランクがB3セルからI3セルに表示されていますが、その際の式を次のように変更します。 B3セルには次の式を入力してI3セルまで横方向にドラッグコピーします。 =RANK(B4,$B4:$I4,1)+B2/100 B3セルからI3セルの数値は小数点付の数値になりますが、それが気になるのでしたらその範囲を選択して右クリックし「セルの書式設定」の「表示形式」で「ユーザー定義」を選択し種類の窓には 0 を入力してOKします。それによって整数の表示になりますね。 D6セルには次の式を入力します。 =INDEX(B2:I2,MATCH(SMALL(B3:I3,1),B3:I3,0))&","&INDEX(B2:I2,MATCH(SMALL(B3:I3,2),B3:I3,0))&","&INDEX(B2:I2,MATCH(SMALL(B3:I3,3),B3:I3,0))&","&INDEX(B2:I2,MATCH(SMALL(B3:I3,4),B3:I3,0))&","&INDEX(B2:I2,MATCH(SMALL(B3:I3,5),B3:I3,0))&","&INDEX(B2:I2,MATCH(SMALL(B3:I3,6),B3:I3,0))&","&INDEX(B2:I2,MATCH(SMALL(B3:I3,7),B3:I3,0))&","&INDEX(B2:I2,MATCH(SMALL(B3:I3,8),B3:I3,0))

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

>私の提示した画像ではBCセルが結合されているんですが  申し訳御座いません、気が付きませんでした。  その場合、D6セルに次の関数を入力してから、D6セルをコピーしてD13セルに貼り付けて下さい。 =REPLACE(IF(COUNTIF($B3:$Q3,1),","&INDEX($B2:$Q2,MATCH(1,$B3:$Q3,0)),"")&IF(COUNTIF($B3:$Q3,2),","&INDEX($B2:$Q2,MATCH(2,$B3:$Q3,0)),"")&IF(COUNTIF($B3:$Q3,3),","&INDEX($B2:$Q2,MATCH(3,$B3:$Q3,0)),"")&IF(COUNTIF($B3:$Q3,4),","&INDEX($B2:$Q2,MATCH(4,$B3:$Q3,0)),"")&IF(COUNTIF($B3:$Q3,5),","&INDEX($B2:$Q2,MATCH(5,$B3:$Q3,0)),"")&IF(COUNTIF($B3:$Q3,6),","&INDEX($B2:$Q2,MATCH(6,$B3:$Q3,0)),"")&IF(COUNTIF($B3:$Q3,7),","&INDEX($B2:$Q2,MATCH(7,$B3:$Q3,0)),"")&IF(COUNTIF($B3:$Q3,8),","&INDEX($B2:$Q2,MATCH(8,$B3:$Q3,0)),""),1,1,) >おそらく $B3:$I3 の部分を書き換えれば良い様に見えますが、この場合どういう風に書き換えたらよいでしょうか?  B3:$I3 の部分を$B3:$Q3に、B2:$I2 の部分を$B2:$Q2に、それぞれ書き換える必要がありますから、Excelの置換機能を使用して、$I を $Q に置換されると良いと思います。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 その表示のやり方では、機械の台数が10台以上になった場合には、順序が判らなくなりますので、間に「,」を入れて区切っては如何でしょうか?  その場合のE6セルの関数は以下の様なものとなります。 =REPLACE(IF(COUNTIF($B3:$I3,1),","&INDEX($B2:$I2,MATCH(1,$B3:$I3,0)),"")&IF(COUNTIF($B3:$I3,2),","&INDEX($B2:$I2,MATCH(2,$B3:$I3,0)),"")&IF(COUNTIF($B3:$I3,3),","&INDEX($B2:$I2,MATCH(3,$B3:$I3,0)),"")&IF(COUNTIF($B3:$I3,4),","&INDEX($B2:$I2,MATCH(4,$B3:$I3,0)),"")&IF(COUNTIF($B3:$I3,5),","&INDEX($B2:$I2,MATCH(5,$B3:$I3,0)),"")&IF(COUNTIF($B3:$I3,6),","&INDEX($B2:$I2,MATCH(6,$B3:$I3,0)),"")&IF(COUNTIF($B3:$I3,7),","&INDEX($B2:$I2,MATCH(7,$B3:$I3,0)),"")&IF(COUNTIF($B3:$I3,8),","&INDEX($B2:$I2,MATCH(8,$B3:$I3,0)),""),1,1,)  E13セルに関数を入力する際には、E6セルをコピーして、E13セルに貼り付けて下さい。

gekikaraou
質問者

補足

ご回答ありがとうございます。 どうやらこのやり方が一番手早く、応用が利きそうな気がします。 一点だけ、私の提示した画像ではBCセルが結合されているんですがその場合 REPLACE(IF(COUNTIF($B3:$I3,1),","&INDEX($B2:$I2,MATCH(1,$B3:$I3,0)),"") の部分、 おそらく $B3:$I3 の部分を書き換えれば良い様に見えますが、この場合どういう風に書き換えたらよいでしょうか? お手数ですが、教えていただけないでしょうか? よろしくお願いいたします。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

回答ではありませんが、ご自分で投稿された質問と回答に対するご自分の補足やお礼をもう一度ご覧になってみては? ・詳しい説明もなく、画像を張り付けて回答者に問題点を察しろと投げている。 ・その画像も文字が小さくて見づらい。 ・もらった回答で得た結果が望むものでなかった時、どう駄目だったのかを伝えていない。 これでは問題はなかなか解決しないと思います。

gekikaraou
質問者

補足

ご指摘頂き、ありがとうございます。 誤解しないで下さい。 問題点を察しろとは思っていません、そう思われたのならお詫びいたします。 問題を察しろと言うより、こちらの求める物とは答えが違っていたので、こちらとしても困っている状態です。 説明が悪かったのかなぁと・・・。 画像も小さかったのですね、みずらいかなぁと思ったのですが、そのサイズにしか出来なくてでも困っていたので貼り付けました。 ご回答頂いた事に関してはありがたく思っていますが、問題の解決にはなっていません。 ですから、新しく、しかも教えていただける方にわかりやすく伝わるように質問と画像を新しくしたつもりです。 大変失礼しました。 それと ・もらった回答で得た結果が望むものでなかった時、どう駄目だったのかを伝えていない。 の部分ですが、 以前に投稿したセルの数字や列と使っているものの列や数字が違って、応用が効きそうになかったので実際に近い形で新たに投稿するのが、私も、そして教えて下さっている方にも結果的に近道だと思ったからです。 お手数をおかけしてすいません、そしてありがとうございます。

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

こんばんは! 色々お悩みのようですが・・・ 一案です。 元データの並びを少し変えてはダメですか? 同順位がある場合が問題ですので、 ↓の画像のような感じで列の左側から昇順にします。 そしてB3セルに =COUNTIF($B4:$I4,"<"&B4)+COUNTIF($B4:B4,B4) という数式を入れI3セルまでオートフィルでコピー! B3セル上で右クリック → コピー → B9セルに貼り付け → そのままI9セルまでオートフィルでコピー! これで同順位があった場合、右側列が上位になります。 この後の操作ですが、VBAになってしまいます。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 表示() 'この行から Dim i As Long Dim j As Long Dim k As Long Dim tmp As Variant For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row Step 6 Cells(i + 3, 3) = "" For j = 1 To 8 tmp = WorksheetFunction.Small(Range(Cells(i, 2), Cells(i, 9)), j) k = WorksheetFunction.Match(tmp, Rows(i), False) Cells(i + 3, 3) = Cells(i + 3, 3) & Cells(i - 1, k) Next j Next i End Sub 'この行まで ※ 関数でないのでデータ変更があるたびにマクロを実行する必要があります。 ※ ↓の画像通りの配置でないと滅茶苦茶な表示になってしまいます。 ※ 画像通りの配置であれば行方向にデータが増えても対応できます。 以上、ご希望の方法でなかったらごめんなさいね。m(_ _)m

gekikaraou
質問者

お礼

ご回答ありがとうございます。 前回もマクロを教えていただきありがとうございます。 シート自体を作り直す必要がありそうですが、ちょっと試してみます。 ありがとうございます!

関連するQ&A

  • よみがな順でランク付け(RANK関数のようなもの)を行いたい

    EXCELでRANK関数というのがありますが RANK関数では、数値しか扱えません RANK関数のように、読み仮名順に順番を付けることはできないでしょうか?   A     B 1 やまだ   2 いいだ 3 つぼい 4 たなか 5 おだ 「B1」セルに「=RANK(A1,$A$1:$A$5,1)」と入れB2~B5まで コピーするようなイメージです。 (B1セルではなくても良いですし、途中に計算過程を入れる セルを挟んでも問題ありません) 読み仮名を一文字づつ分解し、文字コードに変換(CODE関数)→ 連結(&)→数字に変換(VALUE関数)という事をやり、その結果で RANK付けという作業をしたのですが、数字が大きすぎになってしまい 10文字目くらいまでしか有効になりませんでした。 何か良いアイディアなどお持ちの方がいらっしゃいましたら ご教授ください、お願いします。

  • Excelのセルの関連付け

    Excel のセルの関連付けについて  通常の数字    セル [C3]=4 を入力すると [D6]=4 と関連付けはできるのですが [C3]=0 を入力すると [D6]=0 と表示せず            [D6]='空白' 何も表示しないようにする方法を                  教えていただけないでしょうか?  よろしくお願いします。

  • エクセルで複数のセルにセルにある数字を1つのセルに

    こんばんは、エクセルに関してあまり詳しくないので教えて頂けませんか? A1のセルに1 B1のセルに3 C1のセルに5と、数字が1~8まで並んでいます。 その数字を、ほかの一つのセルに、135~と8桁表示するにはどうしたらよいでしょうか? その数字はrank関数で入力されたものです。 詳しい方よろしくお願いいたいます!

  • Rank付けについて

    エクセルでRank付け(順位)を考えています。 Rank関数で処理しようと考えたのですが,A列のコード番号が一定ではないため、処理に困っています。場合によってはマクロも考えています. どなたかアドバイス頂けないでしょうか。 A列にコード番号,B列に数値,C列に順位を入れます. 例えば、A2~A4まで1、A5~A6まで2とあり,A2~A4とA5~A6にはそれぞれおなじ数値が入ります。A列コードは3行分だったり2行分だったりと不規則に下に続いていきます。ただし,まとまたコード番号で固まっています. そのA列の同じコード番号全てに対して、B列の値を元にC列に順位を入力したいのです. コード    数値     順位 1       10       3 1       14       1 1       12       2 2       10       2 2       40       1 5       18       3 5       12       2 5       10       1 5       20       4

  • ランク付けについて

    ラリー結果、設定時間に近い順にランク付けしたいのですが、設定時間に対し早い人や遅い人がいるため、RANK関数では順位が間違ってしまいます。(画像添付しています) 良い方法があったら教えてください。よろしくお願いします

  • エクセル2002で関連セルの数値を並べ替える

    エクセル2002を使っています。 画像の様なランキングがあり、それを関連するセルの数値順に並べ替えるにはどうしたらよいでしょうか? この場合、G9セルに41365782と表示させたいです。 これを関数のみでやりたいと思います。 よろしくお願いいたします。

  • 配列のランク付け

    配列のランク付けをしたいのですが方法が分からず困っています。 例えば、 $a = array("1", "5", "3", "2", "3", "1", "1")という配列があったら $b = array("5", "1", "2", "4", "2", "5", "5")といったように値が大きい順に ソートせずランク付けして新しい配列を作れたらと考えています。 アドバイスをお願い致します。

    • ベストアンサー
    • PHP
  • エクセルのRANK関数の応用

    エクセルのRANK関数を使って、順位を表示させたいのですが、 空白セルと、"0"の値が1位にカウントされてしまいます。 これを除外して表示させる方法は無いようなので、 これをVBAで作る事は出来ますでしょうか? "0"と空白セルは除外し、数値の小さい順に表示させたいのです。 以上よろしくお願いします。

  • エクセルでVLOOKUPを使うとあるセルだけ値複写されてしまう

    こんにちは。エクセルでVLOOKUPを使ってデータを表引きしています。例えば番号を入力すると名前などがセルに表示されます。(そのセルの中にはVLOOKUPの式があり、見た目として名前が表示されます)ですが、あるセルだけセルの中身が関数でなく値が入力されてしまいます。ですので、2回目に番号を入力すると、前の名前が残ってしまい、困っています。どうしたらよいでしょうか。大変困っています。よろしくおねがいします。

  • RANK関数で順位付けする方法

    お世話になります。Oracle初心者です。RANK関数による順位付けについて悩み、検索してもわからず困っております。 次のような表tbがあります。 数値,順 70 10 30 この「順」のカラムに順位を付けて 数値,順 70,3 10,1 30,2 としようとしています。SELECTなら SELECT 数値,rank() over (order by 数値 desc) from tb; が成功します。これでupdateする場合、 (rank() over (order by 数値 desc))をした値を update tb set 順= とすればよいと思うのですが、うまくいきません。 PL/SQLを使わず、SQLでRANK関数を使って順位付けするにはどのようにしたらよろしいでしょうか。 勉強不足だと思い、申し訳なく思います。何卒よろしくお願いいたします。

専門家に質問してみよう