|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.12.2008, 23:43 | #1 |
Новичок
Джуниор
Регистрация: 18.12.2008
Сообщений: 1
|
Excel. Поиск символа и запись номера
Здравствуйте, помогите решить проблему.
Есть столбец из 14000 символов, мне нужно найти только цифру 10. И, в 1-ом соседнем столбце указать последовательно номера наайденных 10-ок, а во втором столбце указать последовательно расстояние между номерами 10-ок, N = Nтекущий - Nпредыдущий. Как это можно сделать? Спасибо за помощь. |
19.12.2008, 00:30 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
см. во вложении
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
19.12.2008, 03:08 | #3 |
Особый статус
Участник клуба
Регистрация: 24.11.2008
Сообщений: 1,535
|
Или вот так... Но: до первой пустой ячейки.
Sub SeekForSomeSubstringAndCountGaps()
'Макросу необходимо назначить кнопку или сочетание клавиш. Const S As String = "10" 'подстрока, которую ищем и считаем Dim col As Variant, amountS As Integer Dim gap As Integer, d As Integer If col = 0 Then SendKeys "^{home}", True 'идём "домой" - в ячейку R1C1 col = InputBox("№ столбца:", "OK?", ActiveCell.Column) If Not IsNumeric(col) Then Exit Sub If col > 254 Then Exit Sub Do While ActiveCell.Column < col: SendKeys "{tab}", True: Loop End If Do While ActiveCell.Text <> vbNullString 'ищем до пустой! 'анализируем активную ячейку на кол-во S в ней d = InStr(1, ActiveCell.Text, S) Do While d > 0 amountS = amountS + 1 If Len(ActiveCell.Text > d + Len(S)) Then 'значит, есть место для S d = InStr(d + 2, ActiveCell.Text, S) End If Loop If InStr(ActiveCell.Text, S) Then 'печать количества накопленных подстрок (S) SendKeys "{tab}", True 'переход в столбик +1 ActiveCell.FormulaR1C1 = amountS If gap > 0 Then SendKeys "{tab}", True 'переход в столбик +2 ActiveCell.FormulaR1C1 = gap 'печать интервала gap = 0 'обнуление интервала SendKeys "+{tab}", True 'нажатие Shift-Tab (шаг назад по строке) End If SendKeys "+{tab}", True 'возврат в тот столбик End If SendKeys "{enter}", True 'перевод строки (клавишей ENTER) If amountS > 0 Then gap = gap + 1 'подсчёт интервала Loop If amountS = 0 Then MsgBox _ "До пустой ячейки " & ActiveCell.Column & "-й колонки подстрок «" & S & "» нет." End Sub
Формула 1 (календарь чемпионата-2016): 26.11.2016 15:55 — Абу-Даби: http://ru.wikipedia.org/wiki/Гран-при_Абу-Даби — (квалификация)! Эфир: http://lion-tv.com/28-match-tv.html
Последний раз редактировалось Sasha_Smirnov; 20.12.2008 в 01:15. Причина: цикл анализа символов внутри каждой ячейки; отмена описания Static (с его доп. функциональностью); контроль ввода номера столбца. |
19.12.2008, 06:21 | #4 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Ну, если с помощью VBA, то можно существенно проще.
Посмотрите вложения. Запустите макрос "Main". В первом файле - аналог решения от IgorGO. Во втором - с произвольным выбором столбца.
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 19.12.2008 в 06:59. Причина: Добавлено |
19.12.2008, 23:12 | #5 |
Особый статус
Участник клуба
Регистрация: 24.11.2008
Сообщений: 1,535
|
10-ки_2.rar, безусловно, великолепный образчик VBA!
Одно но (оно и у меня есть, но не то): строки типа "110" или "10а" — вне анализа. Уж другое дело, нужны ли они такие, но по условию — да. P/s: можно скть, вы построили солидный сталинский дом, а я — хрущобу*. _______________________ * где тоже можно жить уютно
Формула 1 (календарь чемпионата-2016): 26.11.2016 15:55 — Абу-Даби: http://ru.wikipedia.org/wiki/Гран-при_Абу-Даби — (квалификация)! Эфир: http://lion-tv.com/28-match-tv.html
Последний раз редактировалось Sasha_Smirnov; 20.12.2008 в 01:35. Причина: зы. |
20.12.2008, 05:46 | #6 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Цитата:
Чтобы и "10", и "110", и "10а", и, например, "55510555" считались как "истина", то в аргументах оператора Find нужно поменять LookAt:=xlWhole на LookAt:=xlPart. Т.е. искать ячейки, в которых "10" присутствует хотя бы как часть строки.
Чем шире угол зрения, тем он тупее.
|
|
20.12.2008, 05:54 | #7 |
Особый статус
Участник клуба
Регистрация: 24.11.2008
Сообщений: 1,535
|
Классно! Вот ещё узнать бы, для кого старались!..
А то ведь обидно монитором... капусту в бочке квасить. Кстати, обнаружил, что на быстром компьютере мой код обсчитывает лишь 1-й столбец! Отладка показала, что первый SendKeys "{tab}" там надо заменить на SendKeys "{right}". И, чисто для себя, я вместо Dim col сделал Static col. Тогда при втором запуске можно выбрать искомую колонку вручную. Век учи — век «живись»!
Формула 1 (календарь чемпионата-2016): 26.11.2016 15:55 — Абу-Даби: http://ru.wikipedia.org/wiki/Гран-при_Абу-Даби — (квалификация)! Эфир: http://lion-tv.com/28-match-tv.html
Последний раз редактировалось Sasha_Smirnov; 20.12.2008 в 21:40. Причина: отладка для 3 ГГц |
24.12.2008, 03:36 | #8 |
Особый статус
Участник клуба
Регистрация: 24.11.2008
Сообщений: 1,535
|
И, для очистки совести:
d + 2 необходимо заменить на d + Len(S) Тогда действительно пригодится для подстрок любой длины.
Формула 1 (календарь чемпионата-2016): 26.11.2016 15:55 — Абу-Даби: http://ru.wikipedia.org/wiki/Гран-при_Абу-Даби — (квалификация)! Эфир: http://lion-tv.com/28-match-tv.html
|
21.09.2010, 10:07 | #9 |
Новичок
Джуниор
Регистрация: 21.09.2010
Сообщений: 1
|
Помогите прописать поиск в экселе, необходимо что бы поиск распространялся на весь документ (несколько страниц)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск и удаление символа в строке | Karl_Karlovi4 | Общие вопросы Delphi | 14 | 26.10.2011 18:04 |
Поиск лишнего/иного символа при сравнении двух строк | Bezdar | Microsoft Office Excel | 5 | 13.11.2008 13:07 |
Button1 - автоматический поиск модема и набор номера | beegl | Общие вопросы Delphi | 5 | 01.06.2008 14:08 |
Макрос VBA EXCEl - простановка в ячейку номера страницы | Обыватель | Microsoft Office Excel | 1 | 14.02.2008 12:49 |
Поиск символа в Edit1.text | Alar | Компоненты Delphi | 0 | 29.10.2006 19:02 |