InStrRev () проблемы - PullRequest
       6

InStrRev () проблемы

0 голосов
/ 02 марта 2012

Я пытаюсь написать цикл Do, который входит в длинную строку и возвращает место пробела перед адресом электронной почты и место пробела после.Используя InStr (), я смог найти конец адреса электронной почты.Теперь мне нужно найти начало, а затем использовать Mid (), чтобы вытащить адрес.Я вижу, что InStrRev () должен начинаться в конце строки, а затем искать, но, глядя на реальные руководства, кажется, что он просто дает второй экземпляр символа.Например:

Моя строка:

пожалуйста, напишите мне по электронной почте.Мой E-Mail: fake@gmail.com Если вы не можете это сделать, позвоните мне.

То, что я сделал до сих пор, возвращает место символа @, в данном случае 42. Затем я использовал InStr (), чтобы вернуть место первого "" после символа @.В данном случае это 52. Я хочу вернуть место первого "" ДО @.В этом случае должно быть 37. Мой план - использовать Mid (37, 15).Пятнадцать - разница 52 и 37. Я пытался использовать InStrRev (), чтобы вернуть 37, но не могу заставить его работать.Какие-либо предложения?ниже мой код.

x = 2

Do

Cells(x, 11).Select
Cells(x, 11).Value = (InStrRev(Cells(x, 9), Cells(x, 2), " "))

x = x + 1

On Error Resume Next

Loop Until Cells(x, 2).Value = ""

Где (x, 9) - место символа @, а (x, 2) - строка.

Ответы [ 3 ]

7 голосов
/ 02 марта 2012

или, может быть, все, что вам нужно, это адрес электронной почты:

Function GetEmail(longstr As String) As String

GetEmail = Filter(Split(longstr, " "), "@")(0)

End Function

Как правило, в Excel следует избегать зацикливания, так как он медленный, ниже будет делать то, что ваш код делает без цикла:

Columns(12).Cells(1).Resize(Columns(11).Cells(2).End(xlDown).Row - 1, 1).Offset(1).Value = _
            Application.Transpose(Filter(Split(Join(Application.Transpose(Columns(11).Value), " "), " "), "@"))
3 голосов
/ 02 марта 2012
' Find the @ symbol
Dim atPosition As Integer
atPosition = InStr(cellValue, "@")
' check if found here

' Find the space after the @
Dim secondSpacePosition As Integer
secondSpacePosition = InStr(atPosition, cellValue, " ")
' check if found here

' Find the space before the @
Dim firstSpacePosition As Integer
firstSpacePosition = InstrRev(cellValue, " ", atPosition) '  beware, the arguments differ a little
' check if found here

Dim email As String
email = Mid(cellvalue, firstSpacePosition + 1, secondSpacePosition - firstSpacePosition - 1)
3 голосов
/ 02 марта 2012

Как насчет:

MyArray = Split(Mystring," ")

For i=0 To Ubound(MyArray)
   If Instr(MyArray(i)),"@")>0 Then
       ''Email
   End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...