Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2008, 23:43   #1
4nik
Новичок
Джуниор
 
Регистрация: 18.12.2008
Сообщений: 1
Смущение Excel. Поиск символа и запись номера

Здравствуйте, помогите решить проблему.
Есть столбец из 14000 символов, мне нужно найти только цифру 10. И, в 1-ом соседнем столбце указать последовательно номера наайденных 10-ок, а во втором столбце указать последовательно расстояние между номерами 10-ок, N = Nтекущий - Nпредыдущий.
Как это можно сделать?
Спасибо за помощь.
4nik вне форума Ответить с цитированием
Старый 19.12.2008, 00:30   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см. во вложении
Вложения
Тип файла: rar 10.rar (292.7 Кб, 37 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 19.12.2008, 03:08   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 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

Последний раз редактировалось Sasha_Smirnov; 20.12.2008 в 01:15. Причина: цикл анализа символов внутри каждой ячейки; отмена описания Static (с его доп. функциональностью); контроль ввода номера столбца.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 19.12.2008, 06:21   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Ну, если с помощью VBA, то можно существенно проще.
Посмотрите вложения. Запустите макрос "Main".
В первом файле - аналог решения от IgorGO.
Во втором - с произвольным выбором столбца.
Вложения
Тип файла: rar 10-ки.rar (90.2 Кб, 30 просмотров)
Тип файла: rar 10-ки_2.rar (92.6 Кб, 63 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 19.12.2008 в 06:59. Причина: Добавлено
SAS888 вне форума Ответить с цитированием
Старый 19.12.2008, 23:12   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

10-ки_2.rar, безусловно, великолепный образчик VBA!
Одно но (оно и у меня есть, но не то): строки типа "110" или "10а" — вне анализа.
Уж другое дело, нужны ли они такие, но по условию — да.

P/s: можно скть, вы построили солидный сталинский дом, а я — хрущобу*.
_______________________
* где тоже можно жить уютно

Последний раз редактировалось Sasha_Smirnov; 20.12.2008 в 01:35. Причина: зы.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 20.12.2008, 05:46   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
строки типа "110" или "10а" — вне анализа
Я так понимаю, что "10" и "110" - это разные значения.!?
Чтобы и "10", и "110", и "10а", и, например, "55510555" считались как "истина", то в аргументах оператора Find нужно поменять LookAt:=xlWhole на LookAt:=xlPart. Т.е. искать ячейки, в которых "10" присутствует хотя бы как часть строки.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 20.12.2008, 05:54   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Классно! Вот ещё узнать бы, для кого старались!..
А то ведь обидно монитором... капусту в бочке квасить.

Кстати, обнаружил, что на быстром компьютере мой код обсчитывает лишь 1-й столбец!
Отладка показала, что первый
SendKeys "{tab}" там надо заменить на
SendKeys "{right}".
И, чисто для себя, я вместо Dim col сделал Static col. Тогда при втором запуске можно выбрать искомую колонку вручную.
Век учи — век «живись»!

Последний раз редактировалось Sasha_Smirnov; 20.12.2008 в 21:40. Причина: отладка для 3 ГГц
Sasha_Smirnov вне форума Ответить с цитированием
Старый 24.12.2008, 03:36   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

И, для очистки совести:

d + 2 необходимо заменить на d + Len(S)

Тогда действительно пригодится для подстрок любой длины.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 21.09.2010, 10:07   #9
vinch
Новичок
Джуниор
 
Регистрация: 21.09.2010
Сообщений: 1
По умолчанию

Помогите прописать поиск в экселе, необходимо что бы поиск распространялся на весь документ (несколько страниц)
vinch вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и удаление символа в строке 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