プロが教える店舗&オフィスのセキュリティ対策術

例えば、A、B、Cという三つのランク付けをする必要があり、そのランクが日々変化する場合、セルの上位にAランクのもの、その下にBその下にCと並べるとすれば、どのようなマクロ(計算式)が必要でしょうか?

例)昨日Cランクであったユーザーが、今日の評価ではAに変わった。ランクのセルをCからAと書き換えるだけで、下位にあったこのユーザーの表示を上位に上げたい。

恐れ入ります。
よろしくお願いいたします。

A 回答 (3件)

前提として、以下のようにします。



1.関数により、ご希望に近いものを作る。
2.既存の表の前に4列挿入する。
3.ランキングのシートと入力シートは、別とする。
4.ユーザーは99人以下とする。


 ということで、A~D列までを計算用に使用させて頂きます。
E列をユーザー名、F列をランクとします。

A列に入力する関数
=if(f2="","",if(f2="A",1,if(f2="B",2,if(f2="C",3,""))))
これにより、ABCランクを1,2,3に変換させます。

B列に入力する関数
=if(a2="","",countif(a2:$a$2,a2))
これにより、ランクA,B,Cが何個目かを表示させます。

C列に入力する関数
=if(a2="","",a2*100+b2)
これにより、ランクAを100番台、Bを200番台、Cを300番台として連番を表示させます。

100人をこえる場合は「a2*1000+b2」 とでもして下さい。

D列に入力する関数
=if(a2="","",rank(c2,c2:c301,1))
これにより、C列の数字を小さい順に付番します。

A~Dの関数を下のセルに、コピーします。

シート2に目的の表を作るとします。
1行目を見出しとして、2行目から、データとします。

 また、参照元をシート1とします。

A2セルに
=vlookup(row()-1,sheet1!$e$2:$f$300,2,0)
とするとAランク最初のユーザー名が表示されます。

以降は、表のフォーマットに合わせて、VLOOKUP文のパラメーターを調整して下さい。

なお、入力シートA~D列は、「非表示」にしておくと、邪魔にならないと思います。


また、

=if(iserror(vlookup(row()-1,sheet1!$e$2:$f$300,2,0),"",vlookup(row()-1,sheet1!$e$2:$f$300,2,0))

というふうに、エラー回避をさせると、より見やすくなるでしょう。

いかがでしょうか?
    • good
    • 0
この回答へのお礼

ご丁寧なご回答をいただきまして、誠にありがとうございます。
早速この後チャレンジしてみます!

簡単な言葉ですみません。

お礼日時:2006/02/02 22:01

訂正



>また、
>
>=if(iserror(vlookup(row()-1,sheet1!$e$2:$f$300,2,0),"",vlookup(row()-1,sheet1!$e$2:$f$300,2,0))
>
>というふうに、エラー回避をさせると、より見やすくなる>でしょう。

これでは、カッコが足りませんでした。
>=if(iserror(vlookup(row()-1,sheet1!$e$2:$f$300,2,0)),"",vlookup(row()-1,sheet1!$e$2:$f$300,2,0))

と、iserror文のカッコ閉じを追加して下さい
    • good
    • 0

ランクのセルが更新されたらソートすればよいと思います。

マクロは、ランクのsheetのchangeイベントプロシージャとして作成します。

ソートするので、一応、以下を前提、制約があります。
1.見出しが1行目に1行ある。2行目以降をソート対象とする。
2.ランク順、ユーザー名順にソートする。このため、ユーザーを新規追加するとソートが実行さる。
3.同一ランクの同一名のユーザーがどの順になるかは、excelのソートのロジックに依存する。

マクロは…
Private Sub Worksheet_Change(ByVal Target As Range)
'ランク、ユーザー変更ならソート(昇順)
If ((Target.Column = 1) Or (Target.Column = 2)) Then
Range("a:b").Sort Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("B2"), Order2:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=True, _
Orientation:=xlTopToBottom, SortMethod:=xlStroke, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
End If
End Sub
    • good
    • 0
この回答へのお礼

ご丁寧なご回答をいただきまして、誠にありがとうございます。
早速この後チャレンジしてみます!

簡単な言葉ですみません。

お礼日時:2006/02/02 21:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!