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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2015, 18:20   #1
SkyWay
 
Регистрация: 30.08.2013
Сообщений: 8
По умолчанию Как получить значение ячейки в отфильтрованном списке?

Подскажите пожалуйста. Есть большой список на 100тыс записей.
Есть фильтры, по котором этот список можно отфильтровать.
В итоге при применение фильтр, к примеру на страницу отображаются 10 записей.
У этих записей номер строки например будет 300-400.
Вопрос, как обращаться к ячейкам, чтобы нумерация строки бралась не из общего списка, а именно по той позиции, что в полученном отфильтрованом списке. То есть с 1 и дальше.
SkyWay вне форума Ответить с цитированием
Старый 11.02.2015, 19:42   #2
SkyWay
 
Регистрация: 30.08.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от SkyWay Посмотреть сообщение
Подскажите пожалуйста. Есть большой список на 100тыс записей.
Есть фильтры, по котором этот список можно отфильтровать.
В итоге при применение фильтр, к примеру на страницу отображаются 10 записей.
У этих записей номер строки например будет 300-400.
Вопрос, как обращаться к ячейкам, чтобы нумерация строки бралась не из общего списка, а именно по той позиции, что в полученном отфильтрованом списке. То есть с 1 и дальше.
Обращаться из VBA. Диапазон имелось ввиду, что номер эти строк будет 340, 346,375, 376 и т.д.
Такую нумерацию брать для цикла, так как в полном списке 116тыс записей, а надо чтобы макрос выполнил только по тем, что выдал фильтр.
SkyWay вне форума Ответить с цитированием
Старый 11.02.2015, 19:57   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

отлично, уже теплее...
ответы начнут поступать, как только сформулируете вопрос так, что его начнут понимать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.02.2015, 19:59   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Отфильтрованные ячейки - видимые. Перебрать в цикле отфильтрованные ячейки 1-го столбца автофильтра, включая заголовок, можно так:
Код:
Sub bb()
Dim x
For Each x In ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible)
    x.Select 'для примера
Next
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 11.02.2015, 20:05   #5
SkyWay
 
Регистрация: 30.08.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от SkyWay Посмотреть сообщение
Подскажите пожалуйста. Есть большой список на 100тыс записей.
Есть фильтры, по котором этот список можно отфильтровать.
В итоге при применение фильтр, к примеру на страницу отображаются 10 записей.
У этих записей номер строки например будет 300-400.
Вопрос, как обращаться к ячейкам, чтобы нумерация строки бралась не из общего списка, а именно по той позиции, что в полученном отфильтрованом списке. То есть с 1 и дальше.
Приведу условный пример, вот в элементарной таблица, в столбце с цифрами поиск максимального значения находится по такому коду

For i = 1 To Z
If max < Cells(i, 10) Then max = Cells(i, 10)

где i это первая строка, а Z количество всего строк.


Вопрос в том, как правильно записать тот же самый алгоритм, но не на простом листе, а с отфильтрованными данными
SkyWay вне форума Ответить с цитированием
Старый 11.02.2015, 20:15   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

обьединяем то, что написал Казанский и Вы

Код:
Function MaxInFilter(c As Long)
  Dim x, mx
  mx = ActiveSheet.AutoFilter.Range.Columns(c).SpecialCells(xlCellTypeVisible).Cells(1)
  For Each x In ActiveSheet.AutoFilter.Range.Columns(c).SpecialCells(xlCellTypeVisible)
    If x.Value > mx Then mx = x.Value
  Next
  MaxInFilter = mx
End Function
здесь с - из какой колонки брать значения для поиска максимального.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.02.2015, 21:05   #7
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Кстати, для "поиска" максимального (и не только) значения в отфильтрованном диапазоне - существует стандартная функция рабочего листа =ПРОМЕЖУТОЧНЫЕ.ИТОГИ(4; ДИАПАЗОН)

Разумеется, вызвать эту функцию можно и программно, например :

Код:
MsgBox Application.Subtotal(4, ActiveSheet.AutoFilter.Range.Columns(1))
Если же в столбце нет чисел над/под отфильтрованным диапазоном, то можно сразу указать весь столбец, типа :

Код:
MsgBox [Subtotal(4,A:A)]

MsgBox Application.Subtotal(4, [A:A])
pashulka вне форума Ответить с цитированием
Старый 12.02.2015, 18:50   #8
SkyWay
 
Регистрация: 30.08.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
обьединяем то, что написал Казанский и Вы

Код:
Function MaxInFilter(c As Long)
  Dim x, mx
  mx = ActiveSheet.AutoFilter.Range.Columns(c).SpecialCells(xlCellTypeVisible).Cells(1)
  For Each x In ActiveSheet.AutoFilter.Range.Columns(c).SpecialCells(xlCellTypeVisible)
    If x.Value > mx Then mx = x.Value
  Next
  MaxInFilter = mx
End Function
здесь с - из какой колонки брать значения для поиска максимального.
Большое спасибо, очень помогло
SkyWay вне форума Ответить с цитированием
Старый 12.02.2015, 19:16   #9
SkyWay
 
Регистрация: 30.08.2013
Сообщений: 8
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
обьединяем то, что написал Казанский и Вы

Код:
Function MaxInFilter(c As Long)
  Dim x, mx
  mx = ActiveSheet.AutoFilter.Range.Columns(c).SpecialCells(xlCellTypeVisible).Cells(1)
  For Each x In ActiveSheet.AutoFilter.Range.Columns(c).SpecialCells(xlCellTypeVisible)
    If x.Value > mx Then mx = x.Value
  Next
  MaxInFilter = mx
End Function
здесь с - из какой колонки брать значения для поиска максимального.
Сильно не пинайте, но я новичок в VBA, написанный вами код подходит, вот только надо сместить вниз на одну строку, чтобы он не брал шапку. Поискал, и насколько понял надо использовать свойство Offset(1), но что то куда не вставлял его, никак не получалось, как надо(
SkyWay вне форума Ответить с цитированием
Старый 12.02.2015, 20:00   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

а Вам вообще-то нужно максимальное значение среди отфильтрованных?

Код:
Function MaxInFilter(c As Long)
  MaxInFilter = application.max(ActiveSheet.AutoFilter.Range.Columns(c).SpecialCells(xlCellTypeVisible))
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить значение ячейки имея ее адрес в виде строки bdfy Microsoft Office Excel 3 07.09.2011 12:05
Получить значение ячейки имея ее адрес в виде строки bdfy Microsoft Office Word 0 06.09.2011 22:09
Как просуммировать ячейки в которых значение более трех и значение болеетрех ячеек подряд? maruk Microsoft Office Excel 9 30.04.2011 00:07
Как сделать чтобы ячейки в выпадающем списке меняли цвет? Malinovaya Microsoft Office Excel 4 11.08.2010 16:28
Как получить измененные ячейки в VBA? motorway Microsoft Office Excel 10 15.07.2009 15:46