
お世話になります。
項目、数量、金額、カテゴリ の入ったデータがあります。
これは他の場所からVLOOKUPで引っ張ってきたもので、順番もバラバラ。
何も入っていない行もあります。(0が入っています)
これを別の箇所に行間を詰めて表示したい。それから
カテゴリが同じものなら金額が上位2つの行だけを反映させたいです。
反映先の順番は特に気にしません。
ちなみに画像の真ん中はその後の計算に使うための表になっていますので
合計値は今回の質問とは関係ありません。
出来るだけマクロを使用せず、関数や設定だけで行いたいと思っています。
でも不可能ならマクロの使用も検討しています。
何か良い方法はないでしょうか?
よろしくお願いいたします。

No.1ベストアンサー
- 回答日時:
こんにちは
詰めるだけなら、比較的容易にできますけれど・・
>カテゴリが同じものなら金額が上位2つの行だけを反映させたいです。
というのが、関数で処理将とするとかなり面倒ですね。
マクロを用いれば、これもさほどではないのですが・・・
>出来るだけマクロを使用せず、関数や設定だけで行いたいと思っています。
とのことですので、以下は、関数で作業列を用いる方法です。
作業列はどこでも良いので、空いている列を利用してください。
(邪魔にならない離れた列でも良いですし、非表示にしておくなどもありかと)
添付図ではとりあえずP列に設定してあります。
1)P2セルに、
=IF($A2=0,"",IFERROR((AGGREGATE(15,6,RANK($C$2:$C$20,$C$2:$C$20)/($D2=$D$2:$D$20),2)>=RANK($C2,$C$2:$C$20))*1,1))
の式を入力し、下方に十分にフィルコピーします。
これにより、抽出すべき行だけに1が表示されます。
2)L2セルに、
=IFERROR(INDEX(A:A,AGGREGATE(15,6,ROW($A$2:$A$20)/($P$2:$P$20=1),ROW(A1))),"")
の式を入力し、L2:O2までフィルコピー
更に、L2:O2を下方にフィルコピーします。
以上で、ご提示の内容と表示順序は異なりますが、同じ内容になると思います。
(表示の順序は、元の表での出現順序になります。)
なお、同じカテゴリーで、同じ金額のものが多数存在する場合は、全て抽出されますのでご注意ください。
同金額が複数あっても、2つだけに絞り込みたい場合には、上記の1)の式を
=IF($A2=0,"",IFERROR((AGGREGATE(15,6,(RANK($C$2:$C$20,$C$2:$C$20)+ROW($A$2:$A$20)/100)/($D2=$D$2:$D$20),2)>=(RANK($C2,$C$2:$C$20)+ROW($A2)/100))*1,1))
に代えてください。
(同金額の場合でも、行番号の小さいデータを優先して、2つだけを抽出するようになります)

うわーー!!すごい!!すごいです!!
私もちょっとはExcelが出来るつもりでいましたが、ほとんどが使ったことのないか名前も知らない関数のオンパレードです!
Excelの開発者の方ですか?(笑)
書いていただいた関数を入れたら本当に理想通りの表が出来ました!
本当にありがとうございます。これからひとつひとつ関数を紐解いて意味を理解していこうと思います。
ありがとうございました!!
No.5
- 回答日時:
№4です。
P2セル
一般数式に変更
SUMPRODUCT((D2=$D$2:$D$9)*(C2<$C$2:$C$9))+1<3
L2セル(2つ目のINDEXが余分でした)
=IFERROR(INDEX(A:A,SMALL(IF($P$2:$P$9*$B$2:$B$9<>0,ROW($A$2:$A$9)),ROW(A1)),0),"")
No.4
- 回答日時:
№1さん同様、作業列(P列)を使用するパターンです。
大変ローテクで少々長いですが
P2セル
=SUM(IF((D2=$D$2:$D$9)*(C2<$C$2:$C$9),1,0))+1<3
配列(Ctr+Shift+Enter)数式 確定
P9までフィルコピー
L2セル
=IFERROR(INDEX(A:A,SMALL(INDEX(IF($P$2:$P$9*$B$2:$B$9<>0,ROW($A$2:$A$9)),0),ROW(A1)),0),"")
配列(Ctr+Shift+Enter)数式 確定
L2:O2までフィルコピー
更に、L2:O2を下方にフィルコピー
No.3
- 回答日時:
添付図参照(Excel 2019)
Sheet1 において、
1.配列(SCE)数式の
=IF(AND($D2=S$1,$C2>=LARGE(($D$2:$D$9=S$1)*$C$2:$C$9,2)),$C2,"")
 ̄ ̄を入力したセル S3 を右方4列&下方7行オートフィル
2.式 =OFFSET(S$1,,ROW(A2)-1) を入力したセル Y1 を下方4行
 ̄ ̄オートフィル
