Проблема с InStr и Left для возврата правого текста из строки

Я играю с некоторыми кодами IBAN/SWIFT, которые у меня есть в string в Excel VBA, но я хотел бы просто выбрать номер IBAN из строки.

Образцы:
DK4520005010201483 IBAN NDEADKKKXXX
NL24ABNA0424079763 iban ABNANL2A
DE56300700100303808000 IBAN DEUTDEDD

Строка (и) сверху сохраняется в строке iban
Код:

Dim cutDownStr as String, iban as string

cutDownStr = iban
fooStr = Left(cutDownStr, (Len(cutDownStr) - InStr(cutDownStr, " ")))
MsgBox fooStr

4 ответа

Решение

Ваша проблема в том, что ваш код вырезал длину IBAN из всей строки. Вы должны были сократить длину строки ПОСЛЕ IBAN, включая пробел. Вы можете сделать это с:

fooStr = Left(cutDownStr, (Len(cutDownStr) - (Len(cutDownStr) - InStr(cutDownStr, " "))))

Если все, что вам нужно, это подстрока, предшествующая iban, то:

Sub qwerty()
  iban = "DK4520005010201483 IBAN NDEADKKKXXX"
  foostr = Split(iban, " ")(0)
  MsgBox foostr
End Sub

Использование функции

Function findIban(iban as String)
  fooStr = split(iban," ")
  findIban = fooStr(0) 
End Function

использование

Dim cutDownStr as String

cutDownStr = "DK4520005010201483 IBAN NDEADKKKXXX"
fooStr = findIban(cutDownStr)
MsgBox fooStr

InstrRev - классная функция, если ваша строка не очень хорошо разграничена, скажем, в примере, что часть IBAN иногда составляет 10 символов, а иногда 8 символов. InstrRev показывает количество символов (слева), как Instr, но ищет строку справа. При поиске "/" в "/John/Son" результат 6 НЕ 1. Оттуда вы можете использовать правильную функцию.

    Sub IBANiac
    Dim IBAN1, FindIBAN as String
    IBAN1 = "DK4520005010201483 IBAN NDEADKKKXXX"
    findIBAN = right(IBAN1,len(IBAN1)-instrrev(_
    IBAN1,"IBAN ",-1,vbtextcompare))
    msgbox findIBAN
    'May want to add a +-1 to the second part of the right _
    function to account for spacing
    End Sub
Другие вопросы по тегам