2011-09-03 30 views
5

Nếu tôi có cột này:trội chiết xuất văn bản vba- giữa 2 nhân vật

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

Tôi cần một hàm VBA rằng sẽ đi (chú ý những bắt đầu và chuỗi cuối sẽ chỉ bao giờ xuất hiện một lần trong một tế bào):

extract_val (ô, start_str, end_str)

ie. extract_val (A1, "(", ")") và cho kết quả:

8,3 
20 

Tôi chỉ cần sử dụng chức năng này trong mã VBA khác không bằng cách đặt nó như là một công thức trên bảng.

CẬP NHẬT (nhờ vào các câu trả lời, tôi giải quyết trên :)

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

Bạn có thể muốn làm cho dòng closePos bắt đầu ở vị trí mà nó tìm thấy openPos, nếu không bạn có thể tìm thấy một khung đóng TRƯỚC KHI mở khung, nhưng cho ví dụ của bạn điều này là không thể. – harag

+0

gợi ý hơi phạm vi: http://stackoverflow.com/questions/2757477/trap-error-or-resume-next –

Trả lời

15

Bạn có thể sử dụng instr để xác định vị trí một nhân vật trong chuỗi (trở về vị trí của '(' ví dụ). Sau đó, bạn có thể sử dụng mid để trích xuất một trạm biến áp, sử dụng các vị trí của '('')'.

Giống như (từ bộ nhớ):

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) 

Bạn có thể muốn thêm kiểm tra lỗi trong trường hợp những ký tự không xảy ra trong chuỗi.

1

Nếu chuỗi là “Giá trị của A là [1,0234] và giá trị của B là [3,2345]”

Nếu bạn muốn trích xuất các giá trị của B tức, 3,2345, sau đó

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 
Các vấn đề liên quan