Sub t() a = [b4:c28].Value For i = 1 To UBound(a) - 1 e = Split(Application.Trim(a(i, 1))): j = i + 1: k = a(i, 2) * 0.3: f = False Do Until (j > UBound(a)) Or f If a(j, 2) < k Then Exit Do x = Split(Application.Trim(a(j, 1))) If UBound(x) >= UBound(e) Then ff = True For ie = 0 To UBound(e) ff = True For ix = 0 To UBound(x) If e(ie) = x(ix) Then ff = False: Exit For Next If ff Then Exit For Next If Not ff Then Cells(i + 3, 2).Font.ColorIndex = 15: f = True End If j = j + 1 Loop Next End Sub
[/vba] пс. обратите внимание - первая строка не закрасилась, ибо не попадает в ваши пресловутые 30%
[vba]
Код
Sub t() a = [b4:c28].Value For i = 1 To UBound(a) - 1 e = Split(Application.Trim(a(i, 1))): j = i + 1: k = a(i, 2) * 0.3: f = False Do Until (j > UBound(a)) Or f If a(j, 2) < k Then Exit Do x = Split(Application.Trim(a(j, 1))) If UBound(x) >= UBound(e) Then ff = True For ie = 0 To UBound(e) ff = True For ix = 0 To UBound(x) If e(ie) = x(ix) Then ff = False: Exit For Next If ff Then Exit For Next If Not ff Then Cells(i + 3, 2).Font.ColorIndex = 15: f = True End If j = j + 1 Loop Next End Sub
[/vba] пс. обратите внимание - первая строка не закрасилась, ибо не попадает в ваши пресловутые 30%ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Воскресенье, 13.01.2013, 12:31
другой вариант (в общем-то, не короче и вряд ли быстрее, просто разбираться и править удобнее)
[vba]
Код
Sub tt() Set d = CreateObject("scripting.dictionary") a = [b4:c28].Value For i = 1 To UBound(a) - 1 e = Split(Application.Trim(a(i, 1))) For ie = 0 To UBound(e): d.Item(e(ie)) = 0: Next j = i + 1: k = a(i, 2) * 0.3: f = False Do Until (j > UBound(a)) Or f If a(j, 2) < k Then Exit Do x = Split(Application.Trim(a(j, 1))) If UBound(x) >= UBound(e) Then ff = True For ix = 0 To UBound(x) If Not d.exists(x(ix)) Then ff = False: Exit For Next If ff Then Cells(i + 3, 2).Font.ColorIndex = 15: f = True End If j = j + 1 Loop d.RemoveAll Next End Sub
[/vba]
пс. есть нюанс - и в том, и в другом коде. для случая наличия повторяющихся слов в строках может работать неверно. но в примере таких случаев нет
другой вариант (в общем-то, не короче и вряд ли быстрее, просто разбираться и править удобнее)
[vba]
Код
Sub tt() Set d = CreateObject("scripting.dictionary") a = [b4:c28].Value For i = 1 To UBound(a) - 1 e = Split(Application.Trim(a(i, 1))) For ie = 0 To UBound(e): d.Item(e(ie)) = 0: Next j = i + 1: k = a(i, 2) * 0.3: f = False Do Until (j > UBound(a)) Or f If a(j, 2) < k Then Exit Do x = Split(Application.Trim(a(j, 1))) If UBound(x) >= UBound(e) Then ff = True For ix = 0 To UBound(x) If Not d.exists(x(ix)) Then ff = False: Exit For Next If ff Then Cells(i + 3, 2).Font.ColorIndex = 15: f = True End If j = j + 1 Loop d.RemoveAll Next End Sub
[/vba]
пс. есть нюанс - и в том, и в другом коде. для случая наличия повторяющихся слов в строках может работать неверно. но в примере таких случаев нет ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki
Сообщение отредактировал ikki - Воскресенье, 13.01.2013, 12:35
Дата: Воскресенье, 13.01.2013, 14:54 |
Сообщение № 23
Группа: Гости
Ikki, спасибо за помощь.
Первый макрос меняет цвет(видимо что-то очень близко к описанному алгоритму), но были обнаружены ошибки. Я расширил диаапозон ячеек чтобы посмотреть более глобально и прокомментировал первые 7 ошибок(цвета ячеек выделены вручную) желтым -ячейка не сменила цвет текста, а должна, красным - цвет изменен, но по алгоритму он не должен меняться.
Будьте добры, посмотрите файл с макросом. hayabusa-club.ru/macros.xls (это книга с поддержкой макросов, у файла поменяно расширение, т.к. xlsm не скачивается с сервера.)
Ikki, спасибо за помощь.
Первый макрос меняет цвет(видимо что-то очень близко к описанному алгоритму), но были обнаружены ошибки. Я расширил диаапозон ячеек чтобы посмотреть более глобально и прокомментировал первые 7 ошибок(цвета ячеек выделены вручную) желтым -ячейка не сменила цвет текста, а должна, красным - цвет изменен, но по алгоритму он не должен меняться.
Будьте добры, посмотрите файл с макросом. hayabusa-club.ru/macros.xls (это книга с поддержкой макросов, у файла поменяно расширение, т.к. xlsm не скачивается с сервера.)Викт0р
ну, в общем можно немножко переписать макрос - и тогда с этим заморачиваться не придётся. а пока - число, которое прибавляется в этой строке к i - это, по сути, число строк, на которое сдвинуто начало диапазона от первой строки листа. т.е. № первой строки диапазона минус единица.
в вашем первом примере данные начинались с 4-й строки - поэтому прибавляли 3. во втором - со второй, поэтому прибавляем 1.
ну, в общем можно немножко переписать макрос - и тогда с этим заморачиваться не придётся. а пока - число, которое прибавляется в этой строке к i - это, по сути, число строк, на которое сдвинуто начало диапазона от первой строки листа. т.е. № первой строки диапазона минус единица.
в вашем первом примере данные начинались с 4-й строки - поэтому прибавляли 3. во втором - со второй, поэтому прибавляем 1.ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki