• ベストアンサー

エクセルの関数についての質問です。日付別にランクを付けたい。ただし1位

エクセルの関数についての質問です。日付別にランクを付けたい。ただし1位が3つ続いた場合の4つ目は2位としたい。 マクロでも結構です。教えてください。 A列_B列 6/1_1 → 1 6/1_1 → 1 6/1_5 → 2 6/1_5 → 2 6/1_3 → 3 6/2_3 → 1 6/2_3 → 1 6/2_8 → 2 6/2_9 → 3 6/2_9 → 3 _____↑ここの数字を出したいです。

  • spnj
  • お礼率62% (20/32)

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

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

うーん、単にこういう事かな? D2以降に日別順位を入れるとして、D2には1、 D3には↓を入れて下にコピー =IF(A2=A3,IF(B3=B2,D2,D2+1),1) B列の値が昇順になっている物とします。

spnj
質問者

お礼

mt2008様 ご回答ありがとうございます。 まさに「単に」ということだったと思われます^^ 次回からは、質問方法に注意したいと思います。 有難うございました。

その他の回答 (4)

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

同じ日付で同じランクが4つ以上続いた場合にはランクを一つプラスするのでしたら次のようにします。 A列およびB列のデータは2行目から下方に有るとします。 C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",IF(ROW(A1)=1,1,IF(AND(A1=A2,B1=B2),IF(SUMPRODUCT((A$1:A1=A2)*(B$1:B1=B2))<3,C1,IF(OR(SUMPRODUCT((A$1:A1=A2)*(B$1:B1=B2))=3,SUMPRODUCT((A$1:A1=A2)*(B$1:B1=B2))=6),C1+1,C1)),IF(AND(A1=A2,B1<>B2),C1+1,IF(A1<>A2,1,""))))) 勿論、初めにA列が最優先でB列が次の優先で昇順で並べ替えが行われているものとします。

spnj
質問者

お礼

KURUMITO様 返事が遅くなり申し訳ありません。 A列最優先でB列が次の優先の昇順並び替えという条件でした。試してみたところ、もちろんOKでした。 これだけの複数条件がはいっている数式に、ただただ関心させられました。 当方の説明不足があり、他の方同様ご迷惑(いろいろ考えて頂いた)をお掛けしました。 ありがとうございました。

回答No.3

#2です。当方の回答は憶測が違ったようです。 そこで、明確にしておきたい部分があります。 1.日付は昇順である 2.1位が3つ続くとは、3連続で出現した場合か、それとも3つの1位がある場合か? 3.順位を下げる特殊条件はのは1位だけでのみか?2位以降も順位を下げるのか? 4.特殊条件で順位を下げた場合(仮に1位だったとして)、2位だったものは3位になるのか? 5.上記疑問を解決できるようなサンプルが欲しい

spnj
質問者

お礼

CoalTar様 返事が遅く、さらに当方の説明不足があり申し訳ございません。 1.日付は昇順です。 2.3連続です。 3.2位以降もです。 4.3位になりません。 サンプルについては適当なものは用意できそうにございませんでした。 A列_B列 6/1_1 → 1 6/1_1 → 1 6/1_5 → 2 6/1_5 → 2 6/1_6 → 3 6/1_9 → 4 6/1_9 → 4 6/2_3 → 1 6/2_3 → 1 6/2_8 → 2 6/2_9 → 3 6/2_9 → 3 今後は十分に説明できるよう気をつけます。

回答No.2

たたき台 B2セル 1 B3セル =IF(A2<>A3,1,IF(B2=B1,B2+1,B2)) 下へオートフィル 添付図参照

spnj
質問者

お礼

ご回答有難うございます。 早速やってみます。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

上記がA1:B10にあるとして C1=ROUND(SUMPRODUCT(($A$1:$A$10=A1)*($B$1:$B$10<B1)/COUNTIF($B$1:$B$10,$B$1:$B$10))+1.3,0) でC10までコピー ※6/1_5→2は3、6/1_3→3は2の間違いですよね。

spnj
質問者

お礼

ご回答有難うございます。 6/1_5→2はそのままで6/1_3→3の部分は6/1_6→3の謝りでした。大変申し訳ありませんでした。

関連するQ&A

  • Rank 関数について

    Rank 関数について エクセル2003を使っています。  Rank関数で出した数字を「数字/総数」という形式で表示させる方法を教えてください。 別の列に出しても構いません。ユーザー定義を使うのかもしれません。 例 名前 数値 Rank A  50  2 B  30  3 C  90  1 Rank列の横に 2/3 3/3 1/3 と表示させたいのです。

  • エクセルの日付関数について教えてください。

    エクセルの日付関数について教えてください。 A列には日付が入力されています。 B列には金額が入力されています。 C列にも日付が入力されています。 A1に入力された日付(例:2010/4/30)とC1に入力された日付(例:2010/4/30)が同じ日付のときだけ、B列の金額を抽出しD10に合算させたいと考えています。 ***【サンプル】*****************************    A   B   C   D 1 4/30  100  4/30 2 4/30  200  4/30 3 5/1   100   4 5/2   200  5/2 5 5/2   100  5/2 6 7 8 9 10            同じ日付(1)の合計 11            同じ日付(2)の合計 ******************************************* 上記の場合のD10やD11の関数は、どのような関数に すべきでしょうか? どなたかご教授をお願い致します。 【環境】 WindowsXP Pro Excel 2003

  • エクセルの関数RANK

    エクセル2000を使っています。RANK関数でランクを出したいのですが、範囲がA列だけでなくB列、C列にもあります。これらのはなれたデータを範囲にできますか?Ctrlを押しながらドラッグすると複数の範囲は選択できるのですが、エラーが出てしまいます。できるなら方法を教えてください。

  • excelの関数かマクロで連番、日付を付けたい

    こんばんわ、EXCELマクロ入門者です。 excelの関数かマクロ、VBAで日付や、連番を付けたいです。 できれば関数でできたらなぁと思います。マクロ、VBAはほとんど初めてです。 (1)まず、B2に商品名を入れます。 (2)すると、A2に連番、C2に今日の日付(システム日付)、 D2に商品名と今日の日付、商品ごとの連番が自動的に振っていく感じにしたいです。毎日たくさん入力するらしいのでマクロとかVBAとか関数で作ってくれと頼まれました。 A列は例えばA3に=if(B3="","",A2+1)を入れて何とかできたのですが、 C列の日付(today関数やnow関数ではファイルを開き直すと日付が変わってしまう)とD列の商品名-日付-商品ごとの連番で特に困っています。 イメージとしては下のような感じです。   A   B    C     D 1 連番 商品名 日付    商品名-日付-商品ごとの連番 2 1   ○○○ 2007/8/10  ○○○-2007/8/10-1 3 2   ××× 2007/8/12  ×××-2007/8/12-1 4 3   △△△ 2007/8/13  △△△-2007/8/13-1 5 4   ○○○ 2007/8/15  ○○○-2007/8/15-2 6 5   ○○○ 2007/8/16  ○○○-2007/8/16-3 どなたか、ご教授ください。 どうぞ、宜しくお願い致します。

  • エクセルの関数についての質問です

    エクセル2010で A1のセルに「○」が入力されると +3 A2・A3・A4 のセルはどこか一箇所にでも○が入れば、1を足します。 二箇所、三箇所に入っても 1しか足しません。 その合計数をBの列に表示させるようにしたいのです。 Bの1~4のセルは結合されています。 すべてに○が入った場合は、B列の数字は 3+1=4 A1にしか○が入らなかった場合のB列の数字は3になります。 3+0=3   A   B   1 ○ 2 ○ 3     4 4 ○   ○が入れば、3を足す  一箇所にでも入れば1を足す それぞれ別の関数は出来たのですが ふたつの条件の合計を出す式が出来ません。 非表示の列を作って、そこにまずは別々に数字を出して それを合計させる手もあると思うのですが 列を増やしたりせずに、関数だけで、B列に数字が入るようにしたいのです。 うまく伝わりますでしょうか どうぞよろしくお願いします。

  • エクセルの関数についての質問です。

    エクセルの関数についての質問です。 画像のように横に1、2、3…(100くらいまで続きます)縦にA、B、Cの行があります(端が切れちゃってますが、A2にA、A3にB、A4にCです) B2から横の列にはそれぞれ☆や○等いろいろな記号が入ります。 そしてこの記号には特定の値が決められています。☆=10、○=5、△=3 B3から横には、B2の記号にそった数字が入ります。(10やら5等) そこまではIF関数で式を作ったのですが、ここからが問題でして… B2から横に1から100まで、記号(B3から横に数字)を入力していった時のB3列の合計が仮に212とします。 合計した値が200を越えてしまった場合、B4からの列に数字を入力するようにしたいのです。 (200ギリギリ前くらいまではB3の列で、それを越える時からB4の列に入力します。その際、B3列に入る数字は消えます) なおかつ可能であれば、このB4からの列に入るのはランダムにできるといいのですが…(画像では○の数字を下ろしていますが、☆の数字をおろしても良いし、△の数字をおろしても良い) ●計算式によって入力された数字(B3列)を特定の数字を越えた場合、別の枠(B4列)に移す関数はありますでしょうか?? ●また、それをランダム(関数)で選ぶことは可能でしょうか?? よろしくお願いします。

  • Excelで使う関数を教えてください

    シスアドの試験問題にあった例題ですが A列に日付、B列に数字が入っています。 3月分のデータだけF列に表示したい場合 F3に入れる式が =IF(AND(日付(A3)>=日付(2006/03/31),日付(A3)<=日付(2006/03/01),B3,"") となっていました。 Excelで日付に相当する関数を教えていただきたいのです。 よろしくお願いします

  • Excel RANK関数 条件に一致する数値の順位

    EXCELのRANK関数で条件に一致する数値の順位を出したいのですが、そのような関数は出来ますか? A列 B列 C列(RANK) A  10  1 B 9 1 A 8 2 B 7 2 A 6 3 B 5 3 A列とB 列からC列を求めたいのですが、できますか?

  • Excelの日付関数について教えてください

    今使用しているExcelファイルでBの列に年月日が入っています。それをA列では年月だけ表示させたいのですがどのような関数を設定したらよいでしょうか? できればうちの会社が25日締めなのでたとえばB列の入力が2005/12/26から2006/1/25までの日付だとA列では06/01と表示させ、2006/1/26から2006/2/25までだと06/02と表示させたいのですがそういうことはできますでしょうか? <例>  A    B 06/01  2006/01/10 06/02  2006/02/15

  • エクセルの関数についての質問です。エクセルは2003です。

    エクセルの関数についての質問です。エクセルは2003です。 A列とB列とC列には数字(金額)が入っております。 A列とB列を比較して一致するものには○(マル) 不一致には×(バツ)を付けるにはIF関数で倫理式にA=B 真の場合に○ 偽の場合に× と設定すれば出来ると思うのですが A列とB列とC列の3つの列を比較してD列に○×を付けたいのですが方法が 分かりません。A列とB列が同じでもC列がAとBと違うなら×というように 3つの列が同じ場合のみ○ どれかひとつの列で違うなら×と表示させたい のです。素人ですので伝えにくいですが宜しくお願い致します。

専門家に質問してみよう