作者joshjetly ( )
看板Office
标题Re: [算表] VBA 选取一列中含特定字元最末资料
时间Mon Sep 4 18:56:13 2017
※ 引述《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://webptt.com/cn.aspx?n=bbs/Office/M.1504430247.A.5A6.html
1F:→ soyoso: 回圈於范围,instr判断储存格内包含"["或"(",大於0时回传 09/03 17:36
2F:→ soyoso: 该储存格文字,後离开回圈exit 09/03 17:37
3F:→ soyoso: 数字方面如该栏都为数字,而要找出最後一笔有值的话,可以 09/03 17:39
4F:→ soyoso: range.end或range.end.row 09/03 17:40
5F:→ soyoso: 如该栏不一定都为数字,可以isnumeric,但因()有可能也会 09/03 17:46
6F:→ soyoso: 被判断为数字,可配合instr为0排除;另也可以vartype或 09/03 17:47
7F:→ soyoso: typename(range.value) 09/03 17:48
8F:→ soyoso: 回圈部分则是以反序step负值的方式 09/03 17:48
9F:→ joshjetly: 感谢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://webptt.com/cn.aspx?n=bbs/Office/M.1504522575.A.263.html
11F:→ soyoso: 传0而回传[7] 09/04 19:04
13F:→ joshjetly: 感谢so大,这是在下做的,是 Excel 版本的关系吗? 09/04 19:26
14F:→ soyoso: 因公式所在储存格a1为第1列内,counta(1:1)会有循环参照 09/04 19:37
15F:→ soyoso: 可将公式调整到其他储存格(非1:1第1列内)或counta内的储存 09/04 19:38
16F:→ soyoso: 格,不要包含公式所在储存格,试试 09/04 19:38
17F:→ joshjetly: 感谢so大,已将范围参数修改 09/05 13:51
18F:→ joshjetly: FindLast(ByRef RngStart As Rang... 09/05 13:52
19F:→ joshjetly: Set RngWork = Range(RngStart, RngStart.End(xlToRigh 09/05 13:53
20F:→ joshjetly: t)) 09/05 13:54
21F:→ joshjetly: 测试後可正常运作,感激不尽! 09/05 13:55