Obtener el contenido de una celda dados los números de fila y columna

96

Quiero obtener el contenido de una celda dado su número de fila y columna. El número de fila y columna se almacenan en celdas (aquí B1, B2). Sé que las siguientes soluciones funcionan, pero se sienten un poco extrañas.

Sol 1

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

Sol 2

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

¿No existe un método menos detallado? (como = CellValue (fila, columna) o lo que sea)?

Edición / Aclaración: solo quiero usar las fórmulas de la hoja de cálculo de Excel. Sin VBA. En resumen, busco prácticamente el equivalente del método VBA Cells () como una fórmula de Excel.

Philipp
fuente
¿Podemos tener un poco más de contexto? ¿Estás usando solo fórmulas de Excel? VBA? ¿Algún otro método?
Saladin Akara

Respuestas:

141

No necesita la parte CELL () de sus fórmulas:

=INDIRECT(ADDRESS(B1,B2))

o

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

ambos funcionarán. Tenga en cuenta que ambos INDIRECTy OFFSETson funciones volátiles. Las funciones volátiles pueden ralentizar el cálculo porque se calculan en cada nuevo cálculo.

Charles Williams
fuente
Esto es lo suficientemente útil como para que me gustaría verlo editado para tener el número correcto de paréntesis de cierre.
Wyck
6
Dada la popularidad de esta pregunta / respuesta, sería genial tener aquí una pequeña oración sobre qué es una función volátil .
LondonRob
Tenga en cuenta que con el segundo formulario, dependiendo de $ a $ 1, se requiere que no mueva $ a $ 1 de ninguna manera en ediciones posteriores de la hoja.
Erk
INDIRECT+ ADDRESSes el camino a seguir. Excel en mi idioma se traduce OFFSETen 2 palabras separadas por un punto. ¡Eso es lo peor (junto con diéresis en los nombres de las funciones)!
Bitterblue
29

Prueba = índice (ARRAY, FILA, COLUMNA)

donde: Matriz: seleccione toda la hoja Fila, Columna: Sus referencias de fila y columna

Eso debería ser más fácil de entender para quienes miran la fórmula.

Albert Shenko
fuente
2

Me tomó un tiempo, pero así es como lo hice dinámico. No depende de una mesa ordenada.

Primero comencé con una columna de nombres de estados (Columna A) y una columna de aviones en cada estado (Columna B). (La fila 1 es una fila de encabezado).

Encontrar la celda que contiene el número de aviones fue:

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

Puse eso en una celda y luego le di a esa celda un nombre, "StateRow" Luego, usando los consejos de arriba, terminé con esto:

=INDIRECT(ADDRESS(StateRow,1))

Esto devuelve el nombre del estado del valor dinámico en la fila "StateRow", columna 1

Ahora, como los valores en la columna de recuento cambian con el tiempo a medida que se ingresan más datos, siempre sé qué estado tiene la mayor cantidad de aviones.

usuario3573562
fuente