• ベストアンサー

関数でこんなの出来ますか?

ham_kamoの回答

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

マクロで作ってみました。かなり複雑になってしまいました^^; ややこしそうだと思いますが、コピーして貼り付けるだけなので、以下に書いている手順通りに操作してみてください。 Excelの画面でAlt+F11を押すと、マクロの入力画面が開きます。そこで左側のツリーの「VBAProject(ブック名)」というところを右クリックし、「挿入」>「標準モジュール」を選択すると、「Module1」というのができます。その状態で、右の画面に以下のマクロをコピーして貼り付けてください。 Function GetPoint(AllRatio As Variant, Ratio As Double) As Integer  Dim MaxRatio As Double, Rank As Integer, MaxPoint As Integer  Dim PrevRank As Integer, PrevRankRatio As Double, PrevPoint As Integer  MaxRatio = Application.WorksheetFunction.Max(AllRatio)  MaxPoint = IIf(MaxRatio >= 9, 10, 9)  Rank = Application.WorksheetFunction.Rank(Ratio, AllRatio)  If Rank = 1 Then   GetPoint = MaxPoint  ElseIf MaxRatio - Ratio <= 0.5 Then   GetPoint = MaxPoint - (Ratio - 1)  Else   PrevRank = GetPrevRank(AllRatio, Rank)   PrevRankRatio = GetRatio(AllRatio, PrevRank)   PrevPoint = GetPoint(AllRatio, PrevRankRatio)   If PrevRankRatio - Ratio <= 0.5 Then    GetPoint = PrevPoint - 1   Else    GetPoint = PrevPoint - 2   End If  End If End Function Function GetPrevRank(AllRatio As Variant, Rank As Integer) As Integer  Dim PrevRank As Integer, TmpRank As Integer, i As Integer  PrevRank = 1  For i = 1 To AllRatio.Count   TmpRank = Application.WorksheetFunction.Rank(AllRatio(i), AllRatio)   If TmpRank < Rank And PrevRank < TmpRank Then    PrevRank = TmpRank   End If  Next i  GetPrevRank = PrevRank End Function Function GetRatio(AllRatio As Variant, Rank As Integer) As Double  Dim i As Integer  For i = 1 To AllRatio.Count   If Application.WorksheetFunction.Rank(AllRatio(i), AllRatio) = Rank Then    GetRatio = AllRatio(i)    Exit Function   End If  Next End Function 貼り付けたらマクロの画面は閉じてかまいません。 エクセルのシートに戻って、 C1に =GetPoint($B$1:$B$5,$B1) と入力し、それを下までコピーすると、各自の点数が表示されます。 正常な値にならない、エラーが出る場合などは補足をお願いします。

bobby0219
質問者

お礼

ありがとうございました!無事出来ました。 本当に感謝です。ありがとうございました。

