• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel 項目別昇順関数)

Excel項目別昇順関数

matsu_junの回答

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.5

race77さん、こんばんわ マクロで実行するのが楽ではありますが、どうしても数式で実現したい場合は作業列を利用して実現できなくはありません。 例の通り、11行目からデータが始まっているものとします。(別に11行目から始まっている必要はありませんが、1行目から実データが始まっていると多少厄介ではあります) また、これも例の通り、L10セルとP10セルに、車両費だのガソリン代だのを入力するものとします。 (ここを変更すると結果が変わる) S列からAA列までを作業列として利用します(この列には他にデータを入れないで下さい。また、この列が既に埋まっていて利用できない場合は、以下の数式を右にずらして利用してください) 実際のデータは200行前後とありますが、1000行目までデータが入っても良いように作ってあります。これ以上データが増える場合は、数式を読み込めば、増やす方法も分かるはずです。 K11セル(大費目の抽出対象の日付) =IF(ISNA(X11),"",INDIRECT("T"&X11)) (K列全体に対して、D列の書式をコピーすること) L11セル(大費目の抽出対象の小費目) =IF(ISNA(X11),"",INDIRECT("U"&X11)) (L列全体に対し、条件付書式で、「セルの値が 次の値に等しい 0」の時、フォント色を白色」に設定 M11セル(大費目の抽出対象の金額) =IF(ISNA(X11),"",INDIRECT("V"&X11)) (M列全体に対し、G列の書式をコピーすること) O11セル(小費目の抽出対象の日付) =IF(ISNA(AA11),"",INDIRECT("K"&AA11)) (O列全体に対して、D列の書式をコピーすること) Q11セル(小費目の抽出対象の金額) =IF(ISNA(AA11),"",INDIRECT("M"&AA11)) (Q列全体に対し、G列の書式をコピーすること) S11セル(L10セル(車両費)に該当する元の表の行番号の取得) =MATCH($L$10,INDIRECT("E"&(S10)+1):$E$1000,0)+S10 (行を増やしたい場合は、ここの$E$1000の"1000"を増やす) T11セル(S列で求めた行番号に該当する日付の取得) =IF(ISNA(S11),"",INDIRECT("D"&S11)) U11セル(S列で求めた行番号に該当する大費目の取得) =INDIRECT("F"&S11) V11セル(S列で求めた行番号に該当する金額の取得) =INDIRECT("G"&S11) TUV列は、DFG列から「車両費」に相当する項目を抜粋した表となります。 これをベースに、以下並び替えを行います。 W11セル(T列(日付)をRANK関数にて昇順に順位をつける) =IF(T11="","",RANK(T11,T:T,1)) X10セルとY10セルには、「1」を入れてください。これを行わないとX列が上手く計算できません。 X11セル(T列(日付)を、値の小さい順に並べたときの行番号) =IF(ISNA(MATCH(Y10,INDIRECT("W"&X10+1):$W$1000,0)+X10),MATCH(Z11,W:W,0),MATCH(Y10,INDIRECT("W"&X10+1):$W$1000,0)+X10) (行を増やしたい場合は、1000 (2箇所あります) の値を増やす) Y11セル(同じ日付で同じ項目が存在した場合を考慮した、同率○位 の表示 X列の計算に利用) =INDIRECT("W"&X11) Z11セル(同率を考慮しない場合の順位 X列の計算に利用) =Z10+1 AA列は、OQ列を求めるための作業列となります。 AA11セル(P10セル(ガソリン代)に該当するKLMの表の行番号の取得 =MATCH($P$10,INDIRECT("L"&(AA10)+1):$L$1000,0)+AA10 OQ列の表は、KLMの表を参照しているため、既に並び替えができているので、これだけでOKです。 ここまで入力したら、まずはS11セルをクリックした後、S11セルの右下をつまみ、1000行目までドラッグします。T11セルについては、T11セルを選択した後、T11セル右下へカーソルを持って行き、カーソルの形状が変わったところでダブルクリック、U11以降も同様にします。 作業列の表示が邪魔であれば、S列からAA列までを非表示にするなり、フォントを背景と同じ色にすると良いでしょう。

race77
質問者

お礼

>実際のデータは200行前後とありますが、1000行目までデータが入っても良いように作っ >てあります。 ありがとうございます。将来は、データ入力200行は突破しますと思いますので 配列数式より作業列を利用した方がベターなのかもしれません。 matsu_jun様、感謝いたします。

関連するQ&A

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

    パソコンは初心者です。 仕事でデータベースを作っているのですが、関数の使い方がわかりません。 A列に日付、B列に担当者名、C列には日付や文字データを入力しています。 D,E,F,G,H,I,J列などにもデータを入力してあります。 A列とC列でデータの合致しない行を抜き取って別の表に作り変えたいのですが、どんな方法が使いやすいですか? 関数を利用するのがよさそうな気はするのですが、マニュアル本など見ても、ぴったりの内容が見つかりません。 よろしくお願いします!

  • Excel昇順関数について

    データの昇順・降順方法として、メニューから「データ」→「並べ替え」とする方法がありますが、関数で同じことを実現できるものはあるのでしょうか?(例)A列に上から、「5、3、1、4、2」と並んでいるときに、(関数を入力した)B列上から「1、2、3、4、5」と表示する。

  • エクセルのデータから一致するデータを出したい

    エクセルの表から一致するデータに対応する指定列のデータを表示させたいのですがどの関数で設定すればよいのか教えて下さい。 A2からDの30までの表(実際には4000列以上) 1行は見出し A列は1~のナンバリング B列は商品コード(同じコードが複数ある)    ・昇順に並べてある C列は日付け    ・2番目に優先で昇順に D列は文字列 探したい商品コードをB1入力、それに対応するD列の文字列の昇順のトップをD1に表示させたい この内容で伝わるでしょうか オートフィルターで選ぶのも考えたのですが、入力した時その列のある列のデータが瞬時に見たいのです。 よろしくお願いします。

  • エクセルで指定した項目を別のファイルで表示するには?

    現在、会社でエクセルで管理表の雛形を作成しようとしているのですが、中々いい案が浮かばないので、皆様の知恵を貸して頂きたく質問を書き込みました。よろしくお願いいたします。 現在使用している管理表が3つあるのですが、一つの管理表(仮にAとします)に残りの二つの管理表(B・C)に入力されているデータの指定した部分の項目のみを、一つの管理表(A)に反映させたいのですが、この場合どういった関数を使用するのが良いでしょうか? 管理表の主な内容 ~管理表A~ 項目が10以上ある。 データは半期ごとで管理したい。 ~管理表B~ 項目は10以下。 データは月ごとにシートで分けて管理したい。 ~管理表C~ 項目はBと同じ位。 データは月ごとにシートで分けて管理したい。 やりたい事は↓ 管理表Aに管理表B・Cの指定した項目のデータをリンク(反映)させたい。 例:管理表Bの2行目のB・D・G列に入力されたデータを   管理表Aの2行目のA・B・C列に表示させ、   管理表Cの2行目のA・C・F列に入力されたデータを   管理表Aの2行目のD・E・F列に表示させる。 こういった事は可能なのでしょうか? よろしくお願いいたします。

  • エクセルと日付の関数と並び替え

    エクセル初心者です。 日付の勉強をしているのですが 今、下の画像のようなデータを作成しました。 一番左の列が、別のデータベースから転記した日付を シリアル値に変換したものです。 それを真ん中の列にコピーして、日付に変換しました。 そのデータの中から、YEAR関数とMONTH関数を使って 年と月のみの日付にしたものが、3列目です。 ここで、疑問なのですが、3列目を昇順に並び替えたときに きちんと昇順に並び替えができませんでした。 9月、10月、11月ときれいに順番に並べるには何か 複雑なセル設定が必要なのでしょうか。 教えてください。

  • エクセル関数のことで困っています。

    今、簡単な表計算の表を作っていますが、先に進まず困っています。 A1~A200のセルに1~200の番号が昇順で入っています。そしてデータとして,B2,C2,D2,E2 に各々a、b、c、dが入っており,,B3,C3,D3,E3 にa1、b1、c1、d1・・・・・・・・・・・・B200,C200,D200,E200にw,x,y,zのようにB,C,D,E列に適当な数が入っています。 そこで、E列の値で昇順  SMALL(D$1:D$200,A1)  に並べ替え、同時にB,C,D,Eの値も返したいのです。つまりエクセルの並べ替え機能を関数で自動で行いたいのです。 今は、関数の、ROW,SUMPRODUCT,COUNT,INDEX,LARGE,COUNTIF,COLUMN,などを使い関数バーに5行ほどになり、処理にとても時間がかかります。 何とか、簡単で早い計算式はないでしょうか。 よろしくおねがいします。

  • エクセルのVLOOK関数の基本がわかりません

    エクセルで下記のような表を作りたいのですがVLOOK関数とかを使えばいいと聞きました。 Helpで検索してもさっぱりわかりませんのでよろしくお願いします。   A列    B列   C列    D列    E列   F列   G列  1 日付   品番   品名    重量    大根   人参  白菜 2 1.10    11    大根    1000   1000 3 1.10    13    白菜    2000           2000 4 1.11    12    人参    750        750 5 1.12    13    白菜    500            500 ↑(1)B列に品番を入力したらC列に品名が自動的に表示される  (2)D列に入力したらそのデータがC列の品名により、それぞれ指定した列に自動的に表示される 以上のようなことができるようになりたいのです。よろしくお願いいたします。

  • Excel 関数で困ってます

    携帯からの質問なのでわかりづらいかと思いますが まずA列からずっと例えばAQ列まで文字列での日付が続いておりその下のセルにはあるデータが下に続いており日別に縦割りにデータになっていますこの表を参照し違う表を作りたいのですが 入力規制で同じように日付を選択すれば下のセルに日別のデータが返るようにしたいのですが 関数はどのようにすればよいでしょうか? VLOOKとかだと表の作り上難しいかなと 急ぎの仕事なものでなんとか初心者にご教示いただければと

  • エクセルのオートフィルターで項目が表示されません。昇順・降順・すべて・

    エクセルのオートフィルターで項目が表示されません。昇順・降順・すべて・トップテン・オブションのみしか表示されません。データー項目が全く表示されません、どの列もです。お知恵をお貸し下さい。

  • 項目ごとにまとめる関数

    エクセルにおいて、項目ごとにまとめる関数、重複をまとめる関数のような機能はありますか? 日付、支店、商品、売上、 ・・・・・・ ・・・・・・ といった表があったとして、支店ごとなどでまとめるものです。 通常、pivotを使用すると思いますが、pivotを自動的な関数でできないか、というご相談です。 上記の表で、支店を重複削除したものを、別シートに作成し、vlookupで元の表を見ていけば、支店別の売上ができますが、そういったことをしたいわけです。作業的には、毎回取引のデータのCSVデータを貼り付けるだけというような。 いちいちpivotを作成するのも面倒ですし。