Страницы: 1
RSS
Отделить формулой текст от чисел
 
Добрый всем день.    
Данная тема уже обсуждалась но именно в таком разрезе ответа не нашел. Задача такова: есть столбец содержащий значения: несколько букв+несколько цифр. Возможно ли не применяя макросов отделить буквы от чисел и расположить в соседних столбцах ?
Редко но метко ...
 
Почему так макросов боитесь? :)  
Ведь намного проще использовать одну (две) UDF вместо кучи стандартных формул.  
И кстати макросы разрешать не нужно, если UDF в Personal.xls или как у меня в MyFunc.xls:  
 
=MyFunc.xls!ExtractString(A1)  
=MyFunc.xls!ExtractNumber(A1)  
 
А формулы тут в копилке должны быть, или вот, несколько версий:  
 
Function GetNumeric(t As Range)  
Dim j As Integer, l As String  
For j = 1 To Len(t)  
If IsNumeric(Mid(t, j, 1)) Then l = l & Mid(t, j, 1)  
Next j  
GetNumeric = Val(l)  
End Function  
 
Public Function ExtractNumber(S As String)  
Dim i As Integer, str As String  
For i = 1 To Len(S)  
If InStr(1, "1234567890,", Mid(S, i, 1)) <> 0 Then str = str & Mid(S, i, 1)  
Next  
ExtractNumber = str  
End Function  
 
Public Function ExtractString(S As String)  
Dim i As Integer, str As String  
For i = 1 To Len(S)  
If InStr(1, "QWERTYUIOPASDFGHJKLZXCVBNM,.-<>=*/ ", UCase(Mid(S, i, 1))) <> 0 Then str = str & Mid(S, i, 1)  
Next  
ExtractString = Application.Trim(str)  
End Function  
 
Function NumbersOnly(srcStr As String) As String  
Dim objRegEx As Object  
Set objRegEx = CreateObject("VBScript.RegExp")  
   With objRegEx  
       .Global = True  
       .Pattern = "[^0-9,]" '"\D"
       NumbersOnly = .Replace(srcStr, vbNullString)  
   End With  
Set objRegEx = Nothing  
End Function
 
to Hugo  
 
я с макросами не очень дружен, привык както формулами обходится, если формулой никак низя подскажите плз. как вставить пользовательскую функцию в ексель так что бы она была в каждой новой книге и не спрашивала постоянно про включение макросов.
Редко но метко ...
 
Если у Вас ещё нет Personal.xls, то его проще всего создать так - включаете запись макроса, как место сохранения макроса выбираете Personal.xls, записываете простой макрос (например, пишите в А1 что-нибудь). Останавливаете запись.  
Теперь через Alt+F11 заходите в редактор, слева в окне пректов открываете свой Personal.xls, в модуле удаляете свой ненужный макрос, вместо него помещаете текст функций.  
Теперь эти функции доступны в любой книге под эти пользователем на этом компьютере в разделе "Определённые пользователем".  
Макросы можно не разрешать, по крайней мере на 2000 так, может на 2003/7/10 иначе, не знаю.
 
Спасибо Hugo.    
Буду пробывать, я понимаю что язык программирования намного гибче чем стандартные формулы екселя, и все таки жалко что есть такие задачи которые невозможно реализовать только силами ексель(без ВБА). Может в будущем разработчики включат в стандарт какие нибудь простейшие циклы (или запросы) вот тогда было бы полегче!
Редко но метко ...
 
{quote}{login=GIG_ant}{date=25.10.2010 10:24}{thema=}{post} ...и все таки жалко что есть такие задачи которые невозможно реализовать только силами ексель(без ВБА). {/post}{/quote}К данной задаче это не относится.
 
Не относится, но всёж использовать комбинацию из 4-х формул, с повторами, массивную - это имхо перебор... могли мелкомягкие одну формулу придумать на каждое действие.
 
{quote}{login=Михаил}{date=25.10.2010 10:33}{thema=Re: }{post}{quote}{login=GIG_ant}{date=25.10.2010 10:24}{thema=}{post} ...и все таки жалко что есть такие задачи которые невозможно реализовать только силами ексель(без ВБА). {/post}{/quote}К данной задаче это не относится.{/post}{/quote}  
 
Пока не понял как работает, но мою веру в "негибкие" формулы екселя вам Михаил удалось вернуть!!!
Редко но метко ...
 
ту Михаил:  
 
Понял!!! Вы хитро сделали цикл функцией ПСТР(A1;СТРОКА($1:$30);1) добавив формулу массива. Значит цикл все же можно организовать(хоть и с такими наворотами, но можно !). Благодарю. Беру формулу на вооружение.    
 
ЗЫ: Не в обиду Hugo, ваш пример с макросом тоже вполне подходит.
Редко но метко ...
 
Чего обижаться. Я б такую формулу не в жисть не сочинил :)  
Макросом проще, и контроля больше - можно любые знаки препинания в любую группу добавить. Иногда бывает нужно.
 
Вторую формулу можно привязать к первой:  
=ПРАВСИМВ(A1;ДЛСТР(A1)-ДЛСТР(E1))
 
{quote}{login=vikttur}{date=31.10.2010 02:47}{thema=}{post}Вторую формулу можно привязать к первой:  
=ПРАВСИМВ(A1;ДЛСТР(A1)-ДЛСТР(E1)){/post}{/quote}  
или еще проще:  
=ПОДСТАВИТЬ(A1;E1;)
 
Можно пойти от обратного, тогда без массива.    
Сначала цифры:  
=--ПРАВСИМВ(A1;СЧЁТ(ПОИСК({0:1:2:3:4:5:6:7:8:9};A1)))  
Затем остальное:  
=ПОДСТАВИТЬ(A1;C1;)
 
Поторопился, при одинаковых цифрах не пройдет((
 
Можно еще:  
=--ПРАВСИМВ(A1;СЧЁТ(ИНДЕКС(-ПСТР(A1;СТРОКА($1:$99);1);)))  
=ПРОСМОТР(9E+307;--ПРАВСИМВ(A1;СТРОКА($1:$15)))
 
Здравствуйте! Столкнулся с проблемой изъятия цифр из текста (формат ячейки: общий). Покопав форум нашел эту тему и вот данная комбинация сработала:  
 
{quote}{login=kim}{date=31.10.2010 01:18}{thema=}{post}Можно еще:  
=--ПРАВСИМВ(A1;СЧЁТ(ИНДЕКС(-ПСТР(A1;СТРОКА($1:$99);1);)))  
=ПРОСМОТР(9E+307;--ПРАВСИМВ(A1;СТРОКА($1:$15))){/post}{/quote}  
 
Но все испортил / (слэш). Число выходит совсем другое.  
Надо изъять цифры из подобной строки:  
 
Образец №112/54  
 
Но и это еще не все, к полученным цифрам надо добавить числовой префикс (пусть 42), как я понял, это можно осуществить командой СЦЕПИТЬ. Файл прилагаю.  
 
Заранее спасибо!
 
Помимо слэша, желательно посмотреть и те данные, которые сработали. И поместите туда формулу, которая это сделала.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
Страницы: 1
Читают тему
Наверх