Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Excel, вопрос по фильтрам 
:(
    Опции темы
Andrew1
Дата 30.5.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.4.2006

Репутация: нет
Всего: нет



Есть пользовательская функция, аргументом которой является диапазон ячеек. Функция проводит расчет для этого диапазона. Подскажите как при наложении фильтра на этот диапазон сделать так, чтобы подсчитывались только видимые значения (удовлетворяющие фильтру)? Или иначе, как определить отфильтрованый диапазон ячеек?
 
PM MAIL   Вверх
Дмит
Дата 30.5.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 21.4.2006
Где: г.Волгоград

Репутация: 8
Всего: 9



К примеру:
Код

Dim i As Long
For i = 1 To Range("A1:D20").Rows.Count
    If Range("A1:D20").Rows(i).Hidden = False Then
        Range("A1:D20").Cells(i, 1) = "TS"
    End If
Next
 
PM MAIL WWW   Вверх
Aloha
Дата 30.5.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
**


Профиль
Группа: Участник Клуба
Сообщений: 351
Регистрация: 14.5.2006

Репутация: 5
Всего: 165



Andrew1
У меня работает такой код:
Код

Sub sVisibleRng()
  Dim sh As Worksheet
  Dim AF_Rng As Range
  Dim VisibleRng As Range
  Dim i As Integer
  Set sh = Worksheets("Лист1")
  Set AF_Rng = sh.AutoFilter.Range
Debug.Print AF_Rng.Address
  For i = 1 To AF_Rng.Rows.Count   'если 1-я строка автофильтра - заголовок то
                                   'цикл начинаем с i=2
    If Not AF_Rng.Rows(i).Hidden Then
      If TypeName(VisibleRng) = "Nothing" Then
        Set VisibleRng = sh.AutoFilter.Range.Rows(i)
      Else
        Set VisibleRng = Union(VisibleRng, AF_Rng.Rows(i))
      End If
    End If
  Next i
Debug.Print VisibleRng.Address
  Call myFunction(VisibleRng)
End Sub

Function myFunction(myRng As Range)

End Function

 
PM   Вверх
AsIs
Дата 30.5.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 2.4.2005
Где: Санкт-Петербург

Репутация: 2
Всего: 17



Цитата(Andrew1 @ 30.5.2006,  13:09)
Есть пользовательская функция, аргументом которой является диапазон ячеек. Функция проводит расчет для этого диапазона. Подскажите как при наложении фильтра на этот диапазон сделать так, чтобы подсчитывались только видимые значения (удовлетворяющие фильтру)? Или иначе, как определить отфильтрованый диапазон ячеек?

Если без макросов, то функция Промежуточные.Итоги. 
PM MAIL ICQ   Вверх
Staruha
Дата 30.5.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Дмит
 
Цитата

If Range("A1:D20").Rows(i).Hidden = False Then
        Range("A1:D20").Cells(i, 1) = "TS"

 
Код

 If Rows(i).Hidden = false Then
   накопитель=накопитель+ Cells(i, 1) 
 


--------------------
Возмездие настигнет
PM MAIL   Вверх
Andrew1
Дата 31.5.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 13.4.2006

Репутация: нет
Всего: нет



Цитата(AsIs @  30.5.2006,  19:17 Найти цитируемый пост)
Если без макросов, то функция Промежуточные.Итоги.  

Дело в том, что эта функция позволяет использовать только 11 итоговых функций. А как быть с остальными?

Цитата(Aloha @  30.5.2006,  15:12 Найти цитируемый пост)

    If Not AF_Rng.Rows(i).Hidden Then
      If TypeName(VisibleRng) = "Nothing" Then
        Set VisibleRng = sh.AutoFilter.Range.Rows(i)
      Else
        Set VisibleRng = Union(VisibleRng, AF_Rng.Rows(i))
      End If
    End If

Такой код работает и в результате полученый диапазон можно вставить в стандартную функцию (WorksheetFunction). Но возникла такая проблема: если стандартная функция в качестве аргументов требует два диапазона (напр. функция НАКЛОН), то если этим кодом вычислить отдельно два диапазона и подставить их в эту функцию - возникает ошибка. Это связано с тем, что адрес диапазона имеет вид (напр. $A$1,$A$3:$A$5). Если подставить в функцию два таких диапазона, то она это не понимает. Можно это как-то решить? Очень не хотелось бы самому писать алгоритмы для подсчета такого, какой делают стандартные функции.
 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0701 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.