Board logo

標題: [發問] (已解決)如何擷取不同類別代號的最後一筆資料 [打印本頁]

作者: freeffly    時間: 2011-4-22 12:08     標題: (已解決)如何擷取不同類別代號的最後一筆資料

本帖最後由 freeffly 於 2012-2-22 17:21 編輯

[attach]5735[/attach]

我想要擷取不同類別代號的最後一筆資料。
目前使用的方式如附加檔內所示,有沒有方法可以不用經過步驟一及步驟二直接得到結果資料?
作者: ANGELA    時間: 2011-4-22 12:41

I2=OFFSET($A$1,MAX(IF(LEFT($A$2:$A$975,2)=F2,ROW($1:$974),0)),)
陣列公式
作者: Hsieh    時間: 2011-4-22 23:03

回復 2# ANGELA

這樣還是要先取出代號清單
如果要一欄搞定,希望EXCEL能負荷得了
I2陣列公式
=IF(ROW(A1)>SUM(1/COUNTIF($A$2:$A$975,"="&LEFT($A$2:$A$975,2)&"*")),"",INDIRECT("A"&SMALL(IF(LEFT($A$2:$A$975,2)<>LEFT($A$3:$A$976,2),ROW($A$2:$A$975),""),ROW(A1))))
作者: freeffly    時間: 2011-4-23 15:11

回復 2# ANGELA


    雖然一樣要提取列號清單也看到不一樣的方法,謝謝版主回復
作者: freeffly    時間: 2011-4-23 15:14

回復 3# Hsieh


    這個方法的確是可以一欄搞定
   對excel的負荷也挺大
   謝謝大大回復,也看到不同的思考方式
作者: ANGELA    時間: 2011-4-25 14:03

回復 3# Hsieh


    粗心大意,一直是我的致命傷,從小到大都改不了,謝謝指導,此題應改為
    =INDEX(A:A,SMALL(IF(RIGHT($A$3:$A$976,3)<=RIGHT($A$2:$A$975,3),ROW($A$2:$A$975),1000),ROW(A1)))&""
   一般我比較慣用INDEX
作者: gong    時間: 2011-4-25 14:11

哈哈!
我有看到,不是偷笑,是因為我也是一樣

對excel太有把握,常把公式一拉就交了
問題是中間的數字有可能是文字型無法加總
有可能是位置點錯,如應點a1/a20,可是手誤成a2/a2,讓數字異常
讓主管無法信賴,
除了速度外還要正確才是正道
作者: ANGELA    時間: 2011-4-25 14:28

哈哈,
被老師k頭了,原來只要是人都難免犯錯.
作者: freeffly    時間: 2011-4-25 21:27

回復 6# ANGELA


    這各方式的確是可以一欄搞定
   好像也沒造成excel很大負荷
   不過還要花點時間消化一下公式
   謝謝喔!
作者: Andy2483    時間: 2023-5-18 13:28

謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA陣列語字典,學習方案如下,請各位前輩指教

執行前:
[attach]36381[/attach]

執行結果:
[attach]36382[/attach]


Option Explicit
Sub TEST()
Dim Brr, V, Y, R&, i&, T$, M%, K%
'↑宣告變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y變數是 字典
Brr = Range([A1], Cells(Rows.Count, "A").End(xlUp))
'↑令Brr變數是 二維陣列,以A欄儲存格值帶入陣列中
For i = 2 To UBound(Brr)
'↑設順迴圈
   T = Left(Brr(i, 1), 2)
   '↑令T變數是左邊2字的字串
   K = Right(Brr(i, 1), 3)
   '↑令K變數是右邊3字轉為數值(因為K宣告是數值)
   M = Y(T)
   '↑令M變數是T變數查Y字典得到item,
   '一開始Y字典裡沒有此key時,item是初始值轉整數=0,
   '因為M宣告是整數值

   If M < K Then M = K
   '↑這是要比較出最大值
   Y(T) = M
   '↑令以T變數當key,item是當下的最大值放回字典
Next
For Each V In Y.KEYS
'↑設逐項迴圈!令V變數是 Y字典的key
   R = R + 1
   '↑令R變數累加 1
   Brr(R, 1) = V & Format(Y(V), "000")
   '↑令以組合字串(結果資料)覆蓋掉原Brr陣列值,
   '畢竟Brr的原資料已經用不到了,
   '如此就不必再設一個陣列裝結果資料
   '但是需要準確的知道結果資料到陣列的哪一列,如R變數或Y.Count

Next
[J2].Resize(Y.Count, 1) = Brr
'↑令Brr局部資料(結果資料)寫入儲存格中,超過此範圍的Brr陣列值忽略
Set Y = Nothing: Erase Brr
'↑令釋放變數
End Sub




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)