Dejar solo los primeros resultados en Excel

Hola expertos. Hace tiempo que leo sus respuestas y me ayudaron muchísimo, pero no encuentro respuesta para la actual inquietud.

Necesito dejar solamente los 5 primeros resultados relacionados, de una cantidad indeterminada.

Como no sé hacer la pregunta correctamente, les pongo un ejemplo.

Actualmente tengo cientos de filas para cada resultado similar:

Columna A. Columna B

1, A

1, B

1, C

1, D

2, A

2, B

2, C

2, D

2, F

3, A

3, B

3, C..... Y así indeterminadamente miles de veces

Necesito una fórmula o Macro para que siempre que para resultados iguales de la Columna A, queden los 3 primeros de la Columna B

Ej.

1, A
1, B
1, C
2, A
2, B
2, C
3, A
3, B
3, C

Eso es posible??.

Muchas gracias por sus respuestas o por tener este gran foro.

Saludos,

Marcelo

1

1 Respuesta

806.575 pts. Excel avanzado y VBA

Aquí tienes la solución:

Pon tus datos en excel en las columnas A y B (empezando desde A1) tal y como has explicado. Después posiciónate en el primer dato de la columna de la izquierda (en A1) y ejecuta esta macro

Sub comparar()

fila = 1

columna = 5

Do While ActiveCell.Value <> ""

If InStr(valores, ActiveCell.Offset(0, 1)) = 0 Then

primero = ActiveCell.Value

valores = valores & "," & ActiveCell.Value & "," & ActiveCell.Offset(0, 1).Value

c = c + 1

End If
If c = 3 Then

valores = Mid(valores, 2, Len(valores) - 1)

valores = Split(valores, ",")

For p = 0 To UBound(valores)

Cells(fila, columna).Value = valores(p)

columna = columna + 1

If columna = 7 Then

fila = fila + 1

columna = 5

End If

Next

valores = ""

c = 0

Do While ActiveCell = primero

ActiveCell.Offset(1, 0).Select

Loop

GoTo salto

End If
ActiveCell.Offset(1, 0).Select

salto:

Loop
End Sub

Recuerda finalizar y puntuar mi labor

Muchas gracias Experto por la respuesta.

Seguramente hay alguna cosa que no estoy haciendo bien y no se genera ningún cambio, por lo que será mejor que coloque un ejemplo de lo que tengo en realidad, en la que el símbolo "-" es separador de columnas, y la columna A es la que tiene los datos repetidos de los que quiero que queden 5 resultados. En realidad son 3 columnas (A,B y C), pero pensé que con el código que me pasaran iba a ingeniármelas y resolverlo igual. Lamentablemente no fue así.

Pongo unas cuantas lineas para que veas las direferencias entre las columnas y filas:

ruc - partida - ncm2 (Fila 1 = título)
2000424073 - 56.07 - 56075090190
2001734998 - 85.39 - 85392190100
2001734998 - 90.32 - 90321090000
2001814426 - 84.72 - 84729030000
2001814426 - 84.71 - 84719014000
2001814426 - 73.26 - 73269090900
2001814426 - 83.03 - 83030000900
2001814426 - 84.72 - 84729040200
2001814426 - 48.11 - 48114910000
2001814426 - 84.73 - 84734090900
2001814426 - 84.72 - 84729099100
2001814426 - 39.19 - 39191000200
2001814426 - 85.31 - 85312000000
2002794127 - 55.08 - 55081000900
2002794127 - 56.03 - 56031290120
2004138002 - 96.07 - 96072000140
2004138002 - 96.07 - 96072000210
2004138002 - 96.07 - 96072000290
2004138002 - 96.07 - 96072000900
2004144203 - 40.05 - 40051090000
2004144203 - 39.09 - 39094099000
2004144232 - 39.20 - 39206100119
2004144232 - 94.05 - 94051093300
2004144232 - 94.05 - 94051093900
2004144232 - 94.05 - 94059900900
2004144232 - 94.05 - 94051099900
2004144232 - 39.18 - 39181000120
2004144232 - 39.19 - 39191000900
2004144232 - 49.11 - 49111090900

Te agradezco mucho nuevamente por la rápida respuesta que me diste, y por compartir conmigo tus enormes conocimientos.

Pon esos datos en el rango A1:C30 (en la primera fila he puesto un rótulo). Ahora ponte en el primer dato de la columna A es decir, A2, y ejecuta esta macro:

Sub solo5()

f = 1

Do While ActiveCell.Value <> ""

valor = ActiveCell.Value

fila = ActiveCell.Row

f = Range("f65000").End(xlUp).Row + 1

contarsi = Application.WorksheetFunction.CountIf(Columns(1), valor)

If contarsi > 5 Then

Range(Cells(fila, 1), Cells(fila + 4, 3)).Copy Destination:=Cells(f, 6)

ElseIf contarsi = 5 ThenRange(Cells(fila, 1), Cells(fila + 4, 3)).Copy Destination:=Cells(f, 6)

Else

Range(Cells(fila, 1), Cells(fila + contarsi - 1, 3)).Copy Destination:=Cells(f, 6)

End If

Do While ActiveCell.Value = valor

ActiveCell.Offset(1, 0).Select

Loop

Loop

End Sub

Recuerda finalizar y puntuar mi labor

Muchísimas gracias experto. Lo pruebo y te puntúo con la mejora calificación por la rápida y acertada respuesta.

Abrazos

¿Y bien? ¿Cómo fue?

Si todo es correcto finaliza y puntúa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas