excel vba - конвертировать iferror / find формулу в vba - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть следующая формула Excel

IFERROR(MID(B7;FIND(" ";B7)+1;1);"")

Я хочу преобразовать это сейчас в VBA, но у меня проблемы с интеграцией функции Find здесь. Это то, что у меня пока есть

IfError(Mid(Sheets("MySheet").Cells(x, 7),Sheets("MySheet").Cells(x, 7).Find " " + 1, 1), "")

Но это явно не правильно. Может ли кто-нибудь помочь мне с этим?

Ответы [ 3 ]

3 голосов
/ 09 апреля 2020

Нечто подобное, называется get_first_char_after_space("testing xys")

Function get_first_char_after_space(strInput As String) As String

If InStr(1, strInput, Chr(32)) > 0 Then
    get_first_char_after_space = Left(Split(strInput, Chr(32))(1), 1)
Else
    get_first_char_after_space = vbNullString
End If

End Function
0 голосов
/ 09 апреля 2020

Вот UDF для выполнения функции вашего рабочего листа. Как видите, ошибки можно избежать в VBA. Я предполагаю, что вся функция может быть сжата в одну строку, но все преимущества, которые это может принести, могут быть достигнуты за счет читабельности и, возможно, стабильности. Как это, код очень надежный. Он легко переходит в более крупный проект, поскольку, без сомнения, это ваше намерение.

Function NextChar(Cell As Range) As String
    ' IFERROR(MID(B7;FIND(" ";B7)+1;1);"")

    Dim Txt As String
    Dim n As Integer

    Txt = Cell.Value
    n = InStr(Txt, " ")
    If n Then NextChar = Mid(Txt, n + 1, 1)
End Function

При вызове с рабочего листа функция будет =NextChar(B7). Вызывается из кода это будет Debug.Print NextChar(Sheet1.Cells(7, 2))

0 голосов
/ 09 апреля 2020

Вы можете найти решение для IFERROR в следующем вопросе SO: { ссылка }.

И VBA имеет метод Range.Find, который можно использовать для замены формулы FIND. Ссылка на документацию: https://docs.microsoft.com/en-us/office/vba/api/excel.range.find

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...