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

いつもお世話になります。
よろしくお願いいたします。

3600件の購入データがあります。
ピポットテーブルで購入者名だけで購入件数を調べることができました。

そこで元々のデータから10件以上購入された顧客データだけを抽出したいのですが可能でしょうか?

できそうな感じなんですが…全然できません。
エクセル2010を利用しています。

質問者からの補足コメント

  • すみません、完全にご質問の内容が希薄でした。

    A列に名前が並んでいます。
    B列にはこれまでの数年間のその顧客の注文件数の累計が記載されています。

    したがって、
    A B
    鈴木 850 花
    鈴木 850 靴下
    鈴木 850 傘
    鈴木 850 電池
    山田 450 …
    山田 450 …
    山田 450 …
    池田 300 …
    池田 300 …

    と並んでいます。
    B列でソートかけています。

    1列加えてなにか関数を入れて、それに該当したやつだけをフィルターで抽出できたらいいなとは思ったんですが、、、、、
    鈴木さんなら鈴木さんの全行が表示されてほしいんですよね。

    すみません。
    お手数おかけします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/06/07 13:41

A 回答 (3件)

何度もごめんなさい。



>鈴木さんなら鈴木さんの全行が表示されてほしいんですよね
を見逃していました。
No.2は無視してください。

今回も作業用の列を使いますが、Sheet2に結果を表示するようにしました。
Sheet1の作業列D2セルは
=IF(COUNTIF(A:A,A2)>=10,ROW(),"")

という数式に変更してください。

そしてSheet2のA2セルに
=IFERROR(INDEX(Sheet1!A:A,SMALL(Sheet1!$D:$D,ROW(A1))),"")

という数式を入れフィルハンドルで列・行方向にコピーしています。m(_ _)m
「エクセルで購入件数の多い顧客だけ抽出した」の回答画像3
    • good
    • 0
この回答へのお礼

すごいです!できました!

全然理解できないんですが、バッチリでてきました。
ありがとうございます、助かりました!

お礼日時:2018/06/07 16:46

No.1です。



>1列加えてなにか関数を入れて・・・
というコトなので、今回は関数での方法にしてみました。
やり方だけです。
↓の画像ではD列を作業用の列として使っています。
作業列D2セルに
=IF(AND(COUNTIF(A:A,A2)>=10,COUNTIF(A$2:A2,A2)=1),ROW(),"")

とい数式を入れフィルハンドルでダブルクリック!またはこれ以上データはない!という位まで下へフィル&コピーしておきます。

結果のF2セルに
=IFERROR(INDEX(A:A,SMALL(D:D,ROW(A1))),"")

という数式を入れフィルハンドルで下へコピーしています。

※ A列データはバラバラで構いません。
※ 作業列が目障りであれば
遠く離れた列にするか、非表示にしてください。m(_ _)m
「エクセルで購入件数の多い顧客だけ抽出した」の回答画像2
    • good
    • 0

こんにちは!



作業用の列を使えば関数で簡単にできそうですが、
VBAでやっていました。

具体的な配置が判らないので、
A列に購入のたびに顧客名をどんどん入力しているとします。
(要するにA列に10回以上出現するデータのみを別列に表示する)
表示するのはG列とします。

Sub Sample1()
Dim myDic As Object
Dim i As Long, lastRow As Long
Dim myKey, myR

Set myDic = CreateObject("Scripting.Dictionary")
Range("G:G").ClearContents
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(Cells(1, "A"), Cells(lastRow, "A"))
For i = 1 To UBound(myR, 1)
If WorksheetFunction.CountIf(Range("A:A"), myR(i, 1)) >= 10 Then
If Not myDic.exists(myR(i, 1)) Then
myDic.Add myR(i, 1), ""
End If
End If
Next i
myKey = myDic.keys
For i = 0 To UBound(myKey)
Cells(i + 1, "G") = myKey(i)
Next i
Set myDic = Nothing
End Sub

こんな感じではどうでしょうか?m(_ _)m
この回答への補足あり
    • good
    • 1
この回答へのお礼

ありがとうございます。

せっかくおしえていただきましたが、マクロほとんどわかりませんで動きませんでした。
マクロはできません、って最初にお伝えするべきでしたよね。
本当にすみませんでした。


顧客名がT列に入っているので、"A"を"T"にかえてみましたが…

Sub Sample1()
Dim myDic As Object
Dim i As Long, lastRow As Long
Dim myKey, myR

Set myDic = CreateObject("Scripting.Dictionary")
Range("G:G").ClearContents
lastRow = Cells(Rows.Count, "T").End(xlUp).Row
myR = Range(Cells(1, "T"), Cells(lastRow, "T"))
For i = 1 To UBound(myR, 1)
If WorksheetFunction.CountIf(Range("T:T"), myR(i, 1)) >= 10 Then
If Not myDic.exists(myR(i, 1)) Then
myDic.Add myR(i, 1), ""
End If
End If
Next i
myKey = myDic.keys
For i = 0 To UBound(myKey)
Cells(i + 1, "G") = myKey(i)
Next i
Set myDic = Nothing
End Sub

お礼日時:2018/06/07 13:24

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