• ベストアンサー

EXCEL 数式・関数でソートしたい

数式・関数でソートする方法を教えてください。 A列に日付、B列に品名、C列に個数が入ったSheet1があります。 これを日付順にソートしたSheet2をつくりたいと思っています。 Smallでやろうと思ったのですが、同じ日付が何回もでてくるために、うまくいきませんでした。 よろしくお願いします。

  • kt1
  • お礼率41% (54/130)

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

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

こんばんは。 昨日のご質問にもお答えしたものです。 これも同じ考えた方でできますよ。 ■作業列を使う方法です。 作業列はどの列を使用してもかまいません。 ここでは例として Sheet1の J列を使います。 A列の日付が 2行目から始まっているとすれば、 Sheet1の J2に↓( J列の表示形式は 「標準」 のままにしておいてください) ---------------------------- =IF(A2="","",A2*10000+ROW()) ---------------------------- ◆上の数式を、A列のデータ最終行までコピーしてください。 今後もデータが増えるのなら、予想される最大行までコピーしておいてください。 ( 最大500件だと思えば、J500 までコピー) 3.85E+08 ←のような感じで表示されても気にしないでください。 列幅を広げればちゃんと表示されます。  作業列が目障りなら非表示にしてください。 Sheet2 の A2に↓ ---------------------------------------------- =IF(COUNT(Sheet1!$J:$J)<ROW(A1),"",INDEX(Sheet1!$A:$C,MATCH(SMALL(Sheet1!$J:$J,ROW(A1)),Sheet1!$J:$J,0),COLUMN(A1))) ---------------------------------------------- 作業列を J列と仮定しています。 J列以外の列を作業列に使う場合は、数式の $J:$J (3ヶ所)をその列記号に変更してください。 絶対参照($)にしているところは必ず絶対参照にしておいてください。 ROW(A1)、COLUMN(A1) の A1はそのままにしておいてください。 ◆この数式を、そのまま右にC2までコピー そのまま(A2~C2が選択された状態で)下に、Sheet1 のデータ件数分コピーしてください。 今後もSheet1のデータが増えつづけるのなら、予想される最大行までコピーしておいてください。 A列の表示形式を「日付」、B・C列の表示形式を「標準」にしてください。   ◇ ROW(A1)、COLUMN(A1) の意味については、昨日のご質問の補足にお答えしておきましたので、そちらをご覧ください。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

日付は日付シリアル値で値の実態は整数です。 A列にA2:A6に 2003/4/5 2004/1/1 2004/3/4 2003/4/5 2001/5/1 があるとします。 RANKは同じ日が同じ順位数字になってしまいます。これを避けるために、ある日で9件までしかダブらないと仮定できるなら =A2+0.1*COUNTIF($A$2:A2,A2) をB2にいれB6まで複写します。 B列の書式を数値、小数点以下を2位にしておきます。1位でもよいが。 10件をダブル可能性ありなら、0.01をかけましょう。 37716.10 37987.10 38050.10 37716.20 37012.10 となります。 これでB列でランクをとると =RANK(B2,$B$2:$B6) を複写する。 昇順ならSMALL関数を使う。 結果 4 2 1 3 5 これで連続した順位が振れました。 Sheet2にいって =OFFSET(Sheet1!$A$2,MATCH(ROW(),Sheet1!$C$2:$C$6,0)-1,0) と入れてA5まで複写する。 結果(書式を必ず日付にしておく) 2004/3/4 2004/1/1 2003/4/5 2003/4/5 2001/5/1 と並びました。(降順)

kt1
質問者

補足

皆様、ご回答ありがとうございました。 お礼が遅くなり申し訳ございません。また、補足欄で皆様にお礼申し上げる非礼をお許しください。 色々なやり方があって驚きました。どれも参考になるご回答です。 じっくり検討したいと思います。

回答No.2

