Buscar dentro de matriz excel

Tengo una matriz de datos de m*m con las distancias de puntos( coordenadas). Necesito buscar aquellas coordenadas que la distancia sea menos a 200 ycopiar las coordenadas a otra hoJa.

1 respuesta

Respuesta
1

Lo que puedes es hacer una macro "barriendo las coordenadas" y copiando las mayores a 200.

Para ello abres el editor de Vba de Excel con Alt+F11 y creas un nuevo módulo y copias el siguiente código:

Option Explicit
Sub CopiarCoordenadas()
Dim i As Integer 'contador de filas en la hoja de datos
Dim k As Integer 'contador de filas en la hoja de coordenadas mayores
Dim cx, cy, cd As Integer 'cx: columna de coordenada en x;cy: columna de coordenada en y;cd: columna de distancia
Dim CL As Double: CL = 200 'Coordenada límite, en este caso 200
Dim FilaInicial, FilaFinal As Integer
Dim HD As Worksheet
Dim HR As Worksheet
Set HD = Worksheets("Hoja1") 'Hoja datos
Set HR = Worksheets("Hoja2") 'Hoja respuestas
FilaInicial = 2 'es la fila donde inician tus datos
FilaFinal = 100 'fila donde terminan tus datos
k = 3 'fila para empezar a copiar las coordenadas mayores a CL
cx = 1 'columna de coordenada en X
cy = 2 'columna de coordenada en Y
cd = 3 'columna distancia
For i = FilaInicial To FilaFinal
If HD.Cells(i, 3).Value >= CL Then
HR.Cells(k, 1) = HD.Cells(i, cx).Value
HR.Cells(k, 2) = HD.Cells(i, cy).Value
HR.Cells(k, 3) = HD.Cells(i, cd).Value
k = k + 1
End If
Next i
End Sub

Gracias, pero tengo la siguiente consulta relacionada, tengo una matriz de 10 por diez, con unas celdas con ceros y las otras con texto. Lo que necesito es llevar aquellas celdas con valores a otra hija como columna.

Gracias

Entiendo que es una sola columna de otra hoja a la que quieres pasar los datos, y el código quedaría así:

Option Explicit
Sub CopiarMatriz()
Dim HA As Worksheet: Set HA = Worksheets("Hoja1") 'Hoja datos
Dim HB As Worksheet: Set HB = Worksheets("Hoja2") 'Hoja resultados
Dim i As Integer: i = 1 'fila desde la que se escriben los resultados
Dim c As Range 'c en la celda que se evalúa
i = 1
For Each c In HA.Range("A1:J10") 'Para cada celda (c) en el rango (donde este tu matriz)
If IsNumeric(c.Value) And c.Value <> 0 Then 'Si el valor de la celda es numérico y diferente a 0
HB.Cells(i, 1).Value = c.Value
i = i + 1
End If
Next c
End Sub

Gracias, pero quisiera saber si se puede crear para extraer valores únicos. Gracias y por supuesto que te puntuare!

Que te parece si nos valemos de lo que tenemos hecho... y luego aplicamos un filtro avanzado a columna 1 de la hoja 2, donde copie a la una segunda columna solamente los valores únicos...

El código quedaría así:

Option Explicit
Sub CopiarMatriz()
Dim HA As Worksheet: Set HA = Worksheets("Hoja1") 'Hoja datos
Dim HB As Worksheet: Set HB = Worksheets("Hoja2") 'Hoja resultados
Dim i As Integer: i = 1 'fila desde la que se escriben los resultados
Dim c As Range 'c en la celda que se evalúa
i = 1
For Each c In HA.Range("A1:J10") 'Para cada celda (c) en el rango (donde este tu matriz)
If IsNumeric(c.Value) And c.Value <> 0 Then 'Si el valor de la celda es numérico y diferente a 0
HB.Cells(i, 1).Value = c.Value
i = i + 1
End If
Next c
'AQUÍ UTILIZAMOS UN FILTRO PARA ELIMINAR LOS VALORES REPETIDOS
'RECUERDA QUE i ES EL NÚMERO DE LA ÚLTIMA FILA
'QUE SE ESCRIBIÓ EN LA HOJA RESULTS
HB.Range("A1:A" & i).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=HB.Cells(1, 2), Unique:=True
End Sub

Luego de esto podrás eliminar la primera fila, o conservarla...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas