Modificar esta macro para que me de los 10 mejores resultados de una columna

James Bond me creó esta macro que funciona perfectamente y que entre otras cosas lo que hace es devolverme los 10 peores resultados de una columna. He intentado modificarla para que me devuelva los 10 mejores resultados de la misma columna ordenados de mayor a menor pero no he sabido hacerlo. ¿Me podéis ayudar y de paso dar la explicación de los cambios para así aprender? Gracias anticipadas.

Sub copiar_datos()
campo = Sheets("resumen").Range("b2")
With Sheets("hoja2").Range("a1").CurrentRegion
    . AutoFilter 2, campo
    . Columns(1). Copy: Sheets("resumen"). Range("a10"). PasteSpecial
    . Columns(2). Copy: Sheets("resumen"). Range("b10"). PasteSpecial
    . Columns(6). Copy: Sheets("resumen"). Range("c10"). PasteSpecial
    . Columns(12). Copy: Sheets("resumen"). Range("d10"). PasteSpecial
    . Columns(13). Copy: Sheets("resumen"). Range("e10"). PasteSpecial
    . AutoFilter
End With
Sheets("resumen").Select
Set datos = Range("a10").CurrentRegion
With datos
    col = .Columns.Count: filas = .Rows.Count
    .Sort key1:=Range(.Columns(col).Address), order1:=xlAscending, Header:=True
    .Rows(11).Resize(filas).Clear
End With
Set datos = Nothing
End Sub
Respuesta
1

Quieres sacar simultáneamente ambos valores, ¿es decir lo 10 peores y los 10 mejores o bien quieres que la amcro te pregunte si en ese momento quieres uno de los 2?

Simultáneamente no, o que la macro me pregunte u otra macro que me saque los 10 mejores y así les asigno 2 botones. Gracias.

Para no hacer otra macro solo le hice estas modificación, le agregue una variable llamada valida que a través de un msgbox con una opción Vbyesno te va a preguntar si quieres que te muestre los 10 peores si le respondes no entonces te mostrara los 10 mejores, el valor por default para el VByes es 6 cuando seleccionas el botón si, y la macro continua como la version anterior, en caso de quieras programar buttonoption debes copiar la macro anterior y solo cambiar el nombre de la 2a macro y en esa 2a macro el orden xlascending por xldescending

Sub muestra_los_10peores()
Sheets("resumen").Range("a10").CurrentRegion.Clear
campo = Sheets("resumen").Range("b2")
With Sheets("hoja2").Range("a1").CurrentRegion
    . AutoFilter 2, campo
    . Columns(1). Copy: Sheets("resumen"). Range("a10"). PasteSpecial
    . Columns(2). Copy: Sheets("resumen"). Range("b10"). PasteSpecial
    . Columns(6). Copy: Sheets("resumen"). Range("c10"). PasteSpecial
    . Columns(12). Copy: Sheets("resumen"). Range("d10"). PasteSpecial
    . Columns(13). Copy: Sheets("resumen"). Range("e10"). PasteSpecial
    . AutoFilter
End With
Sheets("resumen").Select
Set datos = Range("a10").CurrentRegion
With datos
    col = .Columns.Count: filas = .Rows.Count
    VALIDA = MsgBox("mostrar los 10 peores?", vbYesNo, "AVISO")
    If VALIDA = 6 Then
        .Sort key1:=Range(.Columns(col).Address), order1:=xlAscending, Header:=True
    Else
        .Sort key1:=Range(.Columns(col).Address), order1:=xlDescending, Header:=True
    End If
    .Rows(11).Resize(filas).Clear
End With
Set datos = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas