En un rango de celdas ordenadas por valor en una columna, seleccionar las que me interesa por el valor 10

1ª En un rango:
Range("B18:E175").Select
2ª En la columna E, están ordenadas de mayor a menor.
3ª Necesito seleccionar solamente en el rango, "B18:E175", las que en la colmna E contengan el numero 10

2 respuestas

Respuesta
2

Te refieres a, por ejemplo: 2010, 90109, 110 y etc. ¿es eso? Y cuando dices "Seleccionar" ¿exactamente qué deseas hacer con ellas? Eso de hacer un "Select" de muchos rango no necesariamente es tan útil (además de tener límites). Comenta que deseas con esas celdas.

Abraham Valencia

La cuarta columna es la "E"

Necesito que en el rango "B18:E175, me seleccione el rango :
Range("B184:E204").Select

Porque unas veces son más o menos que la columna tengan más o menos veces el 10

Copiar ese rango seleccionarlo y pegarlo en otra hoja

Para lo que necesitas hay varias formas de lograrlo usando bucles del tipo "For-Each", "Do While", etc., pero lo más eficiente es usar "Find". Prueba algo así:

Sub BuscarDatos()
Dim ValorBuscado As String
Dim CeldaSuperior As Long, CeldaInferior As Long
Dim Buscar As Range
Let ValorBuscado = "10"
With Range("E1:E2500")
    Set Buscar = .Find(ValorBuscado, , , , , xlNext)
    If Not Buscar Is Nothing Then
        Let CeldaSuperior = Buscar.Row
    End If
    Set Buscar = Nothing
    Set Buscar = .Find(ValorBuscado, , , , , xlPrevious)
    If Not Buscar Is Nothing Then
        Let CeldaInferior = Buscar.Row
    End If
End With
Range("B" & CeldaSuperior & ":" & "E" & CeldaInferior).Copy Destination:=Sheets("Hoja2").Range("B1")
End Sub

Solo ajusta el rango que yo uso de la columna "E" (With Range...) y ajusta también el nombre de la hoja de destino (Destination...). Por cierto, yo coloco el 10 entre comillas, no son necesarias las comillas cuando se trata de números pero con "Find" es útil cuando hay problemas de formatos.

Comentas

Abraham Valencia

Respuesta
1

Prueba esta macro no ocupa ciclos de ningún tipo simplemente ordena la información ascendentemente por la columna E, cuenta cuantos 10 hay, los selecciona todos a la vez y los copia todos en un solo paso a la hoja 2

Lo único que tienes que adaptar es es el nombre de la hoja en los worksheets y la celda de referencia wn los range para ajustarla a tus datos.

Sub copiar()
Set h1 = Worksheets("hoja1")
Set origen = h1.Range("b18").CurrentRegion
With origen
    c = .Columns.Count
    .Sort key1:=h1.Range(.Columns(c).Address), Order1:=xlDescending
    cuenta = WorksheetFunction.CountIf(.Columns(4), 10)
End With
Set destino = Worksheets("hoja2").Range("b18").Resize(cuenta, c)
With destino
    .Value = origen.Resize(cuenta, c).Value
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas