Como hallar la moda con vba para una variable no numérica

Como podría hallar la moda si tengo una variables cualitativas ( mala, mala, regular, regular, ... Buena, muy mala, muy mala etc ) esta en una columna digamos b2:b151

Yo he utilizado tabla dinámica y sale . También he cambiado los valores a números es decir muy mala le puse 1, mala le puse 2, regular le puse 3 buena le pues 4 y muy buena 5 aplique la formula de la moda y me salio correcto pero como lo pondría en Vba.

1 respuesta

Respuesta
1

Con esta macro puedes calcular la moda:

Sub Macro2()
'calucular la moda
'por.Dam
'Poner el resultado En la variable resultado
resultado = Application.Mode(Range("B2:B151"))
'Poner el resultado en la celda B1
Range("B1") = Application.Mode(Range("B2:B151"))
End Sub

Saludos.Dam

Muchas gracias por tu ayuda es correcto pero yo quiero la moda para una variable no numérica por ejemplo buena, mala,buena,,muy buena, buena,...........150 datos

Gracias

Como la función de la moda trabajo con números, me permití crear el código para obtener la moda de valores tipo texto, de un rango determinado.

El rango preestablecido en la macro es de B2 a B151, si deseas otro rango, y que sea un rango de celdas continúas verticales, cambia esta línea en la macro:

rango = "B2:B151"

El resultado te lo deja en la celda B1, si quieres cambiarlo, sólo tienes que modificar esta línea en la macro por la celda de tu preferencia.

Range("B1") = wmoda

Macro:

Sub moda()
'obtiene la moda
'Por.Dam
hoja = ActiveSheet.Name
Worksheets.Add
hojab = ActiveSheet.Name
Sheets(hoja).Select
rango = "B2:B151"
Range(rango).Copy Destination:= _
    Sheets(hojab).Range("B2")
Sheets(hojab).Select
Range(rango).Select
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
una = 1
maximo = 0
For Each celda In Range(rango)
    If una = 1 Then
        dato = celda
        maximo = 0
        una = 2
    End If
    dato_n = celda
    If dato = dato_n Then
        cuenta = cuenta + 1
    Else
        If cuenta > maximo Then
            maximo = cuenta
            cuenta = 1
            wmoda = dato
        Else
            cuenta = 1
        End If
    End If
    dato = dato_n
Next
'datos finales
    Application.DisplayAlerts = False
    Worksheets(hojab).Delete
    Application.DisplayAlerts = True
    Sheets(hoja).Select
    Range("B1") = wmoda
End Sub

Saludos.Dam
Podrías

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas