Eu esperava ter uma solução melhor, então esperei, mas como parece que não há um aqui, acabei fazendo:
Eu filtrava e selecionava as células que queria calcular em média.
i.e. No exemplo fornecido após a filtragem com base no nome "A" da coluna A, obtive:
. A B
1 Name Val
2 A 1
3 A 3
6 A 6
7 A
9 A 2
Para ser sincero, não sei ao certo o que eu fiz originalmente para resolver essa questão, envolvia selecionar as células que eu queria e, em seguida, copiá-las (forçando um letreiro a aparecer em torno de cada uma das células visíveis) e usar alguma expressão no painel VBA Watches para obter a lista de endereços de todas as células selecionadas.
no entanto, se eu tentar isso no exemplo e eu usei o mouse para selecionar de B2 a B6 e copiar. efetivamente selecionando B2: B3, B6 (porque B4 e B5 são invisíveis devido ao filtro). Não consigo recriar meu one-liner: (
Dito isso, descobri agora que posso usar debug.print selection.SpecialCells(xlCellTypeVisible).address
, o que nem requer a ação de cópia, então, de fato, é provavelmente melhor do que a minha solução original.
Se você pretende usar esse método, saiba que existem alguns limites para o método SpecialCells
nos casos em que o intervalo subjacente tem mais de 8192 áreas - veja mais detalhes sobre isso e maneiras de superar isso aqui: < href="https://stackoverflow.com/a/1375508/25412"> link