プロが教える店舗&オフィスのセキュリティ対策術

エクセルのデータで
顧客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

というように変換することはできるでしょうか?

もしできるならその方法を教えてください!

A 回答 (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)」という形を使っても「有無」を表示できます。
    • good
    • 0

添付図参照


E5: =SUMPRODUCT(($A$2:$A$100=$D5)*($B$2:$B$100=E$4)*1)
「エクセルでのフラグデータの作成」の回答画像6
    • good
    • 0

こんばんは!


横からお邪魔します。

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
「エクセルでのフラグデータの作成」の回答画像5
    • good
    • 0

集計をD列以降に展開するとすれば、


E2:
=IF(OR($D2="",E$1=""),"",IF(SUMPRODUCT(($A$1:$A$999=$D2)*($B$1:$B$999=E$1))=0,0,1))
その他、
右、下方向にコピー
countifsが使えれば、もう少し判り易くなるでしょう、、、
    • good
    • 0

SUMPRODUCTなどの関数はデータ量が多くなると計算に負担がかかります。

初歩的かもしれませんが作業列を津ktって対応するのが分かり易く計算にも負担がかかりません。
作業列が目障りでしたら最後にその列を右クリックして「非表示」にすればよいのです。
お示しの表でしたらC2セルには次の式を入力して下方にドラッグコピーします。

=A2&B2

E2セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。

=IF(OR($D2="",E$1=""),"",COUNTIF($C:$C,$D2&E$1))
    • good
    • 0

では、定番の関数で。


「別の場所に集計表を作る」考え方です。


セルの位置関係は添付図でご確認くださいませ。

質問文中の下の表(結果)の"A"と"a"がぶつかる位置(図ではE2セル)に式
  E2セル:=SUMPRODUCT(($A:$A=$D2)*($B:$B=E$1))
として、下・右に必要分コピー(フィル)。

これで、恐らく集計できます。



おっしゃる「変換する」が、「置き換える」と言う意味であれば、この方法では出来ません。


もう一つ。
これは「存在する数を数える式」です。
「顧客="A"、商品="a"」のデータが2件あったら、「2」を返します。
「存在すればいくつあってもフラグ「1」を立てる」と言う考え方ではありません。
「エクセルでのフラグデータの作成」の回答画像2
    • good
    • 0

とりあえず、ピボットテーブルを提案してみる


添付図参照 参考まで
「エクセルでのフラグデータの作成」の回答画像1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!