標題:
[發問]
請問如何將資料轉換成TOP 10
[打印本頁]
作者:
hero007
時間:
2014-10-6 16:24
標題:
請問如何將資料轉換成TOP 10
各位大大好,小弟想將資料依系列分析出商品排名
但研究了幾天並沒有太大的頭緒
不知有沒有好心的大大能協助指教比較適合的作法
謝謝
下圖為來源資料
需求是希望將依商品類別再依商品編號的數量取得前10名或前30名的明細資料
[attach]19298[/attach]
下圖為希望呈現的結果資料
[attach]19299[/attach]
作者:
GBKEE
時間:
2014-10-7 11:28
回復
1#
hero007
試試看
Option Explicit
Sub Ex()
Dim Sh As Worksheet, Rng As Range
With Sheets("TOP10")
Sheets("工作表1").Rows(1).Copy .Range("A1")
.UsedRange.Offset(1) = ""
.Activate
End With
Application.ScreenUpdating = False
Set Rng = Sheets("工作表1").Cells(1, Sheets("工作表1").Columns.Count)
Sheets("工作表1").Range("A:A").AdvancedFilter xlFilterCopy, , Rng, True
'AdvancedFilter(進階篩選): [商品類別]不重複的個項 到 Rng
Rng.Sort Rng, xlAscending, Header:=xlYes 'Sort : 排序
Set Sh = Sheets.Add '這活頁簿中新增工作表
Set Rng = Rng.Offset(1) '下移一列
Do While Rng <> ""
With Sheets("工作表1")
.Range("A1").AutoFilter 1, Rng 'AutoFilter(自動篩選): [商品類別]的準則= Rng
.Range("A:E").Copy Sh.[A1] '自動篩選後的資料複製到新增工作表
End With
With Sh
.Range("A1").AutoFilter Field:=4, Criteria1:="10", Operator:=xlTop10Items
'AutoFilter(自動篩選): [數量] 最大數值的前10項,
'**準則 Criteria1:="15" -> 前15項 ***
.UsedRange.Offset(1).Copy Sheets("TOP10").Range("A" & Sheets("TOP10").Rows.Count).End(xlUp).Offset(1)
'最大數值的前10項複製到Sheets("TOP10")
End With
Set Rng = Rng.Offset(1) '下移一列
Loop
Sheets("工作表1").Cells.AutoFilter
'工作表有自動篩選,在一次的自動篩選,可取消工作表上的自動篩選
Rng.EntireColumn = ""
Application.DisplayAlerts = False
Sh.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
複製代碼
作者:
hero007
時間:
2014-10-7 15:41
先感謝超級版主的提供的方法
小弟正在測試及研究版主的寫法
晚點再回報結果
非常感恩^^
作者:
hero007
時間:
2014-10-7 18:09
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
作者:
GBKEE
時間:
2014-10-8 07:59
回復
4#
hero007
執行階段錯誤 '-2147417848 (80010108)':
參考這裡 試試看
執行階段錯誤 '1004':
參考這裡,加入存檔的程式碼 試試看
你的附檔2003版中執行2#的程式沒有錯誤發生
試試修改看看
With Sheets("工作表1")
.Range("A1").AutoFilter 1, Rng 'AutoFilter(自動篩選): [商品類別]的準則= Rng
'******* 試試看可否在你的Excel環境中解決: 執行階段錯誤 '1004': Class Range的Copy方法失敗
Sh.AutoFilterMode = False
'********
.Range("A:E").Copy Sh.[A1] '自動篩選後的資料複製到新增工作表
End With
複製代碼
作者:
hero007
時間:
2014-10-8 17:20
感謝GBKEE版主的協助呀
目前問題看似都排除囉
讓我看到不同的寫法^^
而我昨日也有嘗試加入"Sh.AutoFilterMode = False"這句語法
也加過延遲幾秒後再執行".Range("A:E").Copy Sh.[A1]"
還是偶發出錯
不過今日好像又都好了,不過保險起見還是保留將篩選取消
非常感謝呀^^
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)