Страницы: 1
RSS
Найти в столбце значения по маске, а все символы, кроме маски удалить
 
Друзья, подскажите,пожалуйста как реализовать задачу.  
 
Есть файл, в котором в столбец идут записи неупорядоченного вида.  
Пример (каждая строка ниже - это одна ячейка в Excel):  
 
БЛА БЛА K8963 бла-ЬБла  
Пстройа согл.догов.K3456 от 21.12.2007  
K3456  
K3456-строй  
 
Нужно в каждой ячейке найти значение К#### (буква K и четыре цифры) и либо скопировать это значение К#### в соседнюю значейку, либо удалить в текущей ячейке все символы, кроме К####  
В столбце есть ячейки пустые, есть ячейки без значения К#### - их тоже нужно удалить \ ничего из них не скопировать (зависимо от варианта реализации).  
 
Спасибо!
 
выделить нужное и запустить  
Selection.Replace What:="K????", Replacement:=""
 
а, если по-русски, без макросов, то  
ctlr+F,Найти K????, заменить на пусто
 
В таком случае во всех строках удалится текст "К????", а мне нужно, чтобы удалилось все, кроме него. Чтобы остались только идентификаторы позиций (это и есть код К????).
 
В соседнюю ячейку:  
=ПСТР(A1;ПОИСК("K****";A1;1);5)
 
да, такой я невнимательный...
 
{quote}{login=vikttur}{date=02.12.2008 02:19}{thema=}{post}В соседнюю ячейку:  
=ПСТР(A1;ПОИСК("K****";A1;1);5){/post}{/quote}  
 
Спасибо! Очень дельная формула. Работает неидеально, но уже намного быстрее.  
В таком вот виде формула, обработав ячейку со значением "ODE NIK PUH K0953" выдает результат "K PUH".  
Я пытался как-то сообщить Экселю, что нужно выбирать не просто любые символы, а именно цифры, но мои выражения не работают:  
=ПСТР(A1;ПОИСК("K[0-9][0-9][0-9][0-9]";A1;1);5)
=ПСТР(A1;ПОИСК("K^#^#^#^#";A1;1);5)  
 
Может кто-то знает, как дать понять Экселю, что необходимо находить не любой символ, а именно цифры?
 
с формулами как выяснилось у меня плохо, поэтому вариант в лоб:  
 
Sub fsddsd()  
For Each cell In Selection  
   Set m = cell.Find(what:="K????")  
   If Not m Is Nothing Then  
       On Error Resume Next  
       For i = 1 To Len(cell)  
           If Mid(cell, i, 1) = "K" And _  
               IsNumeric(Mid(cell, i + 1, 1) + Mid(cell, i + 2, 1) + Mid(cell, i + 3, 1) + Mid(cell, i + 4, 1)) Then  
           cell.Offset(, 1) = "Ê" & Mid(cell, i + 1, 1) _  
           & Mid(cell, i + 2, 1) & Mid(cell, i + 3, 1) & Mid(cell, i + 4, 1): End If  
         
       Next  
   End If  
Next  
 
End Sub
 
хм..  
cell.Offset(, 1) = "К"
 
Артем, спасибо, скрипт бомба!  
Как оказалось, в значениях были и русские буквы К (наши финансисты рулят) - но тут Замена рулит.  
А для будущих пользователей скрипта сообщу, что он чувствительный к регистру буквы К.  
Но и здесь Замена рулит.  
Спасибо, это то, что нужно! Надо учить VBA :-)
 
пожалуйста, для нечувствительности к регистру можно использовать пребразование через UCase, типа  
if UCase(If Mid(cell, i, 1)) = "K"  
а вообще, наверняка есть решение в одну строчку и готов спорить, что в промежутке от 15 минут до 2 часов его кто-нибудь выложит)))))
 
Избавление от чувствительности к регистру через макрос для меня - это от лукавого. Search & Replace воистину :)  
А насчет строчки, то боюсь это будет очень длинная строчка :)  
Вдохновленный макросом, я посмотрел, что можно аналогично модифицировать формулу vikttur на проверку integerности, но есть подвох, что по второму разу в одной и той же ячейке формула искать значение не будет, в отличие от макроса.
 
{quote}{login=Артем}{date=02.12.2008 03:40}{thema=}{post}наверняка есть решение в одну строчку и готов спорить, что в промежутке от 15 минут до 2 часов его кто-нибудь выложит))))){/post}{/quote}  
Уверенность Артема не лишена прочного основания.  
Другое дело, что не у всех есть время заходить на форум "каждый день и каждый час".  
Я тоже уверен, что после просмотра темы Раптором или DL "одна строчка" родилась бы быстро.  
 
Идея - искать не букву "К", которая может быть и русской, и латиницей, а цифру.  И не надо бояться Мирославу большой длины формулы :)  
Сочинять много не нужно, DL выкладывал формулу для такого поиска.  
При необходимости (когда в ячейке встречается цифра раньше необходимого кода) формула поддается доработке.  
Формула массива:  
=ПСТР(A1;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(ПСТР(A1;СТРОКА(ДВССЫЛ("1:"&ДЛСТР(A1)));1)*1);0)-1;5)
 
Приветствую Vikttur!  
Честно признаюсь что для меня эксель, особенно в виде формул массива, не работа? а развлечение, своего рода разминка ума. То есть интересно не сколько решение конкретной задачи, сколько исследование возможных путей её решения. Для экселя это в первую очередь поиск решения задачи с помощью ограниченных средств предоставляемых экселем.  
Если выразился туманно, то и не страшно  
 
И как я уже писал Mazay(u)ZR не надо реверансов, все мы в одном корыте, тем более что я испытываю глубокое уважение к "окопным бойцам" форума, благодаря которым форум живёт, на него когда есть желание можно зайти, и получить немалое удовольствие и пользу.  
 
зы. Вот бы ещё была возможность говорить о театре, политике, философии и женщинах!  
----  
DL/Сергей
 
Кстати ded_luka это не дед Люка из звёздных войн, а персонаж из "На дне"  
горького  
Кстати мне приглянулось, уже на данном форуме dl@kartoshka.ru, не как адрес а как псевдоним.
Страницы: 1
Читают тему
Наверх