2011-09-03 32 views
5

之间。如果我有此列:擅长vba-提取文本2个字符

ColA 
----- 
NUMBER(8,3) 
NUMBER(20) 

我需要一个VBA函数,它会去(注意,这些启动并在小区边缘串永远只能出现一次):

extract_val(cell,start_str,end_str)

即, extract_val(A1,“(”,“)”)和得到的结果:

8,3 
20 

我只需要通过将其作为在片材上的公式不使用内的其它VBA代码此功能。

UPDATE(感谢答案,我看中了:)

--------------------------- 
Public Function extract_value(str As String) As String 
Dim openPos As Integer 
Dim closePos As Integer 
Dim midBit As String 
On Error Resume Next 
openPos = InStr(str, "(") 
On Error Resume Next 
closePos = InStr(str, ")") 
On Error Resume Next 
midBit = mid(str, openPos + 1, closePos - openPos - 1) 
If openPos <> 0 And Len(midBit) > 0 Then 
extract_value = midBit 
Else 
extract_value = "F" 
End If 
End Function 

Public Sub test_value() 
MsgBox extract_value("NUMBER(9)") 
End Sub 
+1

您可能想要让closePos行从它找到openPos的位置开始,否则您可以在开括号前找到一个闭括号,但考虑到您的示例,这不太可能。 – harag

+0

略微超范围提示:http://stackoverflow.com/questions/2757477/trap-error-or-resume-next –

回答

15

您可以使用instr查找字符串中的字符(返回的'('例如位置)。然后,您可以使用mid来提取子网,使用'('')'的位置。

喜欢的东西(从内存中):

dim str as string 
dim openPos as integer 
dim closePos as integer 
dim midBit as string 

str = "NUMBER(8,3)" 
openPos = instr (str, "(") 
closePos = instr (str, ")") 
midBit = mid (str, openPos+1, closePos - openPos - 1) 

您可能需要添加错误的情况下,这些字符没有在字符串中发生的检查。

1

如果字符串是“A的值是[1.0234]和B的值是[3.2345]”

如果要提取乙即3.2345的值,然后

firstDelPos = InStrRev(textline, “[“) ‘ position of start delimiter 
secondDelPos = InStrRev(textline, “]”) ‘ position of end delimiter 

stringBwDels = Mid(textline, firstDelPos + 1, secondDelPos – firstDelPos – 1) ‘ extract the string between two delimiters 

MsgBox (stringBwDels) ‘ message shows string between two delimiters