SLAVICK
Дата: Четверг, 04.06.2015, 15:24 |
Сообщение № 21
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация:
766
±
Замечаний:
0% ±
2019
Так в принципе работает, но циклы, циклы..
А чем Вам так циклы насолили? Попробовал, заполнил лист до конца - отработало меньше чем за 10 с. Без циклов можно через SQL запросы сделать(и сортировать тоже). Но я их боюсь и обхожусь в большинстве случаев без них. Тут на форуме есть знатоки может помогут. Не досмотрел - тут Ikki уже предлагал их
Так в принципе работает, но циклы, циклы..
А чем Вам так циклы насолили? Попробовал, заполнил лист до конца - отработало меньше чем за 10 с. Без циклов можно через SQL запросы сделать(и сортировать тоже). Но я их боюсь и обхожусь в большинстве случаев без них. Тут на форуме есть знатоки может помогут. Не досмотрел - тут Ikki уже предлагал их SLAVICK
Иногда все проще чем кажется с первого взгляда.
Сообщение отредактировал SLAVICK - Четверг, 04.06.2015, 15:30
Ответить
Сообщение Так в принципе работает, но циклы, циклы..
А чем Вам так циклы насолили? Попробовал, заполнил лист до конца - отработало меньше чем за 10 с. Без циклов можно через SQL запросы сделать(и сортировать тоже). Но я их боюсь и обхожусь в большинстве случаев без них. Тут на форуме есть знатоки может помогут. Не досмотрел - тут Ikki уже предлагал их Автор - SLAVICK Дата добавления - 04.06.2015 в 15:24
krosav4ig
Дата: Четверг, 04.06.2015, 19:10 |
Сообщение № 22
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация:
989
±
Замечаний:
0% ±
Excel 2007,2010,2013
В C2 формула для расширенного фильтра [vba]Код
Private Sub Макрос1() [D1].EntireColumn.ClearContents: [D1] = [A1]: [A1].CurrentRegion.AdvancedFilter 2, [C1:C2], [D1], 1 End Sub
[/vba] и в довесок [vba]Код
Private Sub Макрос2() Dim arr() With Application: .ScreenUpdating = 0: .EnableEvents = 0 arr = Evaluate("IF(MATCH(A1:A559&""с-т"",A1:A559&SUBSTITUTE(B1:B559,""солд."",""с-т""),)=ROW(1:559),ROW(1:559))") arr = .Transpose(.Small(.IfError(arr, ""), Evaluate("ROW(1:" & .Count(arr) & ")"))) [e2].Resize(UBound(arr)) = .Transpose(.Lookup(arr, Evaluate("ROW(1:559)"), [A1:A559].Value)) '[f2].Resize(UBound(arr)) = .Transpose(.Lookup(arr, Evaluate("ROW(1:559)"), [B1:B559].Value)) .ScreenUpdating = 1: .EnableEvents = 1: End With End Sub
[/vba]
В C2 формула для расширенного фильтра [vba]Код
Private Sub Макрос1() [D1].EntireColumn.ClearContents: [D1] = [A1]: [A1].CurrentRegion.AdvancedFilter 2, [C1:C2], [D1], 1 End Sub
[/vba] и в довесок [vba]Код
Private Sub Макрос2() Dim arr() With Application: .ScreenUpdating = 0: .EnableEvents = 0 arr = Evaluate("IF(MATCH(A1:A559&""с-т"",A1:A559&SUBSTITUTE(B1:B559,""солд."",""с-т""),)=ROW(1:559),ROW(1:559))") arr = .Transpose(.Small(.IfError(arr, ""), Evaluate("ROW(1:" & .Count(arr) & ")"))) [e2].Resize(UBound(arr)) = .Transpose(.Lookup(arr, Evaluate("ROW(1:559)"), [A1:A559].Value)) '[f2].Resize(UBound(arr)) = .Transpose(.Lookup(arr, Evaluate("ROW(1:559)"), [B1:B559].Value)) .ScreenUpdating = 1: .EnableEvents = 1: End With End Sub
[/vba] krosav4ig
email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
Сообщение отредактировал krosav4ig - Четверг, 04.06.2015, 20:19
Ответить
Сообщение В C2 формула для расширенного фильтра [vba]Код
Private Sub Макрос1() [D1].EntireColumn.ClearContents: [D1] = [A1]: [A1].CurrentRegion.AdvancedFilter 2, [C1:C2], [D1], 1 End Sub
[/vba] и в довесок [vba]Код
Private Sub Макрос2() Dim arr() With Application: .ScreenUpdating = 0: .EnableEvents = 0 arr = Evaluate("IF(MATCH(A1:A559&""с-т"",A1:A559&SUBSTITUTE(B1:B559,""солд."",""с-т""),)=ROW(1:559),ROW(1:559))") arr = .Transpose(.Small(.IfError(arr, ""), Evaluate("ROW(1:" & .Count(arr) & ")"))) [e2].Resize(UBound(arr)) = .Transpose(.Lookup(arr, Evaluate("ROW(1:559)"), [A1:A559].Value)) '[f2].Resize(UBound(arr)) = .Transpose(.Lookup(arr, Evaluate("ROW(1:559)"), [B1:B559].Value)) .ScreenUpdating = 1: .EnableEvents = 1: End With End Sub
[/vba] Автор - krosav4ig Дата добавления - 04.06.2015 в 19:10
AndreTM
Дата: Четверг, 04.06.2015, 23:48 |
Сообщение № 23
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация:
500
±
Замечаний:
0% ±
2003 & 2010
так как с циклом и кучей условий и непродуктивно
Условия все равно надо проверять при любом методе решения, так что к циклам это не имеет отношения. Если использовать циклы программа получится большая
Вам шашечки или ехать? Размер/количество интерпретируемого кода обычно слабо связан с производительностью программы. С другой стороны, приведенные вам примеры с использованием циклов производят обычно всего один проход по исходным данным, без чего, как вы понимаете, физически не обойтись Идиосинкразия к циклам - излечима...
так как с циклом и кучей условий и непродуктивно
Условия все равно надо проверять при любом методе решения, так что к циклам это не имеет отношения. Если использовать циклы программа получится большая
Вам шашечки или ехать? Размер/количество интерпретируемого кода обычно слабо связан с производительностью программы. С другой стороны, приведенные вам примеры с использованием циклов производят обычно всего один проход по исходным данным, без чего, как вы понимаете, физически не обойтись Идиосинкразия к циклам - излечима... AndreTM
Skype: andre.tm.007 Donate: Q iwi: 9517375010
Ответить
Сообщение так как с циклом и кучей условий и непродуктивно
Условия все равно надо проверять при любом методе решения, так что к циклам это не имеет отношения. Если использовать циклы программа получится большая
Вам шашечки или ехать? Размер/количество интерпретируемого кода обычно слабо связан с производительностью программы. С другой стороны, приведенные вам примеры с использованием циклов производят обычно всего один проход по исходным данным, без чего, как вы понимаете, физически не обойтись Идиосинкразия к циклам - излечима... Автор - AndreTM Дата добавления - 04.06.2015 в 23:48
Hugo
Дата: Среда, 10.06.2015, 12:22 |
Сообщение № 24
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация:
707
±
Замечаний:
0% ±
2019
Быстрее так: [vba]Код
If Len(Trim(a(i, 2)) > 0 then if InStr("с-т|солд.", a(i, 2)) > 0 Then ... end if end if
[/vba]
Быстрее так: [vba]Код
If Len(Trim(a(i, 2)) > 0 then if InStr("с-т|солд.", a(i, 2)) > 0 Then ... end if end if
[/vba] Hugo
excel@nxt.ru webmoney: E265281470651 Z422237915069
Ответить
Сообщение Быстрее так: [vba]Код
If Len(Trim(a(i, 2)) > 0 then if InStr("с-т|солд.", a(i, 2)) > 0 Then ... end if end if
[/vba] Автор - Hugo Дата добавления - 10.06.2015 в 12:22