こんにちは ご希望の回答であるかどうか自信がありませんが、私でしたらこんな関数で作成しますので、参考になさってください。 1 入力Sheet1のD列に =IF(A2="","",YEAR(A2)*100+MONTH(A2)+ROW()/1000)と日付を数字に変換。  (/1000の1000はデータの数に伴い変更してください。) 2 入力Sheet1のE列に =IF(A2="","",RANK(D2,$D:$D,1)として、1で取出した数字をRANKづけします。 3 1と2をドラックし行コピーします。 4 Sheet2 のA2から 1,2,~と番号を入力しておきます。 5 Sheet2のB2に =INDEX(Sheet1$A$2:$E$1000,MATCH(A2,Sheet1$E$2:$E$1000,0),1) 6 同じくC2に ),2),   D2に ),3)といれ、これらを 下にドラックしてコピーします。 説明が下手ごめんなさい。 少しでも参考になれば幸いです。

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

D列に D2=TEXT(A2,"yyyymmdd")&TEXT(ROW(),"0000") としてこの列でSMALL関数を使えばできませんか?

関連するQ&A

  • SUMPRODUCT関数で複数条件適用されない

    Sheet1 A列:日付 B列:注文番号 C列:品名 D列:整理番号 E列:数量 集計 A列:品名 B~AF列:日付(1~31日) 【集計】B~AF列の日付、A列の品名が 【Sheet1】A列の日付、C列の品名と一致したら 【Sheet1】E列の数量を【集計】の該当するセルに抽出する 式をSUMPRODUCT関数で作成しました。 例)10/1 りんご 20 【集計】B3セルに以下の数式を入れましたが なぜか数量が「0」のままになります。 =SUMPRODUCT('Sheet1'!$A$3:$A$200='集計'!B$2)*('Sheet1'!$C$3:$C$200="りん ご")*('Sheet1'!$E$3:$E$200) 特に数式のミスはないと思うのですが どうしても正しい値が入りません。 数式に間違いがあればご指摘いただけませんでしょうか。 また、他に良き方法があればご教示いただけるとありがたいです。

  • エクセルの関数について

    A列に日付、B列にコードが入っているデータシートから、日付-コードが同じものの個数を算出して統計を取りたいときは、どのような関数を使えばよいのでしょうか。 例) A     B   1/5    A01   1/5    A01      (別シート) 1/5 A01 2   1/8    B01             1/8 B01 1   1/9    A01             1/9 A01 1

  • エクセル数式教えてください

    エクセルの数式を教えてください! 参考書をみても適当な数式を探しだせませんでした・・ 売上をのせた一覧表を別シートに飛ばす方法です。 SHEET1  A  B   C  D   1   10日 11日  12日 2ペン 100  150  210 3靴  900  840  920  4鞄  1000  790  980  SHEET2  A  B   C   D 1   12日  11日  10日 2ペン 3鞄 4靴 販売項目(シート2のA列)と日付(シート2の1行目) を入れるとシート1から数字が飛ぶ数式を教えて下さい!

  • エクセル 数式入り等のセルの個数について

    こんにちわ。教えて下さい。 セルの個数を数えたいのですが、下記のいづれかの方法で出来るやり方はありますでしょうか? ☆条件付き書式で色をつけた空白のみのセルの個数の数え方(列に対応) (1)A1に今日又は今日以前の日付が入って、B1にはA1の日付から2週間たっても、何らかの日付・文字が入らない場合は空白の状態で色がつくようになっています。(文字が入力されたら色は無しになります。2条件が1つのセルに設定されています) 一番ベストなのは、この状態で空白で色のついているセルの個数が数えれば一番いいです。 もし、上記で駄目な場合、 ☆C1に別の数式で、B1が空白かそうでないかで、「FALSE」「TRUE」が表示されるように設定して、その状態で「FALSE」の個数を数えるっていうやり方まではわかるのですが、A,B,C列とも、入力していけば行が増えていくので、先にC列に数式をコピーしておくと、A列に日付が入力されていなくても、「FALSE」が表示されます。A列に日付が入力されている行での「FALSE」の数を数えるという方法はありますか? 説明が下手ですみません。。。 つまり、自分がない知恵で思った、2つの方法のどちらかででも、数える方法があれば教えて下さい。もちろん、もっといい方法があれば幸いです。

  • エクセルの条件による数式の入力

    こんにちは!既存でも見つからなかったので質問させていただきます。どなたかご教授ください。 ●ひとつのブック内に2枚のシートがあります。sheet1とsheet2とします。sheeet1にしかるべき数式を入力したいです。 Sheet2には例えば名簿があるとします。明石から始まり渡辺まで500人ほどの名簿です。これはA列に1から順に名前、B列の1からは年齢が入っています。 Sheet1のA列1行に数式を入れます。A-1には文字列で【わたしは明石です。】と順にA-1~A-500まで順番に入れます。ただしこのとき年齢が18歳未満の時これは入力したくありません。さらにそこには空白のセルを必要とします。IF関数を使うとは思うのですが、このsheet2の列Bの年齢を条件でみっあった時のみを抽出して数式を入力する数式がわかりません。どのようにしたらよろしいでしょうか?

  • エクセル 複数条件で検索する数式を教えてください。

    社員の作業時間入力シートが2つあり、それぞれに入力しているため、入力ミスによる誤差が生じます。それをチェックしています。 検索条件が複数になる場合の計算式を教えてください。 [sheet1]   A   B   C   D  E 1 社員CD 日付  作業時間1 作業時間2  誤差 2 1000 2008/1/1   3.5  ここに数式   =C2-D2 3 1000 2008/1/2  2.5    数式    =C3-D3 4 1001 2008/1/1   5.0    数式    =C4-D4 [sheet2]   A   B   C    1 社員CD 日付  作業時間2 2 1000 2008/1/1  3.0 3 1000 2008/1/3   1.5 4 1001 2008/1/1  5.5 sheet1のD列にsheet2のC列を表示させたいのですが、 条件はA列とB列が一致するものになります。 A・B列が文字列ではないため、1列挿入して=A2&B2列を作成することができませんでした。 D列に数式をいれる事で一発で表示させる方法を教えてください。

  • エクセルで集計

    エクセルで集計 シート1:A列に日付2000行程度、B列に品名A,B,C,D…500種類程度、C列にその内容。日毎に行は増えていきま、同じ品名が何度も登場してきます。 シート2:ここに新しくシート1の集計をして、同じ品名の多い順に並べ替えてリストを作成したいと思います。 シート1に新しく行が増えると同時にシート2の集計に反映させたいのですが、いい方法はありますか?

  • EXCEL2003で日付をソートしたい

    エクセル2003で出納帳を作成しています。 日付をソート(若い順)するにはどうしたらよいでしょうか?? A列 6/1 6/2 6/3 6/1 6/2 これを A列 6/1 6/1 6/2 6/2 6/3 という感じにしたいです。 B列以降C,D,E~には、文字列、関数、数値等が入力されており、それも同時に動かしたいのですが… よろしくお願いします。

  • エクセルの数式・関数を教えてください。

    入力シートにデータがあり、請求書シートに期間を参照して日付を埋め込みたいと考えています。 期間というものは、請求シートの請求日の前月1ヶ月間を考えています。 入力シート    a    b     c     d 1 日付  商品1  商品2  商品3 2 12/7    100   200   300 3 12/15    40    50   60 4 1/7      70    80   90 請求シート  請求日(AR3)  請求内訳日付欄(C12:C42) C12などの欄の数式で、セルAR3の日付の前月の日付範囲で入力シートの日付欄を抽出したいのです。 いろいろ調べましたが、なかなかうまくいかず困っています。 参考となる数式を教えていただければ、助かります。

  • エクセル 関数

    sheet1 エクセルのA列に名前が入力されています。 B列にはその個数が正の数または負の数で記入されています。 小数点を含む数はありません。 尚、A列の名前は同じ名前が何度も入力されていて、その行ごとに 個数は異なっています。 上記の状態でsheet1のB列全体の負の数を0(数値)として 同じB列に表示させるには、 どのような数式をシート内のどの部分にはりつければよいのか教えてください。 ROUNDDOW関数を使っていろいろためしましたが、エラーばかりで質問させていただきました。 よろしくお願いします。

専門家に質問してみよう