返回列表 上一主題 發帖

[發問] 請問如何將資料轉換成TOP 10

[發問] 請問如何將資料轉換成TOP 10

各位大大好,小弟想將資料依系列分析出商品排名
但研究了幾天並沒有太大的頭緒
不知有沒有好心的大大能協助指教比較適合的作法
謝謝

下圖為來源資料
需求是希望將依商品類別再依商品編號的數量取得前10名或前30名的明細資料


下圖為希望呈現的結果資料

Test1.zip (66.04 KB)

回復 1# hero007
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Sh As Worksheet, Rng As Range
  4.     With Sheets("TOP10")
  5.         Sheets("工作表1").Rows(1).Copy .Range("A1")
  6.         .UsedRange.Offset(1) = ""
  7.         .Activate
  8.     End With
  9.     Application.ScreenUpdating = False
  10.     Set Rng = Sheets("工作表1").Cells(1, Sheets("工作表1").Columns.Count)
  11.     Sheets("工作表1").Range("A:A").AdvancedFilter xlFilterCopy, , Rng, True
  12.     'AdvancedFilter(進階篩選):  [商品類別]不重複的個項 到 Rng
  13.     Rng.Sort Rng, xlAscending, Header:=xlYes  'Sort : 排序
  14.     Set Sh = Sheets.Add                     '這活頁簿中新增工作表
  15.     Set Rng = Rng.Offset(1)                 '下移一列
  16.     Do While Rng <> ""
  17.         With Sheets("工作表1")
  18.             .Range("A1").AutoFilter 1, Rng  'AutoFilter(自動篩選):  [商品類別]的準則= Rng
  19.             .Range("A:E").Copy Sh.[A1]      '自動篩選後的資料複製到新增工作表
  20.         End With
  21.         With Sh
  22.             .Range("A1").AutoFilter Field:=4, Criteria1:="10", Operator:=xlTop10Items
  23.             'AutoFilter(自動篩選):  [數量] 最大數值的前10項,
  24.             '**準則 Criteria1:="15" -> 前15項 ***
  25.             .UsedRange.Offset(1).Copy Sheets("TOP10").Range("A" & Sheets("TOP10").Rows.Count).End(xlUp).Offset(1)
  26.             '最大數值的前10項複製到Sheets("TOP10")
  27.         End With
  28.         Set Rng = Rng.Offset(1)                '下移一列
  29.     Loop
  30.     Sheets("工作表1").Cells.AutoFilter
  31.     '工作表有自動篩選,在一次的自動篩選,可取消工作表上的自動篩選
  32.     Rng.EntireColumn = ""
  33.     Application.DisplayAlerts = False
  34.     Sh.Delete
  35.     Application.DisplayAlerts = True
  36.     Application.ScreenUpdating = True
  37. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

先感謝超級版主的提供的方法
小弟正在測試及研究版主的寫法
晚點再回報結果
非常感恩^^

TOP

GBKEE 版主
請問一下 我將你的程式碼復製到一個模組後讓他執行
執行幾次迴圈時會在".Range("A:E").Copy Sh.[A1]"這行出現兩種錯誤訊息
第一種:
執行階段錯誤 '-2147417848 (80010108)':
'Copy' 方法 ('Range'物件) 失敗
第二種:
執行階段錯誤 '1004':
Class Range的Copy方法失敗

不太確定是什麼原因造成的?
這行感覺很簡單就是將新增的sheets內的前十筆資料Copy到TOP 10工作表,但有時跑第二次迴圈就出錯,有時跑4~5次才出錯,甚至連錯誤訊息都沒有Excel直接當掉重啟,不知是環境問題造成還是???
電腦環境是
CPU I7-3770S
RAM 16GB
Office 2013

TOP

回復 4# hero007

執行階段錯誤 '-2147417848 (80010108)': 參考這裡 試試看
執行階段錯誤 '1004':  參考這裡,加入存檔的程式碼 試試看
你的附檔2003版中執行2#的程式沒有錯誤發生
試試修改看看
  1. With Sheets("工作表1")
  2.             .Range("A1").AutoFilter 1, Rng  'AutoFilter(自動篩選):  [商品類別]的準則= Rng
  3.             '******* 試試看可否在你的Excel環境中解決: 執行階段錯誤 '1004': Class Range的Copy方法失敗
  4.             Sh.AutoFilterMode = False
  5.             '********
  6.             .Range("A:E").Copy Sh.[A1]      '自動篩選後的資料複製到新增工作表
  7.         End With
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

感謝GBKEE版主的協助呀
目前問題看似都排除囉
讓我看到不同的寫法^^

而我昨日也有嘗試加入"Sh.AutoFilterMode = False"這句語法
也加過延遲幾秒後再執行".Range("A:E").Copy Sh.[A1]"
還是偶發出錯
不過今日好像又都好了,不過保險起見還是保留將篩選取消
非常感謝呀^^

TOP

        靜思自在 : 要比誰更受誰.不要比誰更怕誰。
返回列表 上一主題