Re: [算表] VBA 選取一列中含特定字元最末資料

看板Office作者 ( )時間6年前 (2017/09/04 18:56), 編輯推噓0(0012)
留言12則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《joshjetly ( )》之銘言: 軟體: Excel VBA 版本: 2010 各位先進大家好 在下是 VBA 新手 有批好幾頁 每頁接近萬列的資料要整理 每列約有 50~100 個儲存格 資料大致如下 A B C | D E F G H I J K L M | 1 [7] (5) 1 | [3] (4) 13 [2] (2) 7 40 [7] (5) 1 | 2 [2] (4) 9 | [9] (6) 4 [2] (4) 8 5 16 9 | 3 [6] (3) 20 | [6] (5) 1 (8) 3 2 1 (3) 29 20 | 在下希望可以在 A 欄:找出同列中最後筆包含 "[" 的文字 B 欄:找出同列中最後筆包含 "(" 的文字 C 欄:找出同列中最後筆數字 請問該如何用 VBA Function 處理呢? 麻煩各為先進了 感激不盡! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.67.5.101 ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1504430247.A.5A6.html

09/03 17:36,
迴圈於範圍,instr判斷儲存格內包含"["或"(",大於0時回傳
09/03 17:36

09/03 17:37,
該儲存格文字,後離開迴圈exit
09/03 17:37

09/03 17:39,
數字方面如該欄都為數字,而要找出最後一筆有值的話,可以
09/03 17:39

09/03 17:40,
range.end或range.end.row
09/03 17:40

09/03 17:46,
如該欄不一定都為數字,可以isnumeric,但因()有可能也會
09/03 17:46

09/03 17:47,
被判斷為數字,可配合instr為0排除;另也可以vartype或
09/03 17:47

09/03 17:48,
typename(range.value)
09/03 17:48

09/03 17:48,
迴圈部分則是以反序step負值的方式
09/03 17:48

09/04 06:22,
感謝so大,在下先依法試試,有問題再請教
09/04 06:22
各位先進大家好 以下是依法做出的 Function FindLast -------------------- Public Function FindLast(WorkRng As Range, Optional Sign As String) As String Dim Rng As Range For Each Rng In WorkRng If InStr(Rng, Sign) > 0 Then FindLast = Rng.Text End If Next End Function -------------------- 若 A1=FindLast(D1:M1,"[") 可回傳 "[7]" 但若是將 WorkRng 改為 OFFSET($D1,,,,COUNTA(1:1)-3) 則回傳數字 "0" 請問是哪裡出問題呢? 麻煩各為先進了 感激不盡! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.67.231.14 ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1504522575.A.263.html

09/04 19:04, , 1F
https://i.imgur.com/OHXMc4b 測試改為offset(...)並無回
09/04 19:04, 1F

09/04 19:04, , 2F
傳0而回傳[7]
09/04 19:04, 2F

09/04 19:24, , 3F

09/04 19:26, , 4F
感謝so大,這是在下做的,是 Excel 版本的關係嗎?
09/04 19:26, 4F

09/04 19:37, , 5F
因公式所在儲存格a1為第1列內,counta(1:1)會有循環參照
09/04 19:37, 5F

09/04 19:38, , 6F
可將公式調整到其他儲存格(非1:1第1列內)或counta內的儲存
09/04 19:38, 6F

09/04 19:38, , 7F
格,不要包含公式所在儲存格,試試
09/04 19:38, 7F

09/05 13:51, , 8F
感謝so大,已將範圍參數修改
09/05 13:51, 8F

09/05 13:52, , 9F
FindLast(ByRef RngStart As Rang...
09/05 13:52, 9F

09/05 13:53, , 10F
Set RngWork = Range(RngStart, RngStart.End(xlToRigh
09/05 13:53, 10F

09/05 13:54, , 11F
t))
09/05 13:54, 11F

09/05 13:55, , 12F
測試後可正常運作,感激不盡!
09/05 13:55, 12F
文章代碼(AID): #1PhJ5F9Z (Office)
文章代碼(AID): #1PhJ5F9Z (Office)