Un código que me muestre la cantidad de veces que esta un numero en un rango

Lo que necesito es que me muestre la cantidad de veces de menor a mayor que esta un numero de acuerdo a este rango "a1:u1296" en una hoja

2 Respuestas

Respuesta
1

¿Algo cómo esto?

Este es el código

Option Base 1
Sub muestra()
Dim x As WorksheetFunction
Set x = WorksheetFunction
Set datos = Range("a1:u1296")
With datos
    r = .Rows.Count: c = .Columns.Count
    Mini = x.Min(datos)
    Maxi = x.Max(datos)
    .Columns(c + 2).CurrentRegion.ClearContents
    Set res = .Columns(c + 2).Resize(Maxi, 2)
        matriz = res
    For i = Mini To Maxi
        matriz(i, 1) = i
        matriz(i, 2) = x.CountIf(datos, i)
    Next i
    With res
        Range(.Address) = matriz
        .Sort key1:=Range(.Columns(2).Address), order1:=xlAscending
    End With
End With
erase matriz: set res=nothing: set datos=nothing
End Sub
Respuesta
1

Te presento otra propuesta diferente. Esta no toma el rango de números entre el mínimo y máximo (quizás no estén todos los nros) sino que cuenta la aparición de cada número de la tabla.

Dejo aclaraciones en el código para realizar el seguimiento y por si necesitas utilizar otras columnas auxiliares. En col X coloqué el nro y en Y la cantidad de apariciones.

Sub cantidades()
'x Elsamatilde
Dim filU As Long
'se limpia el rango de resultados
[X:Y].ClearContents
'ubicación de lista resultante
filU = 1
Set Datos = Range("A1:U1296")
For Each cd In Datos
    'se busca si ya se encuentra en la lista de la col X
    Set busco = [X:X].Find(cd, LookIn:=xlValues, lookat:=xlWhole)
    If busco Is Nothing Then
        'si aún no está cuenta las apariciones y crea el registro
        canti = Application.WorksheetFunction.CountIf(Datos, cd)
        Range("X" & filU) = cd.Value
        Range("Y" & filU) = canti
        filU = filU + 1
    End If
Next cd
'se coloca formato texto a la col de nros (si es que tu tabla los tiene en ese formato)
[X:X].NumberFormat = "@"
'se busca el fin del rango para ordenar
filU = Range("X" & Rows.Count).End(xlUp).Row
'se ordena de menor a mayor cantidad - nro
With ActiveSheet
    .Sort.SortFields.Add Key:=Range("Y1:Y" & filU), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    .Sort.SortFields.Add Key:=Range("X1:X" & filU), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
End With
End Sub

No me quedó muy claro si necesitas que la lista esté ordenado por nro de apariciones (así quedó ) o por los números, de menor a mayor. En ese caso cambia el orden de las instrucciones SORT.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas