Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Формирование массива с возможными значениями - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Формирование массива с возможными значениями (Макросы/Sub)
Формирование массива с возможными значениями
SLAVICK Дата: Четверг, 04.06.2015, 15:24 | Сообщение № 21
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Так в принципе работает, но циклы, циклы..

А чем Вам так циклы насолили? :D
Попробовал, заполнил лист до конца - отработало меньше чем за 10 с.

Без циклов можно через SQL запросы сделать(и сортировать тоже).

Но я их боюсь :D и обхожусь в большинстве случаев без них.
Тут на форуме есть знатоки может помогут.

Не досмотрел - тут Ikki уже предлагал их


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 04.06.2015, 15:30
 
Ответить
Сообщение
Так в принципе работает, но циклы, циклы..

А чем Вам так циклы насолили? :D
Попробовал, заполнил лист до конца - отработало меньше чем за 10 с.

Без циклов можно через SQL запросы сделать(и сортировать тоже).

Но я их боюсь :D и обхожусь в большинстве случаев без них.
Тут на форуме есть знатоки может помогут.

Не досмотрел - тут 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]
К сообщению приложен файл: 8518643-1-.xls (66.5 Kb)


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
так как с циклом и кучей условий и непродуктивно
Условия все равно надо проверять при любом методе решения, так что к циклам это не имеет отношения.
Если использовать циклы программа получится большая
Вам шашечки или ехать? Размер/количество интерпретируемого кода обычно слабо связан с производительностью программы. С другой стороны, приведенные вам примеры с использованием циклов производят обычно всего один проход по исходным данным, без чего, как вы понимаете, физически не обойтись :)
Идиосинкразия к циклам - излечима...


Skype: andre.tm.007
Donate: Qiwi: 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]


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
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Формирование массива с возможными значениями (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!