|
|
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
Добрый день, всем! Помогите пожалуйста с кодом. В ячейке в Excel есть текст, к примеру МБП (ТЕХ), нужна такая функция, которая оставит в этой ячейке только то, что в скобках, т.е. в данном случае должно получиться ТЕХ. Наполнение ячеек каждый раз разное, единственное, текст в скобках будет всегда. Очень давно работала со строковыми функциями, поэтому подзастряла. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 11:02:46 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
Данные - Текст по столбцам - Указать разделитель "(" и сделать второй раз так, но для разделитея ")". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 12:06:28 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
Вставьте в книгу модуль и туда эту функцию Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 12:23:32 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
orunbek Вы меня спасли, просто супер, то что и нужно было. :)) Спасибо огромное. Ivan33 Даже не задумалась о таком варианте... ;)) Правда, мне больше подходит вариант orunbek -а. Но все равно, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 12:32:50 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
Есть еще такая вещь как Regular Expressions - мощная, но сложная для изучения: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/2380d458-3366-402b-996c-9363906a7353.asp Например, пишем след. функцию в стандартном модуле: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. И используем так: 1. на листе (где [A1] содержит "МБП (ТЕХ)") =ClearName(A1, "(.{1,}\()|(\))" ) 2. в коде Код: plaintext Получается универсальная функция на все случаи жизни... остается только научиться писать "паттерны". KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 15:46:27 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
KL (XL) 1. на листе (где [A1] содержит "МБП (ТЕХ)") =ClearName(A1, "(.{1,}\()|(\))" ) 2. в коде Код: plaintext Получается универсальная функция на все случаи жизни... остается только научиться писать "паттерны". KL [MVP - Microsoft Excel] Можешь пояснить почему маска "(.{1,}\()|(\))" для данного случая я бы написал так ".+\(.+\)" .+ - любое количество любого символа \( - символ "(" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 16:37:03 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
vkodorМожешь пояснить почему маска "(.{1,}\()|(\))" для данного случая я бы написал так ".+\(.+\)" .+ - любое количество любого символа \( - символ "("1. я не специаллист в Regular Expressions 2. твоя маска уничтожит весь стринг, т.к. условие выполняется для всего стринга 3. моя маска была сделана наспех путем переделки уже существовавшей и она явно не оптимальна 4. моя маска состоит из двух альтернативных масок (.{1,}\() и (\)) разделенных символом | соответствующим "или" 5. если не ошибаюсь, предложенный тобой .+ точно эквивалентен .{1,} , но покороче и означает не любое количество любого символа, а от одного любого символа и более 6. при ближайшем рассмотрении я склоняюсь к др. версии маски "(.{0,}\()|(\).{0,})" KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 17:16:36 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
KL (XL)6. при ближайшем рассмотрении я склоняюсь к др. версии маски "(.{0,}\()|(\).{0,})" Ну или следуя твоей логике (упрощения): "(.*()|(\).*)" KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 17:24:26 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
Предыдущее сообщение получилось внутри цитаты: Ну или следуя твоей логике (упрощения): "(.*()|(\).*)" KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 17:27:22 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
KL (XL)1. я не специаллист в Regular ExpressionsЭто заметно :) KL (XL)6. при ближайшем рассмотрении я склоняюсь к др. версии маски "(.{0,}\()|(\).{0,})" Тоже не верно. Во первых, надо переписать макрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 18:14:29 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
White OwlВо первых, надо переписать макрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. White OwlА во вторых, запускать так: Код: plaintext White OwlЭто если с минимальными переделками исходного макроса. А если делать его универсальным, то делать надо так:Имелась ввиду универсальность очистки а не замены. Но, конечно, чем универсальней, тем лучше :-) KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 18:38:23 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
KL (XL)Надо - слово красивое, а чем вызвано это "надо"? Есть сбои в работе функции?Ага :) Запусти свою функцию на такие тексты: AAA (BBB) AAA (BBB AAA BBB) AA(A (BBB) И посмотри в каких случаях она вернет BBB а когда она вернет что-то иное. KL (XL)И опять-таки, чем конкретно не угодил подход с "(.*()|(\).*)" ?Этот паттерн вообще не расшифровывается в что-то осмысленное :) А если имелся в виду "(.*\()|(\).*)", то это расшифровывается в поиск строки завершающейся символом ( или поиск строки завершающеейся симовлом ) . Причем жадный поиск. В любом случае, к задаче поиска текста в скобках этот паттерн тоже не имеет отношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 18:55:12 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
White OwlЗапусти свою функцию на такие тексты: AAA (BBB) AAA (BBB AAA BBB) AA(A (BBB) И посмотри в каких случаях она вернет BBB а когда она вернет что-то иное.Ну ты уж тогда, на всякий пожарный, запусти свое решение с этими и с этим: (ТЕХ) если перед скобкой ничего нет, то твоя маска проигнорирует скобки. Так что в этом случае мне больше нравится: "(.*)\((.*)\)" White OwlЭтот паттерн вообще не расшифровывается в что-то осмысленное :) А если имелся в виду "(.*\()|(\).*)", то это расшифровывается в поиск строки завершающейся символом ( или поиск строки завершающеейся симовлом ) . Причем жадный поиск. В любом случае, к задаче поиска текста в скобках этот паттерн тоже не имеет отношения.Мне почему-то начинает казаться, что ты мне друг по несчастью (в смысле не специалист по Regular Expressions) ;-) здесь http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/2380d458-3366-402b-996c-9363906a7353.asp написано: * Matches the preceding character or subexpression zero or more times. For example, zo* matches "z" and "zoo". * is equivalent to {0,}. И что самое смешное, работает прекрасно. А жадный поиск так по-моему здесь как раз к месту. И еще к разговору об универсальности... 1. Похоже, твой код позволяет выбирать одну маску за раз, а в моем проще работать с альтернативными масками. Но я наверняка просто не нашел как это делать в твоем решении. 2. Если третий параметр (intSection) ошибочный, то твой код возвращает нонсенс, а не ошибку. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 19:32:09 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
White OwlAAA (BBB AAA BBB) Пожалуй, если рассматривать задачу, как оставить то, что внутри скобок (как у автора), то тут твой подход лучше. Я как-то зафиксировался на удалении всего, что за скобками, поэтому при эксперименте с примерами я видел все как в верхней части прилагаемой картинки :-) Остальные пункты пока в силе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 20:49:07 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
KL (XL)(ТЕХ) если перед скобкой ничего нет, то твоя маска проигнорирует скобки.Она не проигнорирует, она просто не найдет искомого. Впрочем, если исправить мой паттерн на ^(.*)\((.+)\) то оно и с (ТЕХ) справится правильно :) KL (XL) Так что в этом случае мне больше нравится: "(.*)\((.*)\)" В скобках должно что-то быть! А ты разрешаешь ничему не быть... Впрочем это уже вопрос постановки задачи :) KL (XL)Мне почему-то начинает казаться, что ты мне друг по несчастью (в смысле не специалист по Regular Expressions) ;-)ээээ... вообще-то, я не на использование звездочки указывал, а на не уместное использование | . Паттерн (.*\()|(\).*) при Replace на пустую строку убьет все до первой открывающей скобки и все после первой закрывающей. Он не будет проверять на парность скобок. KL (XL)2. Если третий параметр (intSection) ошибочный, то твой код возвращает нонсенс, а не ошибку.Ну вообще-то, для задач типа "вычленить кусок текста" я предпочитаю работать с коллекцией SubMatches. Replace не использую почти никогда, так что навскидку сочиняя для него паттерн могу и наврать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 21:36:13 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
White OwlВпрочем, если исправить мой паттерн на ^(.*)\((.+)\) то оно и с (ТЕХ) справится правильно :)Это я уже заметил White OwlВ скобках должно что-то быть! А ты разрешаешь ничему не быть... Впрочем это уже вопрос постановки задачи :)Пожалуй. White Owlээээ... вообще-то, я не на использование звездочки указывал, а на не уместное использование | . Паттерн (.*\()|(\).*) при Replace на пустую строку убьет все до первой открывающей скобки и все после первой закрывающей. Он не будет проверять на парность скобок.Аааа! Тады ой. Но все-таки, согласись, что это "расшифровывается во что-то осмысленное", а имено в другое видение задачи :-) White OwlНу вообще-то, для задач типа "вычленить кусок текста" я предпочитаю работать с коллекцией SubMatches. Replace не использую почти никогда, так что навскидку сочиняя для него паттерн могу и наврать :)Поскольку я чаще использую Excel, то с текстом работать приходится редко. Т.ч. RegExp редко бывает нужен, а Replace это единственное, что я использую. В любом случае спасибо, что заставил поглубже копнуть - сам бы наверняка не собрался. Кстати, как поживает твоя конкурсная работа? По-моему мы deadline забыли установить. Я тут играю с Solver и такое ощущение, что уже близок к относительно быстрому решению - 14 отрезков за 50 секунд. Правда еще не установил последний constraint KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 22:01:33 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
KL (XL)Аааа! Тады ой. Но все-таки, согласись, что это "расшифровывается во что-то осмысленное", а имено в другое видение задачи :-) Это не другое видение задачи, это уже совершенно другая задача. KL (XL)Кстати, как поживает твоя конкурсная работа? По-моему мы deadline забыли установить. Я тут играю с Solver и такое ощущение, что уже близок к относительно быстрому решению - 14 отрезков за 50 секунд. Правда еще не установил последний constraint Да никак, забыл я про нее :( Щас вернемся :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 22:21:35 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
White Owl KL (XL)Кстати, как поживает твоя конкурсная работа?...Да никак, забыл я про нее :( Щас вернемся :)От-жежь, некоторые заманють да бросють!!! Да расслабься. Посколько особого энтузязизьма идея не вызвала, то и спешить некуда. Если чего сделаешь - повесь - я добавлю твой код в свою коллекцию примеров и буду увековечивать белую сову на всех форумах :-)))) Ну и соответственно, если я чего накумекаю, тоже подвешу. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 22:40:23 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
Ну так же нечестно! :) KL (XL) , White Owl - вы же меня заинтересовали!!! Теперь еще нужно с этим разобраться ;). Попробую доползти до кода (особенно до масок!) на выходных. Спасибо огромное за примеры - буду смотреть. З.Ы. Конкретно в моей постановке задачи - скобки будут всегда, причем парные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 10:25:25 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
Гость123Ну так же нечестно! :) KL (XL) , White Owl - вы же меня заинтересовали!!! Теперь еще нужно с этим разобраться ;). Попробую доползти до кода (особенно до масок!) на выходных. Спасибо огромное за примеры - буду смотреть. З.Ы. Конкретно в моей постановке задачи - скобки будут всегда, причем парные.это до кучи Есть ли в формулах Excel регулярные выражения? White OwlВпрочем, если исправить мой паттерн на ^(.*)\\((.+)\\) то оно и с (ТЕХ) справится правильно :) Правильно ли я понимаю? ^(.*) - ни одного или более символа KL (XL) - так я и не понял что означают фигурные скобки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 13:59:54 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
vkodorПравильно ли я понимаю? ^(.*) - ни одного или более символа MSDN ^ Matches the position at the beginning of an input string except when used in a bracket expression where it negates the character set. To match the ^ character itself, use \^.В этом случае ^ должен означать положение в начале текста (а не отрицание как внутри квадратных скобок) vkodorKL (XL) - так я и не понял что означают фигурные скобки MSDN { } Marks the beginning of a quantifier expression. To match these characters, use \{ and \}. {n} n is a nonnegative integer. Matches exactly n times. For example, 'o{2}' does not match the 'o' in "Bob," but matches the two o's in "food". {n,} n is a nonnegative integer. Matches at least n times. For example, 'o{2,}' does not match the "o" in "Bob" and matches all the o's in "foooood". ' o{1,}' is equivalent to 'o+'. 'o{0,}' is equivalent to 'o*' . {n,m} m and n are nonnegative integers, where n <= m. Matches at least n and at most m times. For example, "o{1,3}" matches the first three o's in "fooooood". 'o{0,1}' is equivalent to 'o?'. Note that you cannot put a space between the comma and the numbers.{ } содержат число или луч указывающий на кол-во повторов предшествующего символа. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 14:35:35 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
KL (XL) Понял. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 14:52:13 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
В итоге я остановилась на таком варианте: Код: plaintext Всем большое спасибо за помощь! З.Ы. Регулярные выражения - это нечто - чуть голову себе не поломала. ;)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 15:44:50 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
Прошу прощенья за назойлдивость "^(.*?)\((.+)\)" ^(.*?) = от начала строки до "(", любое количество любых символов \( - далее скобка (.+) - далее любое количество любых символов \) - далее скобка Я правильно понял? И еще ни как не могу панять смысл аргумента rReplaceWith As String .Replace(rCell, rReplaceWith) - в справке говорится Function Replace(sourceString As String, replaceVar) _ As String Метод Replace даёт возможность заменить все совпадения регулярного выражения строкой replaceVar. т.е. вы все найденое заменяете на "$2" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 16:59:20 |
|
||
|
Нужна функция, убирающая ненужные данные из ячейки Excel
|
|||
|---|---|---|---|
|
#18+
vkodorПрошу прощенья за назойлдивость "^(.*?)\((.+)\)" ^(.*?) = от начала строки до "(", любое количество любых символов \( - далее скобка (.+) - далее любое количество любых символов \) - далее скобкаНе совсем так. ^(.*?)\( = взять группу из нуля или больше любых символов от начала строки завершающейся символом "открывающая скобка" причем последний символ из первой группы не является символом "открывающая скобка" (.+)\) = взять вторую группу в которой один или больше любых символов после которой идет символ "закрывающая скобка". Причем после символа "закрывающая скобка" должен быть любой другой (либо конец строки). А конец группы может содержать любое количество закрывающих скобок. vkodorт.е. вы все найденое заменяете на "$2" ?В общем да, только учти что Replace в данном случае делает замену НАЙДЕНОЙ подстроки. То есть, если в строке источнике нету вообще пары открывающая-закрывающая скобка с хотя бы одним символом между ними, то Replace соответсвенно вообще не сделает никаких замен. Ну то что $2 означает вторую группу ты понял? :) 2 Гость123: Мне почему-то кажется, что жадность надо ставить в первой группе, а вторую наоборот не жадной делать. И конец строки тоже будет нелишним указать. В общем предлагаю переписать вот так: ^(.*)\((.+?)\)$ Ну конечно, это зависит от задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2006, 19:38:40 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=34097508&tid=2183962]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 403ms |

| 0 / 0 |
