• ベストアンサー

エクセル関数で出来ますか?

300人分の商品の購入データがあります。 複数回購入している方の日付と金額を 氏名毎にまとめたいのですが出来ますか? 左が元データで右がまとめたい形式です。 氏名がピンク色の方が複数回購入している方です。 まとめたデータは同じシートでも別シートに 出来上がってもよいです。 どなたかご存じの方がいらっしゃいましたら お助けください。 よろしくお願いします。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (774/1620)
回答No.4

D・E列が空いているのでワークエリアに使います。 フォントの色を白にすれば見えなくなります。股は非表示にして下さい。 D2: =D1+(COUNTIF(A$2:A2,A2)=1) E2: =D2&"-"&COUNTIF(A$2:A2,A2) F2: =IFERROR(INDEX(A:A,MATCH(ROW()-1,$D:$D,0)),"") G2: =IFERROR(INDEX($B:$B,MATCH(ROW()-1&"-"&COLUMN(B2)/2,$E:$E,0)),"") H2: =IFERROR(INDEX($C:$C,MATCH(ROW()-1&"-"&COLUMN(B2)/2,$E:$E,0)),"") G2~H2を纏めて右へオートフィル(必要分) D2から右を纏めて下へコピペ。

PVA
質問者

お礼

すごい、すごいです! 出来ました! 右方向にデータをまとめるのは難しいのかな? と思っていたのですがこんなに簡単にできるなんて 驚きです。 最終的にまとめたデータを差し込み印刷に 使いたいのでSI299792さんの回答が一番 希望していた内容でした。 他の皆さんもいろいろ考えて頂き大変 ありがとうございました。

その他の回答 (3)

noname#250245
noname#250245
回答No.3

右側の表の列は日付が増える度に手動でコピーして日付も手打ちで入れるという前提なら購入金額列にSUMIFS関数を使うだけで充分ですね。 =SUMIFS($C:$C, $A:$A, $F2, $B:$B, G2)      ↑   ↑  ↑  ↑  ↑   合計したい列 ↑  ↑  ↑  ↑          ↑  ↑  ↑  ↑      条件1検索列 ↑  ↑  ↑             ↑  ↑  ↑            条件1 ↑  ↑                ↑  ↑            条件2検索列↑                  ↑                 条件2 左の表の氏名の列(条件1検索列)と購入日の列(条件2検索列)を、右の表の氏名と購入日で検索して2つとも合致したものを、左の表の合計金額列(合計したい列)から抜き出してきて合計するという数式です。 「$」マークが付いてるのはコピペしても対象の列や行を自動で移動しないよう固定するというものですので消さないようにしてください。 この数式を右の表の購入金額欄の2行目に入れて、後はセルのコピペで下まで貼り付けてもらえれば自動で対象もかわるはずです。 また、右側に購入日・購入金額の列を増やした場合もセルをコピペするだけで自動で対象も移ります。 まあ、これは右側の表である程度、手動でやっていく場合ですね。 複数回購入してる人やその日付まで自動で抜き出すとなると、数式ではできないことはないと思いますが、ま~管理がかなり面倒になると思いますよ? うっかり数式を壊した日には目も当てられない(^_^; それに表まで自動で作成となるとVBAを使うしかないでしょうね。 もしそれぞれの人が購入した日付と金額が知りたいだけということなら、ピボットテーブルを勉強した方が楽だと思いますよ。

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

これは、エクセルの「表の組み換え」に当たるタイプの課題で、こういうタイプの課題は エクセルの関数を使っては、難しい(式が複雑になる。手法のアイデアも、天下り的学習しかない)のだ。それを知らないで、質問が時々あるがエクセル関数の最上級の問題です。 手操作でも、この機能は備わってないと思う。 ーー 例えば、掲載例の、Gさんの第2、第3の出現行を捉えて、望みのデータ列を持ってくる、という課題が、要点になると思う。 下記WEB記事など見て、理解できる力があれば、読んで、応用してやってみたら。 判らなくても、今後出る回答をコピペして済まそうというなら回答を待てばよい。 https://nyanto.jimdofree.com/%EF%BD%B4%EF%BD%B8%EF%BD%BE%EF%BE%99%E9%96%A2%E6%95%B0-%E8%AA%AC%E6%98%8E/index-match%E9%96%A2%E6%95%B0%E3%81%A7%E6%9D%A1%E4%BB%B6%E3%81%AB%E5%90%88%E3%81%A3%E3%81%9F%E8%A1%8C%E3%81%AE%E5%80%A4%E3%82%92%E6%8A%9C%E3%81%8D%E5%87%BA%E3%81%99%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%BF%E3%81%84%E6%96%B9/index-match%E9%96%A2%E6%95%B0%E3%81%A7%EF%BC%92%E7%95%AA%E7%9B%AE-%EF%BC%93%E7%95%AA%E7%9B%AE%E4%BB%A5%E9%99%8D%E6%8A%BD%E5%87%BA2/ INDEX+MATCH関数で2、3番目以降の値を抽出する方法|計算式の解説 ーーー まず、初心h寒気でないのは、「配列数式」と言う仕組みを使っていること。 複雑で、誤りなきよう神経を使い、作成に時間がかかる課題で、初心者向けの解説文の作成にも、時間がかかるので、やる気がしない。 中間データ列を作って考えれば少しわかりやすいかもと推測する。 == 小生なら、ソートやFindなどが使えて、また表データを自由に作れるVBAを使いたい。 重複なき氏名のリストが必要になると思うが、 氏名列で重複のないデータの出し方だけ参考に。マクロの記録を使える。 関数でやるとなると式が複雑。 Sub Macro1() Range("A1:A10").Select ’氏名列について Range("A1:A10").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _ "H1:H10"), Unique:=True ’結果はH列に出す End Sub これらの氏名データについて、同行の右列に、第2(第3)の購買日付、金額の列セットをを並べていくことを考えればよい。 ーー 初めに、氏名列でデータをソートしておくと、同じ氏名分は、行的に、塊る(かたまる)ので、後は作表は難しくはない。

  • f272
  • ベストアンサー率46% (8472/18136)
回答No.1

右のような形式のデータは取り扱いが面倒になりますよ。人によって何回購入しているかもバラバラでしょうし無駄に横長になります。 左の形式のデータの氏名で整列させれば、各人が何回購入したかも分かりやすくなります。そういう方向で再考すべきですね。

関連するQ&A