関連するQ&A

  • エクセル関数

    シート1という名前のシートと シート2という名前のシート2つのシートがあります。 シート1は ・A列には従業員の氏名が入っています ↓このように  A 空欄 鈴木 伊藤 佐藤 ・資格名は見出しとしてB2~Q2まで入ってます(見出しとして) ↓シート1の全体はこのような感じ  A   B    C    D 空欄 資格1 資格2 資格3 鈴木 伊藤 佐藤 次にシート2は ・A列に個人コードが入ってます ・B列に名前が入ってます ・C列に資格名称が入ってます ・D列に資格取得日が入ってます ↓シートの全体はこのような感じ A  B   C    D 1  鈴木  資格1   6月 1  鈴木  資格2   7月 2  伊藤  資格3   8月 2  伊藤  資格1   9月  2  伊藤  資格2   10月 3  佐藤  資格3   11月 上記のようなシートがあります。 ここでシート1にシート2の値を返していきたいのですが 見ての通り書式はバラバラです 例えばシート2を見て鈴木は資格1、資格2、資格3を持っています 資格1だったら○をシート1の鈴木と資格1がぶつかってるセルに 資格2だったら○をシート1の鈴木と資格2がぶつかってるセルに 返していきたいのです 何か有効な関数などはありませんでしょうか? むしろ関数でできるのでしょうか? 説明が訳分からなくてすみません。 

  • Excelでのセルの検索

    セルの検索方法について、質問します。 現在の表       A    B      C     D --+-------+-------+-------+-------+------+-------+------- 1   鈴木   加藤   斎藤    --+-------+-------+-------+-------+------+-------+------- 2   佐藤   清水         --+-------+-------+-------+-------+------+-------+------- --+-------+-------+-------+-------+------+-------+------- 3   山田              --+-------+-------+-------+-------+------+-------+------- 理想形       A    B      C     D --+-------+-------+-------+-------+------+-------+------- 1   鈴木   加藤   斎藤   斎藤 --+-------+-------+-------+-------+------+-------+------- 2   佐藤   清水         清水 --+-------+-------+-------+-------+------+-------+------- --+-------+-------+-------+-------+------+-------+------- 3   山田              山田 --+-------+-------+-------+-------+------+-------+------- 上記のような表(現在の表)で、D列に空白セル以外の一番右のセルを探して表示できるような関数を探しているのですが?。 仕事で進捗表の作成を行っており、困っていますのでよろしくお願い致します。

  • RANK関数の同点の処理について

    RANK関数で同点の場合は同位として処理されると思っていたのですが、 なぜか同じ値でも同位で処理されない現象に遭遇して困っています。 RANK(数値、参照、順序)の数値が参照しているセルには、点数を算出する式が 入っています。 計算結果が同じ点数にも関わらず同位として処理されません。 参照するセルの値を数式ではなく直接入力した点数の場合は同位として 処理されます。 ランク関数の仕様として、数式の場合は同位と扱わないようになっていた 記憶もなく調べてもそのような記述のあるページも見当たりませんでした。 これは、バグ何でしょうか? 状態としては、B列のC列の得点差をD列で算出して、このD列の値を用いて 順位を出そうとしています。 D列の結果は、同じ点数で1位にならなければならい2行が片方は1位で もう片方は2位と表示されていまいます。

  • エクセルの計算式について

    エクセルの計算式を教えて下さい。 鈴木 佐藤 菊地 内藤 石井 星野 -58 35 -35 58      35 -1 -35 1 上の点数に一段一段順位をつけました。この時の計算式がRankを使用しました。 しかし、数字が無い場所については#N/Aが出てきました。どうして出てくるかはわかるのですが、これを出ないようにするにはどうしたらよいのでしょうか? RankではなくIF関数を使用すれば出てこないのでしょうか? 計算式を教えて下さい。お願いします。

  • この場合の関数は何ですか。

    教えてください。 ある行の指定範囲内にある「★」がつくセルの列の列名を、別のセルに表示したいとき、どんな関数を使えばよいですか。 例は以下のとおりです。【2行目の場合】 B2からD2の範囲で★がついているのはB2。 その列名にあたるB1の「佐藤」をG2に表示させたい。    A列  B列   C列   D列   E列   F列   G列   1行     佐藤  鈴木  田中     担当日 担当者 2行 4月1日 ★              4月1日 佐藤 3行 4月2日     ★ 4行 4月3日         ★

  • エクセル 条件つきで最小値を求めたいです

    A列に200名を超える生徒の名前が入っています。 B列に計算テストの結果が入っています。 計算テストは何度も行われており、A列に何度も同じ生徒の名前が出てきます。A列に入っている生徒の名前は1000を超えます。 A   B 田中  42 佐藤  48 鈴木  52 佐藤  56 田中  72 鈴木  60 鈴木  23 などです。この中で鈴木君のとった得点の最小値は23点ですが、それを求める数式を知りたいです。 『rankif』とか『minif』みたいな関数があればいいのですが、ないですよね。ちなみに、私が使用しているパソコンはexcel2000です。 他のシートやC列から右に生徒を判別する関数を入れていけば、私の知っている知識でも可能なのですが、関数を多用すると重くなりますし、避けたいです。また、もともとのデータの入力の仕方を変えたらいいのですが、それはできない状態です。 =MIN(IF(A2:A7="鈴木",B2:B7),false) みたいな感じかなと式を立てたのですが、うまくいきません。上の状態で、セルに23と表示されるには、どうすればいいか教えてください。お願い致します。m(_ _)m

  • エクセルの関数をどう使えばいいか教えてください

    エクセルで個人データファイルを作っています。 関数で下記の様な計算ができるのか解る方教えてください。 鈴木 岡田 佐藤 岡田 鈴木 鈴木 この人数を重複しないように計算したいのですが、CAUNTAを使うと 「6」となるが、「3」になるように関数を使いたいと思っています。

  • excel関数でユニークな数値だけ抜き出したい場合

    以下のようなシート(仮にsheet1)のA列からユニークな番号だけ抜き出したい場合sheet2のA列にどのような関数を使用すれば良いですか? A  B 101 山田 101 山田 101 山田 114 佐藤 114 佐藤 123 鈴木

  • エクセルの関数式です

    エクセルの条件式についてです (IF文) 例えば A列      B列   C列  2008/2/1 500   加藤 2008/3/10 200   鈴木 2008/3/25 100   加藤 2008/4/13 800   佐藤 こんな感じで元データがあるとして、 加藤           鈴木           佐藤 ~2月末 ~3月末 ~4月末 ~2月末 ~3月末 ~4月末 ~3月末 ~4月末 500 200 100                              800 こんな感じで別表を作成したいのですが、 IF(C1="加藤",IF(A1<2008/3/1,B1,""),"") 上記の感じで式を入力しても反映してこないんですが、なんででしょう? ちなみに、元データの 日付、金額、氏名 は別表からの関数式で飛ばしています。 教えてくださーい!   いろんなパターンのIF文でやってみたんですが・・・ 作成したい表の方が、ずれてしまいますので、おかしいですが・・・

  • COUNTIFやSUMPRODUCTの関数について

    画像にあるようなExcelの表について 下記の関数を使って出来たことを、もっとB22~C24(セル)を入力せず出来る関数はないのか 教えて頂きたい。また、以下のところに今使っている関数と、求めたいことについて記載しました。  SUMPRODUCT(($A$2:$A$15=$B$22)*(C2:C15=$C$22))の関数を使って   1.C17セルに表示された個数は、A列の2~15の中のAランクの人の「1」の入力された     ところだけのを表すことになっている。  以下もC列のB・Cことである。   2.このことを踏まえて、BランクはC18に「0」が入る。(1の入力されたセルがないため)   3.Cランクは、「長島」に「1」が入力されているので、C19には「1」が入いる。   4.イ~オ列のD17~G19まで同じように表示させてある。  なお、あくまでもア~オの全体の個数の中のA・B・Cのランクの個数をカウントしたいのです。