- ベストアンサー
関数でこんなの出来ますか?
ham_kamoの回答
マクロで作ってみました。かなり複雑になってしまいました^^; ややこしそうだと思いますが、コピーして貼り付けるだけなので、以下に書いている手順通りに操作してみてください。 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) と入力し、それを下までコピーすると、各自の点数が表示されます。 正常な値にならない、エラーが出る場合などは補足をお願いします。
関連する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がぶつかってるセルに 返していきたいのです 何か有効な関数などはありませんでしょうか? むしろ関数でできるのでしょうか? 説明が訳分からなくてすみません。
- 締切済み
- Windows 7
- 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位と表示されていまいます。
- ベストアンサー
- その他MS Office製品
- エクセルの計算式について
エクセルの計算式を教えて下さい。 鈴木 佐藤 菊地 内藤 石井 星野 -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日 ★
- ベストアンサー
- Excel(エクセル)
- エクセル 条件つきで最小値を求めたいです
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のランクの個数をカウントしたいのです。
- ベストアンサー
- オフィス系ソフト
お礼
ありがとうございました!無事出来ました。 本当に感謝です。ありがとうございました。