Una matriz m*n y necesito encontrar valores

Hola. Tengo una matriz m*n y necesito encontrar todos los valores distintos de cero y que me indique en que fila y columna se encuentra cada uno de ellos.
Gracias

1 Respuesta

Respuesta
1
Creo que nadie te contesta porque no explicas de qué forma quieres que Excel te indique las filas y columnas...
¿Mediante una ventana de aviso tipo MSGBOX?
¿Mediante un par de columnas nuevas en la misma hoja?
¿Mediante una hoja nueva con dos columnas, una de Fila y otra de Columna?
¿Mediante un Libro Excel nuevo?
Si precisas mejor tu problema tal vez yo mismo pueda ayudarte.
Si, tienes razón, no me explique bien. Lo que quiero es que me indique la posición de cada numero en dos columnas aparte. Probé con la función coincidir, pero me encontré que mi matriz tiene valores repetidos.
A ver si me puedes ayudar en algo.
Muchas gracias de antemano!
Te paso esta macro de más abajo, donde tendrás que cambiar los valores en negrita por los que te interesen para tu caso en concreto.
Espero que te sirva. Si es así, recuerda finalizar la pregunta.
Saludos
Angel
+++++++++++++++++++++++++++++++++++++++++++++++++++++
Sub ACN_BuscaBlancos()
    'Rango donde tienes la matriz de datos...
    Rango = "A1:Z99"

    'Fila donde quieres que comience el resultado...
    FilaDestino = 2
    'Columna donde quieres que aparezcan las columnas de las celdas encontradas...

    ColumnaDestino1 = "H"
    'Columna donde quieres que aparezcan las filas de las celdas encontradas...
    ColumnaDestino2 = "I"
    Range(ColumnaDestino1 + ":" + ColumnaDestino2).Value = ""
    Range(Rango).Select
    For Each Celda In Selection.Cells
        With Celda
            If .Value <> "" And .Value <> 0 Then
                Fila = Mid(.Address, InStr(2, .Address, "$") + 1)
                Columna = Mid(.Address, InStr(.Address, "$") + 1, InStr(2, .Address, "$") - 2)
                Range(ColumnaDestino1 + Trim(Str(FilaDestino))).Value = Columna
                Range(ColumnaDestino2 + Trim(Str(FilaDestino))).Value = Fila
                FilaDestino = FilaDestino + 1
            End If
        End With
    Next
End Sub
¿Te sirvió de ayuda la macro que te pasé?.
Perdona por no contestar, iba a ponerme con ello ahora mismo. Luego te comento si me funciona, pero muchísimas gracias por todo.
La fórmula funciona perfectamente, yo no lo habría sacado. Muchísimas gracias.
De todas formas tengo otra pequeña pregunta: como dije antes en mi matriz tengo diferentes números y algunos repetidos, a parte de los ceros. ¿Seria posible que ademas de su posición también me pusiese el numero en cuestión en otra columna?
Por ejemplo, la matriz seria esta:
      A B C
1 0 25 0
2 12 0 12
Es decir, que el resultado sea, en una columna los números distintos de cero y luego su fila y columna correspondiente.
Numero Columna Fila
25 B 1
12 A 2
12 C 2
No se si me estoy explicando bien. Si no es así, dime y intentare hacerlo mejor.
Y perdona por las molestias!
Gracias
Me alegro de que te sirviese. Te la copio a continuación con la modificación que dices. También le he puesto para que aparezcan unas cabeceras.
Mira a ver si puedes finalizar la pregunta, por favor, para poder atender mejor al resto de gente. Gracias.
Saludos
Angel
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sub ACN_BuscaBlancos()
    Rango = "B2:F22"
    FilaDestino = 2
    ColumnaDestino1 = "I"
    ColumnaDestino2 = "J"
    ColumnaDestino3 = "H"

    Range(ColumnaDestino1 + ":" + ColumnaDestino2).Value = ""
    Range(ColumnaDestino1 + Trim(Str(FilaDestino))).Value = "Columna"
    Range(ColumnaDestino2 + Trim(Str(FilaDestino))).Value = "Fila"
    Range(ColumnaDestino3 + Trim(Str(FilaDestino))).Value = "Valor"
    FilaDestino = FilaDestino + 1
    Range(Rango).Select
    For Each Celda In Selection.Cells
        With Celda
            If .Value <> "" And .Value <> 0 Then
                Fila = Mid(.Address, InStr(2, .Address, "$") + 1)
                Columna = Mid(.Address, InStr(.Address, "$") + 1, InStr(2, .Address, "$") - 2)
                Range(ColumnaDestino1 + Trim(Str(FilaDestino))).Value = Columna
                Range(ColumnaDestino2 + Trim(Str(FilaDestino))).Value = Fila
                Range(ColumnaDestino3 + Trim(Str(FilaDestino))).Value = .Value
                FilaDestino = FilaDestino + 1
            End If
        End With
    Next
    Range("A1").Select
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas