facendo riferimento alla parte visibile della selezione durante la scrittura di una formula in Excel


0

So che ci sono molti modi per creare sottototabl che cambiano in base alla visibilità delle celle - sebbene la mia domanda possa sembrare simile - questa NON è la mia domanda.

supponiamo di avere una cartella di lavoro con 2 colonne e 5 righe, ad es

.    A      B
1    Name   Val
2    A      1
3    A      3
4    B      5
5    B      2
6    A      6
7    A      
8    B      5
9    A      2

Sto cercando di riempire la cella B7 con una media di alcune delle righe con nome "A" sopra di essa ... Quindi filtrare la tabella in base al nome col usando "A" quello che voglio ottenere è la somma della formula (B2 , B3, B6) o (anche meglio) somma (B2: B3, B6), ovvero la somma delle celle che sono visibili durante la creazione di questa formula .

Non posso usare il subtotale perché cambierebbe il suo valore quando cambio il filtro ... in teoria potrei usare il subtotale e il copia-incolla come valore, ma poi perdo la semantica del valore.

Si noti che questo valore dovrebbe rimanere costante riguardo ai futuri cambiamenti nella visibilità delle righe (non ho nemmeno bisogno che cambi se i valori in A2, A3, A6 cambiano da A a B - ma mi aspetto che cambi se B2, B3 o B6 sono cambiati ....)

So anche che se scelgo l'intervallo B2: B6 (quando ancora filtrato per mostrare solo le righe con nome "A") e premo ALT +; (windows) cambierà la selezione in modo che sia esattamente B2: B3, B6 ma questo non sembra funzionare durante la creazione di una formula :(

Solo per chiarire, i dati reali sono molto più grandi, quindi selezionare le celle una per una non è un'opzione.

Qualche idea su come ottenere il riferimento alla parte attualmente visibile dell'intervallo attualmente selezionato?

Risposte:


0

Filtrare ed entrare in cose come questa sembra un sacco di lavoro. Perché non prendere semplicemente la via d'uscita?

=IF(B2<>"","",AVERAGEIF($A$2:A2,"A",$B$2:B2))

Nella colonna C e copiarlo verso il basso. Accanto alle celle vuote, metterà la media di tutte le "A" sopra di essa. Puoi espanderlo a più condizioni usando AVERAGEIFS, e puoi cambiare la condizione da "A" ad a2 se vuoi che faccia la media di tutte le osservazioni sopra di esso per quel valore (in modo da raccogliere B, C e così via).

So che questo non risponde alla tua esatta domanda, ma la tua vera domanda può richiedere molto tempo per essere implementata, e questa è una soluzione davvero rapida

Successivamente, puoi creare un'altra colonna che consolida i valori: prende il valore in B se è lì, altrimenti il ​​valore in C. Puoi anche cambiare la formula in:

=IF(B2<>"",B2,AVERAGEIF($A$2:A2,"A",$B$2:B2))

E basta farlo tutto in una colonna.


Anche se capisco come questo possa eventualmente aiutare gli altri, non si adatta alla mia soluzione ... non esiste una colonna di criteri e non voglio aggiungerne uno, voglio solo selezionare alcune celle manualmente. Aspetterò ancora un po 'e se non avrò risposta pubblicherò una risposta che descrive ciò che ho finito per fare.
Epeleg,

@epeleg Puoi usare la seguente formula: = AVERAGEIF ($ A $ 2: A6, A7, $ B $ 2: B6) e poi puoi semplicemente incollarlo in qualsiasi cella che vuoi fare manualmente. Aggiornerà automaticamente gli intervalli.
Joe,

0

Speravo di ottenere una soluzione migliore, quindi ho aspettato, ma poiché non sembra esserci uno qui è quello che ho finito per fare:

Ho filtrato e selezionato le celle che volevo fare in media.

vale a dire nell'esempio fornito dopo il filtro basato sul nome "A" per la colonna AI ottenuto:

.    A      B
1    Name   Val
2    A      1
3    A      3
6    A      6
7    A      
9    A      2

Ad essere onesti, non sono sicuro di cosa ho fatto originariamente per risolvere questo problema, ha comportato la selezione delle celle che volevo e quindi la loro copia (costringendo un riquadro di selezione a comparire intorno a ciascuna delle celle visibili) e quindi usando alcune espressioni nel riquadro Orologi VBA per ottenere l'elenco degli indirizzi di tutte le celle selezionate.

tuttavia, se provo ora questo esempio e ho usato il mouse per selezionare da B2 a B6 e copiare. selezionando efficacemente B2: B3, B6 (perché B4 e B5 erano invisibili a causa del filtro). Non riesco a ricreare il mio one-liner :(

Detto questo, ho scoperto che ora posso usare debug.print selection.SpecialCells(xlCellTypeVisible).addressciò che non richiede nemmeno l'azione di copia, quindi è probabilmente meglio della mia soluzione originale.

Se si intende utilizzare questo metodo, è necessario tenere presente che esistono alcuni limiti al SpecialCellsmetodo nei casi in cui l'intervallo sottostante ha più di 8192 aree - vedere maggiori dettagli su questo e su come superarlo qui: https://stackoverflow.com / a / 1375508/25412

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.