Ottieni il contenuto di una cella dati i numeri di riga e colonna


96

Voglio ottenere il contenuto di una cella dato il numero di riga e colonna. Il numero di riga e colonna viene memorizzato nelle celle (qui B1, B2). So che le seguenti soluzioni funzionano, ma sembrano un po 'complicate.

Sol 1

=CELL("contents",INDIRECT(ADDRESS(B1,B2)))

Sol 2

=CELL("contents",OFFSET($A$1, B1-1,B2-1))

Non esiste un metodo meno prolisso? (come = CellValue (row, col) o qualsiasi altra cosa)?

Modifica / chiarimento: voglio solo usare le formule del foglio di lavoro Excel. Nessun VBA. In breve, cerco praticamente l'equivalente del metodo VBA Cells () come formula Excel.


Possiamo ottenere un po 'più di contesto? Stai usando solo formule di Excel? VBA? Qualche altro metodo?
Saladin Akara

Risposte:


141

Non hai bisogno della parte CELL () delle tue formule:

=INDIRECT(ADDRESS(B1,B2))

o

=OFFSET($A$1, B1-1,B2-1)

funzioneranno entrambi. Notare che sia INDIRECTe OFFSETsono funzioni volatili. Le funzioni volatili possono rallentare il calcolo perché vengono calcolate ad ogni singolo ricalcolo.


Questo è abbastanza utile che mi piacerebbe vederlo modificato per avere il giusto numero di parentesi chiuse.
Wyck

6
Data la popolarità di questa domanda / risposta, sarebbe bello avere qui una piccola frase su cosa sia una funzione volatile .
LondonRob

Si noti che con la seconda forma, a seconda di $ a $ 1, è necessario non spostare in alcun modo $ a $ 1 nelle modifiche successive del foglio.
Erk

INDIRECT+ ADDRESSè la strada da percorrere. Excel nella mia lingua si traduce OFFSETin 2 parole separate da un punto. Questa è la cosa peggiore (insieme alle dieresi nei nomi delle funzioni)!
Bitterblue

29

Prova = indice (ARRAY, ROW, COLUMN)

dove: Matrice: seleziona l'intero foglio Riga, Colonna: I tuoi riferimenti di riga e colonna

Dovrebbe essere più facile da capire a chi guarda la formula.


2

Mi ci è voluto un po ', ma ecco come l'ho reso dinamico. Non dipende da una tabella ordinata.

Per prima cosa ho iniziato con una colonna di nomi di stato (colonna A) e una colonna di aeromobili in ogni stato (colonna B). (La riga 1 è una riga di intestazione).

Trovare la cella che contiene il numero di aeromobili è stato:

=MATCH(MAX($B$2:$B$54),$B$2:$B$54,0)+MIN(ROW($B$2:$B$54))-1

L'ho messo in una cella e poi ho dato a quella cella un nome, "StateRow" Quindi, usando i suggerimenti dall'alto, ho concluso con questo:

=INDIRECT(ADDRESS(StateRow,1))

Ciò restituisce il nome dello stato dal valore dinamico nella riga "StateRow", colonna 1

Ora, poiché i valori nella colonna del conteggio cambiano nel tempo man mano che vengono inseriti più dati, so sempre quale stato ha il maggior numero di aeromobili.

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.