![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
お客様の購入情報があり、そのリストの中に購入回数の情報を加えたいと考えています。
A列には「顧客名」があり、上から購入回数が1回目2回目と続いていきます。ただ買った商品が多ければ行は増えます。
例えば鈴木三郎さんは購入回数が3回あります。その判断は「顧客名」と「売上日」から判断しています。鈴木さんの初回購入は2016/04/05で、2016/07/20が2回目購入というような表になっています。鈴木さんは2回目で5つの商品を買っており、それが分かるようにD列に購入回数の番号が振れたらと考えています。
Excelでそれができればと思っています。そのやり方をお教え頂ければ幸いです。
よろしくお願い致します。
![「Excelで顧客の購入情報を元に、購入回」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/0/542665913_5a1fab6756fe9/M.jpg)
No.1ベストアンサー
- 回答日時:
こんばんは!
>行数が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
No.2
- 回答日時:
行数が多い場合には、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](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/3/542340841_5a20abfcb3be2/M.jpg)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ゴミ出し・リサイクル 空トナー回収の件 3 2022/11/11 09:54
- その他(開発・運用・管理) マイクロソフト製品のライセンス販売で困ってます 1 2022/06/30 19:52
- その他(買い物・ショッピング) 初回登録系のクーポンって家族1人ずつ登録して利用する分には不正扱いにはならないですよね? タワレコの 1 2023/08/11 13:57
- 債券・証券 仕組債(EB債)の問題点は回転売買での手数料の搾取とノックインで胴元総取りの2つの罠ですか? 4 2023/03/17 20:24
- ネットスーパー ネットショッピングでお一人様2点までの商品で3点以上購入したキャンセルされる。 同アカウントで1回目 2 2022/07/02 12:09
- アクセサリ・腕時計 ロレックスの腕時計は値下がりしないって本当ですか? 10 2022/04/18 07:01
- 据え置き型ゲーム機 PS4のハンコンについて 4 2022/05/25 23:16
- ガーデニング・家庭菜園 畑の土の改良用の牛糞堆肥について 1 2022/08/03 14:16
- Amazon Amazonの代引について 1 2023/08/01 17:32
- メガネ・コンタクト・視力矯正 コンタクトの度数について。 2ヶ月ほど前に眼科で視力検査のもと、乱視用ワンデーを購入しました。 その 2 2022/04/20 11:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELの散布図で日付が1900年に...
-
エクセルのツールバーから数値...
-
祝日と土曜、日曜の合計をカウ...
-
Excel分数の表示について
-
特定の文字列を含む、住所を抽...
-
Excelについての質問です。 B2...
-
文字2桁、3桁交じりの文字列...
-
Excelで表を作ったところに文字...
-
【マクロ】2回実行したら、エ...
-
【EXCEL】画像の黄色部分の抽出...
-
マイクロソフトのPADを使ってい...
-
絶対参照
-
マクロエクセルのブロック解除
-
在庫管理表に使うエクセルの関...
-
Excelピボットテーブルの1行目
-
エクセルのクイックアクセスツ...
-
DATE関数で現在の年齢を出した...
-
ユーザー定義関数をアドイン登...
-
職場の人から聞かれており、こ...
-
【マクロ】毎回、ファイル名が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
半角カタカナをヘボン式ローマ...
-
(マクロ)vlookupの元データを同...
-
エクセルで上位バイトのセルと...
-
exselの質問です
-
Excel 大小比較演算子による「...
-
Excel VBについての質問です。
-
エクセルの問題です。絶対値の...
-
非表示列の再表示に失敗
-
職場の人から聞かれており、こ...
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
ユーザー定義関数をアドイン登...
-
【マクロ】for next構文について
-
エクセルの日付を編集する
-
【マクロ】VLOOKUPにて参照元に...
-
exselで最小数で並び替える関数
-
libre 表計算ソフトの計算がう...
-
エクセルで表
-
エクセルの表で1年間の曜日を...
-
西暦和暦
おすすめ情報
行数が10,000以上あるので、関数を使って自動で処理できたらと考えています。よろしくお願い致します。(画像の購入回数部分は分かりやすくするために、手入力で入れたものです)