2011-01-27 18 views
76

Quiero obtener el contenido de una celda dado su número de fila y columna. El número de fila y columna se almacena en celdas (aquí B1, B2). Sé que las siguientes soluciones funcionan, pero se sienten un poco hacky.Obtener contenido de una celda dados los números de fila y columna

Sol 1

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

Sol 2

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

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

Editar/Aclarar: Solo quiero usar las fórmulas de la hoja de cálculo de Excel. Sin VBA. En resumen, busco el equivalente del método VBA Cells() como una excelente fórmula.

+0

¿Podemos obtener un poco más de contexto? ¿Estás usando solo fórmulas de Excel? VBA? Algún otro método? –

Respuesta

118

Usted no necesita la parte CELULAR() de sus fórmulas:

=INDIRECT(ADDRESS(B1,B2)) 

o

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

será tanto trabajo. Tenga en cuenta que tanto INDIRECT como OFFSET son funciones volátiles. Las funciones volátiles pueden ralentizar el cálculo porque se calculan en cada recálculo único.

+0

Esto es lo suficientemente útil como para que me gustaría editarlo 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é función [volátil] (https://msdn.microsoft.com/en-us/library/office/bb687891.aspx # sectionSection2) es. – LondonRob

+0

Tenga en cuenta que con el segundo formulario, dependiendo de $ a $ 1, se requiere que no se mueva $ a $ 1 de ninguna manera en ediciones posteriores de la hoja. – Erk

20

Try = índice (ARRAY, fila, columna)

donde: Matriz: seleccionar el conjunto de hoja fila, columna: Su fila y columna hace referencia a

Eso debería ser más fácil de entender para aquellos que buscan en la fórmula.

1

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

Primero comencé con una columna de nombres de estado (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 aeronaves fue:

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

que poner esto en una celda y luego dio esa celda un nombre, "StateRow" Luego, utilizando las puntas de arriba, acabé 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 el recuento cambio de columna con el tiempo a medida que se ingresan más datos, siempre sé qué estado tiene más aviones.

Cuestiones relacionadas