Buscar un valor en una matriz n*m y devolver sus coordenadas.

13/12/2004 - 14:06 por Luis Garcia | Informe spam
Hola a todos:

Tengo una matriz (n*m) de valores enteros, y quiero buscar un valor y que me
devuelva la posicion en la matriz donde se encuentra la primera vez, tanto
fila como columna. Los valores no están ordenados por ningún criterio.

He llegado a intentarlo con formulas matriciales, las cuales he conseguido
empezar a entender, pero no consigo salirme de esta. Un ejemplo de lo que
quiero seria:

Rango (A3:L100) = Aleatorio.Entre(1;100)
Celda (B1) = 51

(D1) = Fila donde se encuentra la primera aparicion del valor (51)
(E1) = Columnas donde se encuentra la primera aparicion del valor (51)

Ya seria 'la ostia' :-) poder poner en la celda (C1) la 'n-esima' aparicion
del valor que se desea, es decir:

Si C1 = 1 => primera aparicion
Si C1 = 2 => seguna aparicion ... etc...

Muchas gracias por anticipado.

Saludos

Preguntas similare

Leer las respuestas

#1 Fernando Arroyo
13/12/2004 - 16:23 | Informe spam
Una posibilidad (todas las fórmulas, matriciales):

- para la última fila con el valor 51:

=K.ESIMO.MAYOR((A3:L100Q)*FILA(A3:L100);1)

- para el número de la última columna con el valor 51:

=K.ESIMO.MAYOR((A3:L100Q)*COLUMNA(A3:L100);1)

- para la letra de la última columna:

ÊRACTER(64+K.ESIMO.MAYOR((A3:L100Q)*COLUMNA(A3:L100);1))

- para la primera fila:

=K.ESIMO.MAYOR((A3:L100Q)*COLUMNA(A3:L100);1)

- para el número de la primera columna:

=K.ESIMO.MENOR(SI((A3:L100Q);COLUMNA(A3:L100));1)

- para la letra de la primera columna:

ÊRACTER(64+K.ESIMO.MENOR(SI((A3:L100Q);COLUMNA(A3:L100));1))



Si cambias la posición a devolver por las funciones K.ESIMO obtendrás las filas o columnas siguientes o anteriores, pero ten en cuenta que si 51 se encuentra más de una vez en la misma fila o columna, K.ESIMO devolverá tantas veces dicha fila o columna como apariciones de 51 haya.
Un saludo.


Fernando Arroyo
MS MVP - Excel


"Luis Garcia" escribió en el mensaje news:
Hola a todos:

Tengo una matriz (n*m) de valores enteros, y quiero buscar un valor y que me
devuelva la posicion en la matriz donde se encuentra la primera vez, tanto
fila como columna. Los valores no están ordenados por ningún criterio.

He llegado a intentarlo con formulas matriciales, las cuales he conseguido
empezar a entender, pero no consigo salirme de esta. Un ejemplo de lo que
quiero seria:

Rango (A3:L100) = Aleatorio.Entre(1;100)
Celda (B1) = 51

(D1) = Fila donde se encuentra la primera aparicion del valor (51)
(E1) = Columnas donde se encuentra la primera aparicion del valor (51)

Ya seria 'la ostia' :-) poder poner en la celda (C1) la 'n-esima' aparicion
del valor que se desea, es decir:

Si C1 = 1 => primera aparicion
Si C1 = 2 => seguna aparicion ... etc...

Muchas gracias por anticipado.

Saludos


Respuesta Responder a este mensaje
#2 Luis Garcia
13/12/2004 - 18:08 | Informe spam
"Fernando Arroyo" escribió en...
Una posibilidad (todas las fórmulas, matriciales):
Si cambias la posición a devolver por las funciones K.ESIMO obtendrás
las filas o columnas siguientes o anteriores, pero ten en cuenta que si 51
se encuentra más de una vez en la misma fila o columna, K.ESIMO
devolverá tantas veces dicha fila o columna como apariciones de 51 haya.




Bueno, para las últimas filas/columnas me ha servido, para las primeras
no pero 'he pillao' algo el uso de formulas matriciales y lo he
solucionado mas o menos asi:

Defino un nombre 'Datos' con el rango a buscar (A4:L100):
C2 = FILA(Datos) ''' Fila Inicial del rango de Datos

=K.ESIMO.MENOR(
SI(Datos=<valor a buscar>;
(FILA(Datos)-$C$2*COLUMNAS(Datos)+COLUMNA(Datos);
9999);
<n-esima coincidencia>)

Aqui obtengo el valor correspondiente a la posicion del elemento en
formato ((fila * nºcolumnas) + columna), que luego puede 'revertir'
para obtener la fila / columna.

Gracias Fernando

Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida