[[20200412195739]] 『空白のある表を関数を使って並べ替えたいです。』(よっし) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『空白のある表を関数を使って並べ替えたいです。』(よっし)

エクセル初心者で、初投稿です。よろしくお願いいたします。

下記のようなリース車両のメンテナンス金額表があります。
縦軸が「メンテナンス項目」横軸が「時期(6ヶ月刻み)」です。

※日付は「2020/7/1」というように西暦で入力されていて
 書式設定で読替しているだけの状態です。

※半角のアンダーバーと全角で「|」を使いセルと空白を表現
してみました。
読みにくいと感じてしまうかもしれませんがご了承ください。

      2020/7|2021/1|2021/7|2022/1|2022/7
オイル交換 2,000_|2,000_|2,000_|2,000_|2,000


タイヤ交換 _______|3,000_|______|3,000

その他_____10,000|______|______|______|10,000

この表を関数を使って2パターンに並べ替えたいです。
1つは時期順です。

2020/7|オイル交換 |2,000


2020/7|その他   |10,000

2021/1|オイル交換 |2,000

2021/1|タイヤ交換 |3,000



といった具合です。
もう一つは項目順です。

オイル交換|2020/7|2,000


オイル交換|2021/1|2,000

オイル交換|2021/7|2,000

オイル交換|2022/1|2,000

オイル交換|2022/7|2,000

タイヤ交換|2022/1|3,000

タイヤ交換|2023/1|3,000



といった具合です。

ネットで調べながら色々とトライしてみたのですが上手くいかず
質問する運びとなりました。
よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:unknown >


補足です。並べ替えるのは、別シートになるようにしたいです。
よろしくお願いします。
(よっし) 2020/04/12(日) 20:56

__A列____ |_B列_ |_C列_ |_D列_ |_E列_ |_F列_ |
      2020/7|2021/1|2021/7|2022/1|2022/7
オイル交換 2,000_|2,000_|2,000_|2,000_|2,000

タイヤ交換 _______|3,000_|______|3,000
その他_____10,000|______|______|______|10,000

です。分かりづらくて申し訳ございません。
よろしくお願いします。
(よっし) 2020/04/13(月) 14:01


 Sheet1に表。

 Sheet2

 【時期順】A:C列

 A1 =IFERROR(INT(AGGREGATE(15,6,(ROW($C$2:$H$20)/(Sheet1!$B$2:$G$20<>""))+Sheet1!$B$1:$G$1*1000,ROW(B1))/1000),"")
 B1 =IFERROR(INDEX(Sheet1!$A:$A,MOD(AGGREGATE(15,6,(ROW($C$2:$H$20)/(Sheet1!$B$2:$G$20<>""))+Sheet1!$B$1:$G$1*1000,ROW(B1)),1000)),"")
 C1 =IF(B1="","",SUMPRODUCT((Sheet1!$B$1:$F$1=A1)*(Sheet1!$A$2:$A$20=B1),Sheet1!$B$2:$F$20))

 【項目順】E:G列

 E1 =IFERROR(INDEX(Sheet1!$A:$A,AGGREGATE(15,6,ROW($A$2:$A$4)/(Sheet1!$B$2:$F$20<>""),ROW(A1))),"")
 F1 =IF(E1="","",AGGREGATE(15,6,A$1:A$100/(B$1:B$100=E1),COUNTIF(E$1:E1,E1)))
 G1 =IF(F1="","",SUMIFS(C:C,A:A,F1,B:B,E1))

 A1:G1 下へコピー。
(GobGob) 2020/04/13(月) 15:11

 条件忘れ。

 Sheet1のデータ範囲 2行目〜20行目・B〜G列まで
 Sheet2の抽出範囲 100行目まで (19行×5列なんで 100位でw)
(GobGob) 2020/04/13(月) 15:14

GobGob様

回答ありがとうございます。
自分が使ったことない数式が多く、勉強しながらやって行こうと思います。

質問なのですが、実際のSheet1は項目(オイル交換、タイヤ交換…)も15項目ほどあり
時期(2020/7、2021/1…)も15項目ほどあります。

(ROW($C$2:$H$20)/(Sheet1!$B$2:$G$20<>""))の部分の考え方を解説願えませんでしょうか?
特に「(ROW($C$2:$H$20)」なのですが、「 A1:G1 下へコピー。」をした際に、
Sheet2の数式と「(ROW($C$2:$H$20)」の範囲がかぶるところがあり、$C$2:$H$20とした理由が
あれば教えていただきたいなと。

また、前述しましたが実際の項目はもっと多いので、「(Sheet1!$B$2:$G$20<>"")」の範囲を広げた場合
「ROW($C$2:$H$20)」の範囲も広げるということなのでしょうか?

分かりづらい質問をして、申し訳ございません。
よろしくお願いいたします。

(よっし) 2020/04/15(水) 10:46


 > Sheet1!$B$2:$G$20<>"")」の範囲を広げた場合 「ROW($C$2:$H$20)」の範囲も広げるということなのでしょうか? 

 そうっす。

 ついでに

 >Sheet2の抽出範囲 100行目まで (19行×5列なんで 100位でw)

 これも考慮してF1セルも修正してくださいな。
 (データ範囲 2行目〜20行目 19行 の 5列 ⇒ 実際の範囲)
(GobGob) 2020/04/15(水) 12:24

GobGob様

何とかカタチになりそうです。

「ついでに」の補足も参考にします。

ありがとうございます!
(よっし) 2020/04/15(水) 17:57


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.