電子書籍の厳選無料作品が豊富!

お客様の購入情報があり、そのリストの中に購入回数の情報を加えたいと考えています。
A列には「顧客名」があり、上から購入回数が1回目2回目と続いていきます。ただ買った商品が多ければ行は増えます。

例えば鈴木三郎さんは購入回数が3回あります。その判断は「顧客名」と「売上日」から判断しています。鈴木さんの初回購入は2016/04/05で、2016/07/20が2回目購入というような表になっています。鈴木さんは2回目で5つの商品を買っており、それが分かるようにD列に購入回数の番号が振れたらと考えています。

Excelでそれができればと思っています。そのやり方をお教え頂ければ幸いです。
よろしくお願い致します。

「Excelで顧客の購入情報を元に、購入回」の質問画像

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

  • 行数が10,000以上あるので、関数を使って自動で処理できたらと考えています。よろしくお願い致します。(画像の購入回数部分は分かりやすくするために、手入力で入れたものです)

      補足日時:2017/11/30 18:13

A 回答 (2件)

こんばんは!



>行数が10,000以上あるので・・・

関数でやるにしても配列数式などを駆使する必要があると思います。
(関数で出来るかどうか判りませんが・・・考える気力がありません)

そうなるとデータ数が極端に多い場合は計算速度が落ちますので、手っ取り早くVBAでの一例です。

↓のコードを標準モジュールでもシートモジュールでも良いので、コピー&ペーストしてマクロを実行してみてください。

Sub Sample1()
Dim myDic1 As Object, myDic2 As Object
Dim myStr As String, myR
Dim i As Long, lastRow As Long, cnt As Long

Set myDic1 = CreateObject("Scripting.Dictionary")
Set myDic2 = CreateObject("Scripting.Dictionary")
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(Cells(2, "A"), Cells(lastRow, "D"))
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) & "_" & myR(i, 2)
If Not myDic1.exists(myR(i, 1)) Then
myDic1.Add myR(i, 1), 1
myDic2.Add myStr, 1
cnt = 0
Else
If Not myDic2.exists(myStr) Then
cnt = cnt + 1
myDic2.Add myStr, myDic1(myR(i, 1)) + cnt
End If
End If
Next i
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) & "_" & myR(i, 2)
myR(i, 4) = myDic2(myStr)
Next i
Range(Cells(2, "A"), Cells(lastRow, "D")) = myR
Set myDic1 = Nothing
Set myDic2 = Nothing
MsgBox "完了"
End Sub

※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。
※ 細かい検証はしていませんので
お望み通りにならなかったらごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

ご連絡遅くなりました。頂いたコードで出来ました。ありがとうございます。

お礼日時:2017/12/02 09:45

行数が多い場合には、Excelの自動再計算時間が膨大になってしまいます。


オプションで手動再計算に切り替えて作業することにしても、再計算の終了までに
時間が掛かります。 (マクロでやった方が、速いと思います)
仮に次の表でやりました  
顧客名 A$2:A$12383
売上日 $B$2:$B$12383
(顧客名毎に行が並んでいる & 売上日毎に行が並んでいる)という前提です。

① 1日の買い物は、行数にかかわらず1回とカウントするならば
D2には次の式 
=SUM(IF(FREQUENCY(INDIRECT("B"&(1+MATCH($A2,$A$2:$A$12383, 0))):B2,INDIRECT("B"&(1+MATCH($A2,$A$2:$A$12383, 0))):B2)>0,1))
この式を最終行までドラッグコピー
② (1行は買い物1回である)とカウントする前提ならば
②-1 同日の買い物には、その日までの累計買い物数(合計行数)を表示させる
D2には次の式
=ROW()-MATCH($A2,$A$2:$A$12383, 0)+SUMPRODUCT(($A$2:$A$12383=$A2)*($B$2:$B$12383=$B2))-SUMPRODUCT((($A$2:$A2=$A2)*($B$2:$B2=$B2)))
この式を最終行までドラッグコピー
②-2 単純に各行に買い物数の累計を表示させる
D2には次の式
=ROW()-MATCH(A2,A$2:A$12383, 0)
この式を最終行までドラッグコピー

3つの種類の計算を並べたもの
「Excelで顧客の購入情報を元に、購入回」の回答画像2
    • good
    • 0
この回答へのお礼

お教え頂きありがとうございます。詳しい解説参考になりました。

お礼日時:2017/12/02 09:46

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