Ciclo for para contar numeros repetidos en excel vba

Quisiera que me apoyaran con un codigo que cuente numeros repetidos pero lo complejo es que no quiero un resultado total, sino por cada numero, es decir; tengo una serie de numeros asi:

3, 3, 3, 4, 4, 4, 4, 4, 6, 7, 7, 9, 9, 9, 9, 9. Lo que neceisto es contar cuantos numero hay de cada uno y que a su vez me devuelva lo siguiente: 3, 4, 6, 7, 9 hay 3 numero 3, hay 5 numero 4, hay 1 numero 6, hay 2 numero 7, hay 5 numero 9, es decir; que no solamente me diga que numeros son sino que cantidad de cada uno hay, no tengo la menor idea de como hacerlo. Intente con este codigo pero lo unico que hace es mostrarme los que estan repetidos y los marca en color rojo:

Definimos las columnas que queremos analizar y marcar elementos duplicados
fin = Application.CountA(Worksheets("PAC_Print").Range("12:1"))
For i = 1 To fin
'Definimos el rango de cada columnas, desde la celda 1 hasta el final de la hoja
Range(Cells(12, i), Cells(65536, i)).Select
'Indicamos para cada columna y rango seleccionado el mismo proceso mediante un bucle
'donde debe encontrar las celdas que se repitan en cada columna y marcarlas en rojo.
With Selection
'borramos formatos condicionales previos
.FormatConditions.Delete
'utilizamos el método FormatConditions.AddUniqueValues para detectar
'valores unicos o duplicados
.FormatConditions.AddUniqueValues
'seleccionamos y marcamos en rojo los valores duplicados
.FormatConditions(1).DupeUnique = xlDuplicate
.FormatConditions(1).Interior.Color = vbRed
End With
Next

Alguien me puede apoyar?

Respuesta
1
Sub Consolidar()
'@dj.vivanco
    'limpio
    Range("B2:C1000").ClearContents
    fila = 2
    filaRes = 2
    Do
        cuenta = 0
        Do
            numero = Cells(fila, "A").Value
            cuenta = cuenta + 1
            fila = fila + 1
        Loop Until numero <> Cells(fila, "A")
        'resultado de cada numero
        Cells(filaRes, "B").Value = numero
        Cells(filaRes, "C").Value = cuenta
        filaRes = filaRes + 1
    Loop Until Cells(fila, "A").Value = vbNullString 'loop hasta que encuentre ningun dato
End Sub

1 respuesta más de otro experto

Respuesta
2

Aquí una macro con otro enfoque para considerar:

Sub Contar_Numeros()
  Dim c As Range
  Dim dic As Object
  '
  Range("B2:C" & Rows.Count).ClearContents
  Set dic = CreateObject("Scripting.Dictionary")
  For Each c In Range("A2", Range("A" & Rows.Count).End(3))
    dic(c.Value) = dic(c.Value) + 1
  Next
  Range("B2").Resize(dic.Count, 2).Value = Application.Transpose(Array(dic.keys, dic.items))
End Sub

Resultado:

¡Gracias!  Muy buen enfoque con un ciclo foreach, gracias nuevamente, no soy muy bueno con vba pero ustedes me dan posibilidades de aprender mejor

Encantado de ayudarte, gra cias por comentar.

También puedes lograr el resultado utilizando una tabla dinámica:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas