2011-09-03 11 views
5

के बीच vba- निकालने पाठ उत्कृष्टता तो मैं इस स्तंभ था:2 वर्ण

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

मैं एक VBA समारोह है कि जाना होगा (इन आरंभ और समाप्ति स्ट्रिंग ही कभी एक सेल में एक बार प्रकट होता ध्यान दें) की जरूरत है:

extract_val (सेल, start_str, end_str)

यानी। extract_val (A1, "(", ")") और परिणाम दे:

8,3 
20 

मैं केवल शीट पर एक सूत्र के रूप में इसके सामने नहीं अन्य VBA कोड के भीतर इस सुविधा का उपयोग करने की आवश्यकता है।

अद्यतन (उत्तर के लिए धन्यवाद, मैं बसे पर :)

--------------------------- 
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

आप अन्यथा आप खुले ब्रैकेट से पहले एक बंद कोष्ठक मिल सकता है स्थिति जहां यह openPos पाया पर शुरू करने के लिए closePos लाइन बनाने के लिए चाहते हो सकता है, है, लेकिन अपने उदाहरण दिए गए इस संभावना नहीं है। – 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

स्ट्रिंग है "एक का मूल्य है [1.0234] और बी का मूल्य है [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 
संबंधित मुद्दे