Excel VBA - извлечь текст из 2 символов - PullRequest
6 голосов
/ 03 сентября 2011

Если бы у меня был этот столбец:

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

Ответы [ 3 ]

22 голосов
/ 03 сентября 2011

Вы можете использовать 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 голос
/ 06 октября 2015

Если строка «Значение A равно [1.0234], а Значение B равно [3.2345]»

Если вы хотите извлечь значение B , то есть 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
0 голосов
/ 02 декабря 2018

Если у меня есть таблица огурцов в качестве тестовых данных в ячейке, и мне нужно получить доступ к значению в «Заголовке 1» между 4-м и 5-м трубами, ниже описано, как я это сделал. Мой пример таблицы, как показано ниже в ячейке D7:

* Ячейка D7:

enter image description here

код для доступа к 'abcd', который обнаруживается после 4-го вхождения '|' и до 5-го появления '|'

Dim sheet5 As Worksheet
Dim i As Integer
Dim k As Integer
Dim openPos As Long
Dim clsPos As Long
Dim textBetween as String

'Using for loop to find 4th occurrence of pipe '|' for openPos
For i = 1 To 4
openPos = InStr(openPos + 1, sheet5.Range("D7"), "|", vbTextCompare)
Next i

'Using for loop to find 5th occurrence of pipe '|' for clsPos
For k = 1 To 5
clsPos = InStr(clsPos + 1, sheet5.Range("D7"), "|", vbTextCompare)
Next k

'Displaying the value between openPos and clsPos
txtBetween = Mid(sheet5.Range("D7").Value, openPos + 1, clsPos - openPos - 1)
MsgBox ("Current Header 1 value: " & txtBetween)

enter image description here

...