3.配列(SCE)数式の
=SMALL(IF(INDIRECT($Y1)<>"",ROW(INDIRECT($Y1))),COLUMN(A1))
 ̄ ̄を入力したセル Z1 を右隣り&下方4行オートフィル
Sheet2 において、
4.式 =OFFSET(Sheet1!$S$1,,(ROW(A1)-1)/2) を入力したセル A1 を
 ̄ ̄下方9行にオートフィル
 ̄ ̄式↓
=OFFSET(Sheet1!$Z$1,(ROW(Sheet1!A1)-1)/2,MOD(ROW(A1)-1,2))
 ̄ ̄を入力したセル C1 を下方9行にオートフィル
5.範囲 A1:C10 を選択⇒Ctrl+Cを実行⇒選択範囲上でマウスの右クリック
 ̄ ̄⇒[貼り付けのオプション]直下の[123](値)アイコンをツン⇒選択範囲範
 ̄ ̄囲上で、今度は Ctrl+G を実行⇒[セル選択]⇒“定数”に目玉入れ⇒下方に
 ̄ ̄ある“エラー値”以外に付いているチェック外し⇒[OK]⇒選択状態になっ
 ̄ ̄た #NUM!エラーの何れかのセル上でマウスの右クリック⇒[削除]⇒
 ̄ ̄“行全体”に目玉入れ⇒[OK]をパシーッ⇒その結果を緑枠の添付図
 ̄ ̄Sheet2 の右側に示した⇒その範囲 A1:C6 を選択⇒Ctrl+C を実行し後
 ̄ ̄で、…
Sheet1 に戻って、
6.セル O2 を選択⇒Ctrl+V をパシーッ⇒式 =INDEX(A:A,$Q2) を入力し
 ̄ ̄たセル L2 を右方2列&下方5行オートフィル
オ・シ・マ・イ

とても詳しくありがとうございます!!
ちょっと理解が追いつかず、まだ試していませんが、参考にさせていただきます!
ありがとうございました!
No.2
- 回答日時:
> 出来るだけマクロを使用せず
数式でやってもごちゃごちゃと意味の分からないものを並べる以外に
ないのですからマクロを避けるのが得策とは思えません。
かえって処理が重く複雑になるだけです。
というより数式かマクロかという二択がそもそもどうかと思います。
Excel2016なら PowerQueryが使えます。
左の表を見出し非表示のテーブル1として設定しておけばクエリは
行の抽出 = Table.SelectRows(テーブル1, each [Column4] <> null),
行のグループ化 = Table.Group(行の抽出, {"Column4"}, {"グループ", each Table.FirstN(Table.Sort(_,{"Column3",1}),2)}),
グループ列の展開 = Table.ExpandTableColumn(行のグループ化, "グループ", {"Column1", "Column2", "Column3"}),
列の並べ替え = Table.ReorderColumns(グループ列の展開,{"Column1", "Column2", "Column3", "Column4"})
これで済む話です。
マクロをなるべく使用しないのは、私自身の知識が乏しくメンテナンスが容易ではないためです。
勉強不足は否めません汗
PowerQueryについても初めて聞きました。
詳しくありがとうございます!
勉強してみます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) エクセルの数式について(数値を探し出したいです。) 4 2023/04/18 16:35
- Excel(エクセル) エクセルの表でダブりを解消する方法を、教えてください。 5 2023/04/12 12:11
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- その他(Microsoft Office) Excelで時間計算(負) 8 2023/02/26 05:47
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
Excel・Word リサーチ機能を無...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
Excel マクロ VBA プロシー...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
マクロで空白セルを詰めて別シ...
-
エクセルに張り付けた写真のフ...
-
wordを起動した際に特定のペー...
-
VB初心者です。メールから添付...
-
EXCELのマクロの重複起動...
-
エクセルで別のセルにあるふり...
-
UWLSの記録でマクロを作成し使...
-
エクセルで縦に並んだデータを...
-
Excel マクロでShearePoint先の...
-
エクセルでA1セルに時刻をリア...
-
オートフィルターとExcelマクロ...
-
VBA アドインについて お詳しい...
-
inlineとdefineの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
一つのTeratermのマクロで複数...
-
Excel_マクロ_現在開いているシ...
-
メッセージボックスのOKボタ...
-
Excel マクロ VBA プロシー...
-
Excel マクロでShearePoint先の...
-
エクセルに張り付けた写真のフ...
-
ExcelのVBA。public変数の値が...
-
エクセルで別のセルにあるふり...
-
TERA TERMを隠す方法
-
ExcelVBAでPDFを閉じるソース
-
エクセルで縦に並んだデータを...
-
マクロ実行時、ユーザーフォー...
-
Excel VBAからAccessマクロを実...
-
ダブルクリックで貼り付けた画...
-
【EXCEL VBA】オートシェイプを...
-
マクロで空白セルを詰めて別シ...
-
wordを起動した際に特定のペー...
おすすめ情報