Добрый день, уважаемые Форумчене! Прошу помочь с решением проблемы: Есть реестр платежей из него нужно вытащить 10 значный лицевой счет и вставить в правую ячейку.
Добрый день, уважаемые Форумчене! Прошу помочь с решением проблемы: Есть реестр платежей из него нужно вытащить 10 значный лицевой счет и вставить в правую ячейку.BNPYC
Это формула массива. Вводится она одновременным нажатием Контрл Шифт Ентер. И работать будет только в случае, если у Вас л/с не начинается с кучи нулей (вот такого л/с 0000250200 быть не должно), а р/с наоборот, начинается с кучи нулей (вот такого р/с 900000555588 быть не должно). Если у Вас всегда именно так, то все нормально. Если нет, то отпишитесь и приведите примеры.
Это формула массива. Вводится она одновременным нажатием Контрл Шифт Ентер. И работать будет только в случае, если у Вас л/с не начинается с кучи нулей (вот такого л/с 0000250200 быть не должно), а р/с наоборот, начинается с кучи нулей (вот такого р/с 900000555588 быть не должно). Если у Вас всегда именно так, то все нормально. Если нет, то отпишитесь и приведите примеры._Boroda_
BNPYC, добрый вечер ,вариант с функцией zzz в столбце F
[vba]
Код
Function zzz(t$) Dim i& For i = Len(t) - 9 To 1 Step -1 If Mid$(t, i, 10) Like String(10, "#") Then zzz = Mid$(t, i, 10): Exit Function Next zzz = "" End Function
[/vba]
BNPYC, добрый вечер ,вариант с функцией zzz в столбце F
[vba]
Код
Function zzz(t$) Dim i& For i = Len(t) - 9 To 1 Step -1 If Mid$(t, i, 10) Like String(10, "#") Then zzz = Mid$(t, i, 10): Exit Function Next zzz = "" End Function
sv2014, Спасибо! Только если я ячейке нет лицевого счета(такое встречается), она берет расчетный счет (11 знаков) копирует 10 знаком и вставляет это 10е число.
sv2014, Спасибо! Только если я ячейке нет лицевого счета(такое встречается), она берет расчетный счет (11 знаков) копирует 10 знаком и вставляет это 10е число.BNPYC
Сообщение отредактировал BNPYC - Суббота, 23.01.2016, 15:09
Function Мяу$(r As Range) Dim objRegExp As Object Set objRegExp = CreateObject("VBScript.RegExp") objRegExp.Pattern = "(?:^|\D)(\d{10})(?:$|\D)" If objRegExp.test(r(1).Value) Then Мяу = objRegExp.Execute(r(1).Value)(0).SubMatches(0) End If End Function
[/vba] Вытягивает первое десятизначное число. Запись вида №1234567890 не помеха.
Поразмялся регулярками [vba]
Код
Function Мяу$(r As Range) Dim objRegExp As Object Set objRegExp = CreateObject("VBScript.RegExp") objRegExp.Pattern = "(?:^|\D)(\d{10})(?:$|\D)" If objRegExp.test(r(1).Value) Then Мяу = objRegExp.Execute(r(1).Value)(0).SubMatches(0) End If End Function
[/vba] Вытягивает первое десятизначное число. Запись вида №1234567890 не помеха.RAN
RAN, Спасибо! Я только начал изучать VBA, много не понимаю. Результат почему-то не видит функция ВПР, а после формулы массива, написанной уважаемой Pelena ВПР работает
RAN, Спасибо! Я только начал изучать VBA, много не понимаю. Результат почему-то не видит функция ВПР, а после формулы массива, написанной уважаемой Pelena ВПР работает BNPYC
Дело в том, что результат выводится в виде текста, а у Лены - в виде числа. А Вы, судя по всему, ищете ВПР-ом именно числовое значение. Есть много вариантов решения, один из простейших - если Вы напишете не
Дело в том, что результат выводится в виде текста, а у Лены - в виде числа. А Вы, судя по всему, ищете ВПР-ом именно числовое значение. Есть много вариантов решения, один из простейших - если Вы напишете не
RAN, добрый вечер,у Вас в функции довольно удачный паттерн( шаблон),вот более короткая версия Вашей функции в столбце H [vba]
Код
Function Мяу1$(r As Range) With CreateObject("VBScript.RegExp"): .Pattern = "(?:^|\D)(\d{10})(?:$|\D)" If .test(r(1).Value) Then Мяу1 = .Execute(r(1).Value)(0).SubMatches(0) End With End Function
[/vba]
RAN, добрый вечер,у Вас в функции довольно удачный паттерн( шаблон),вот более короткая версия Вашей функции в столбце H [vba]
Код
Function Мяу1$(r As Range) With CreateObject("VBScript.RegExp"): .Pattern = "(?:^|\D)(\d{10})(?:$|\D)" If .test(r(1).Value) Then Мяу1 = .Execute(r(1).Value)(0).SubMatches(0) End With End Function