• 締切済み

エクセルでのフラグデータの作成

エクセルのデータで 顧客ID |購買商品 A | a A | b A | c B | a B | d C | b C | d C | e … | … こというようなデータを a │ b │ c │ d │ e A │ 1 │ 1 │ 1 │ 0 │ 0 B │ 1 │ 0 │ 0 │ 1 │ 0 C │ 0 │ 1 │ 0 │ 1 │ 1 … というように変換することはできるでしょうか? もしできるならその方法を教えてください!

みんなの回答

回答No.7

No.1さんのピボットテーブルが最初に頭に浮かびますが、まあ数式でもできますね。 No.4さん以外のご回答はいずれも、「個数」を求めています。「有無」を求めるなら、次のようにすればいいです。 ●No.1さんのピボットテーブルとは別の表で、ピボットテーブルで作成した表を参照 =(b5>0)+0 ●各種の関数 =(SUMPRODUCT(($A:$A=$D2)*($B:$B=E$1))>0)+0 =(COUNTIF($C:$C,$D2&E$1)>0)+0 =(COUNTIFS($A:$A,$D2,$B:$B,E$1)>0)+0  …… Excel2007 以後 ※上の 4 式から「+0」を削除し、「=(b5>0)」あるいは単に「=b5>0」という具合にすると、  「1」または「0」ではなく、「TRUE」または「FALSE」の論理値で結果を表示します。  論理値は、四則演算などでいつでも、「1」または「0」に変換されます。 ※上の 4 式中の「+0」は、その代わりに「-0」、「*1」、「/1」、「^1」と書いても構いません。  あるいは、「=--(B5>0)」とか「=n(b5>0)」と書いても、できます。 また No.4さんのように、「IF(数式=0,0,1)」とか「IF(数式>0,1,0)」という形を使っても「有無」を表示できます。

noname#204879
noname#204879
回答No.6

添付図参照 E5: =SUMPRODUCT(($A$2:$A$100=$D5)*($B$2:$B$100=E$4)*1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんばんは! 横からお邪魔します。 No.3さんと同じ方法になりますが、 この際ですので、「顧客ID」と「商品」も一緒に表示するようにしてみました。 作業列を3列設けています。 ↓の画像でSheet1のC2セルに =IF(COUNTIF(A$2:A2,A2)=1,ROW(),"") という数式を入れ隣のD2セルまでオートフィルでコピー! E2セルに =IF(COUNTBLANK(A2:B2),"",A2&"_"&B2) という数式を入れ、C2~E2セルを範囲指定 → E2セルのフィルハンドルで下へずぃ~~~!っとコピーしておきます。 Sheet2のB1セルに =IF(COUNT(Sheet1!$D:$D)<COLUMN(A1),"",INDEX(Sheet1!$B:$B,SMALL(Sheet1!$D:$D,COLUMN(A1)))) という数式を入れ右(列方向)にオートフィルでコピー! Sheet2のA2セルに =IF(COUNT(Sheet1!C:C)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!C:C,ROW(A1)))) という数式を入れ下(行方向)へコピー! これでSheet1の顧客名と商品名が表示されます。 最後にSheet2のB2セルに =IF(OR($A2="",B$1=""),"",COUNTIF(Sheet1!$E:$E,$A2&"_"&B$1)) という数式を入れ、列方向・行方向にオートフィルでコピーすると 画像のような感じになります。m(_ _)m

回答No.4

集計をD列以降に展開するとすれば、 E2: =IF(OR($D2="",E$1=""),"",IF(SUMPRODUCT(($A$1:$A$999=$D2)*($B$1:$B$999=E$1))=0,0,1)) その他、 右、下方向にコピー countifsが使えれば、もう少し判り易くなるでしょう、、、

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

SUMPRODUCTなどの関数はデータ量が多くなると計算に負担がかかります。初歩的かもしれませんが作業列を津ktって対応するのが分かり易く計算にも負担がかかりません。 作業列が目障りでしたら最後にその列を右クリックして「非表示」にすればよいのです。 お示しの表でしたらC2セルには次の式を入力して下方にドラッグコピーします。 =A2&B2 E2セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OR($D2="",E$1=""),"",COUNTIF($C:$C,$D2&E$1))

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

では、定番の関数で。 「別の場所に集計表を作る」考え方です。 セルの位置関係は添付図でご確認くださいませ。 質問文中の下の表(結果)の"A"と"a"がぶつかる位置(図ではE2セル)に式   E2セル:=SUMPRODUCT(($A:$A=$D2)*($B:$B=E$1)) として、下・右に必要分コピー(フィル)。 これで、恐らく集計できます。 おっしゃる「変換する」が、「置き換える」と言う意味であれば、この方法では出来ません。 もう一つ。 これは「存在する数を数える式」です。 「顧客="A"、商品="a"」のデータが2件あったら、「2」を返します。 「存在すればいくつあってもフラグ「1」を立てる」と言う考え方ではありません。

回答No.1

とりあえず、ピボットテーブルを提案してみる 添付図参照 参考まで

関連するQ&A