Logo_Access_global_380x114Favicon_Access_global_180x180Logo_Access_global_380x114Logo_Access_global_380x114
  • Home
  • University
    • Destellos formativos
  • Labs
  • TV
  • Secciones
    • El mundo de Access
    • Explorando VBA
      • Artículos sobre VBA
      • Un trocito de código
    • Entrevistas
      • Profesionales de Access
    • El rincón de Excel
    • Bases de datos
      • MS SQL
      • MySQL
      • postgreSQL
      • SQLite
    • Clases magistrales
    • Utilidades hechas con Access
  • Access en el mundo
  • ¿Quiénes somos?
  • Cómo colaborar
  • Eventos
✕
            No hay resultados Mostrar todos los resultados
            Función que convierte cualquier carácter a texto puramente ASCII (Access VBA)
            19/03/2023
            ¿Mis procedimientos tienen tratamiento de errores?
            21/03/2023
            Mostrar todos

            Moda, mediana y algo más

            Publicado por Alba Salvá
            Categorías
            • Destellos formativos
            Etiquetas
            • BracketString
            • RecordCount
            • Trim
            Function sMedian(sCampo As String, sTabla As String, Optional sDonde As String) As Double
            '----------------------------------------------------------------------------------------------------------------------------------------------
            ' Fuente            : https://access-global.net/vba-moda-mediana-y-algo-mas
            '----------------------------------------------------------------------------------------------------------------------------------------------
            ' Título            : sMedian
            ' Autor original    : Alba Salvá
            ' Creado            : 06/12/2010
            ' Propósito         : Función que devuelve la mediana de los valores de una tabla
            ' Argumentos        : La sintaxis de la función consta de los siguientes argumentos
            '                     Variable          Modo          Descripción
            '---------------------------------------------------------------------------------------------------------------------------------------------
            '                     sCampo           Obligatorio    Nombre del campo
            '                     sTabla           Obligatorio    Nombre de la tabla
            '                     sDonde           Opcional       Criterios adicionales para la búsqueda
            '----------------------------------------------------------------------------------------------------------------------------------------------
            ' Retorno           : Double
            '----------------------------------------------------------------------------------------------------------------------------------------------
            ' Test:             : Para adaptar este código en tu aplicación puedes basarte en este procedimiento test. Copiar el bloque siguiente al
            '                     portapapeles y pega en el editor de VBA. Descomentar la línea que nos interese y pulsar F5 para ver su funcionamiento.
            '
            ' Sub sMedian_test()
            ' Dim mediana
            '
            '   mediana = sMedian("campo", "tabla")
            '   Debug.Print "La mediana es: " & mediana
            '
            ' End Sub
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            Dim Rs As Recordset
            Dim sSql As String
            Dim NumReg As Long
            Dim Valor1 As Double
            Dim sTbl As String
            Dim sFld As String
                
                sTbl = wzBracketString(sTabla, 1)
                sFld = wzBracketString(sCampo, 1)
                
                sMedian = False
                
                On Error GoTo sMedian_Error
                
                sSql = "SELECT " & sFld & " FROM " & sTbl & " ORDER BY " & sFld
                
                If Trim(sDonde) & "" <> "" Then
                    sSql = sSql & " WHERE " & sDonde
                End If
                
                Set Rs = CurrentDb.OpenRecordset(sSql, dbOpenDynaset)
                    If Rs.RecordCount > 0 Then
                        Rs.MoveLast
                        NumReg = Rs.RecordCount
                        
                        If NumReg Mod 2 = 1 Then 'Es impar.
                            Rs.MoveFirst
                            Rs.Move NumReg / 2
                            sMedian = Rs(sFld)
                        Else ' Es par.
                            Rs.MoveFirst
                            Rs.Move NumReg / 2
                            Valor1 = Rs(sFld)
                            Rs.MovePrevious
                            sMedian = (Valor1 + Rs(sFld)) / 2
                        End If
                    End If
                    
                    Rs.Close
                Set Rs = Nothing
            
                On Error GoTo 0
                Exit Function
            
            sMedian_Error:
            
                MsgBox "Error " & Err.Number & " (" & Err.Description & ") en Function sMedian del Módulo modAggDom"
            
            End Function
            
            Function sModa(sCampo As String, sTabla As String, Optional sDonde As String) As Double
            '----------------------------------------------------------------------------------------------------------------------------------------------
            ' Fuente            : https://access-global.net/vba-moda-mediana-y-algo-mas
            '----------------------------------------------------------------------------------------------------------------------------------------------
            ' Título            : sModa
            ' Autor original    : Alba Salvá
            ' Creado            : 06/12/2010
            ' Propósito         : Función que devuelve la moda de los valores de una tabla
            ' Argumentos        : La sintaxis de la función consta de los siguientes argumentos
            '                     Variable          Modo          Descripción
            '---------------------------------------------------------------------------------------------------------------------------------------------
            '                     sCampo           Obligatorio    Nombre del campo
            '                     sTabla           Obligatorio    Nombre de la tabla
            '                     sDonde           Opcional       Criterios adicionales para la búsqueda
            '----------------------------------------------------------------------------------------------------------------------------------------------
            ' Retorno           : Dble
            '----------------------------------------------------------------------------------------------------------------------------------------------
            ' Test:             : Para adaptar este código en tu aplicación puedes basarte en este procedimiento test. Copiar el bloque siguiente al
            '                     portapapeles y pega en el editor de VBA. Descomentar la línea que nos interese y pulsar F5 para ver su funcionamiento.
            '
            ' Sub sModa_test()
            ' Dim moda
            '
            '   moda = sModa("campo", "tabla")
            '   Debug.Print "La moda es: " & moda
            '
            ' End Sub
            '-----------------------------------------------------------------------------------------------------------------------------------------------
            Dim Rs As Recordset
            Dim MiSQL As String
            Dim sTbl As String
            Dim sFld As String
                
                sTbl = wzBracketString(sTabla, 1)
                sFld = wzBracketString(sCampo, 1)
                
            
                On Error GoTo sModa_Error
            
                MiSQL = "SELECT " & sFld & vbCrLf & _
                       " FROM (SELECT " & sFld & ", Count(" & sFld & ") AS Frecuencia FROM " & sTbl & " GROUP BY " & sFld
                       
                If Trim(sDonde) & "" <> "" Then
                    MiSQL = MiSQL & " HAVING " & sDonde
                End If
                       
                MiSQL = MiSQL & ") AS Datos_Frecuencia " & vbCrLf & _
                       "WHERE frecuencia = (SELECT MAX(Frecuencia) FROM (SELECT numero, Count(numero) AS Frecuencia FROM test GROUP BY numero));"
            
                Set Rs = CurrentDb.OpenRecordset(MiSQL)
            
                    If Rs.BOF And Rs.EOF Then
                        sModa = Null
                    Else
                        Rs.MoveFirst
                        sModa = Rs(sFld)
                    End If
                
                    Rs.Close
                Set Rs = Nothing
            
                On Error GoTo 0
                Exit Function
            
            sModa_Error:
            
                MsgBox "Error " & Err.Number & " (" & Err.Description & ") en Function sModa del Módulo modAlbaStats"
            
            End Function
            ¡Ver en el repositorio!
            Compartir
            61
            Alba Salvá
            Alba Salvá

            Entradas relacionadas

            31/05/2023

            VBA: crea códigos QR sin conexión a Internet


            Leer más
            30/05/2023

            VBA: imprimir sin informes


            Leer más
            29/05/2023

            VBA: método BrowseTo


            Leer más

            Deja una respuesta Cancelar la respuesta

            Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

            ETIQUETAS

            Access API ComboBox Consultas CountOfDeclarationLines CountOfLines CStr DCount Diseño DoCmd Excel Fecha FileExists FileSystemObject Filtros For Each...Next Formulario Formularios Funciones Funciones de dominio GetFolder Google maps Informes InStr Kill Listbox Mid Mod Módulos Node ProcCountLines Procedimientos ProcOfLine References Replace Ribbon RunCommand Split Tablas TreeView VBA VBE VBIDE With...End With WizHook

            ÚLTIMAS ENTRADAS

            • 0
              VBA: crea códigos QR sin conexión a Internet
              31/05/2023
            • 0
              VBA: imprimir sin informes
              30/05/2023

            ¿QUIERES PUBLICITAR TU EMPRESA AQUÍ?

            SUSCRÍBETE A NUESTRO
            NEWSLETTER

            Recibirás información puntual sobre el mundo de Access y VBA

            ¡Próximamente!

            Promovemos el uso de Access y de la programación en VBA en todo el mundo

            Centro de conocimiento


            Toda la sabiduría de los mejores programadores de Access y VBA a tu alcance.

            Legal

            Política de privacidad

            Condiciones de uso

            Condiciones del redactor

            ®Access Global 2021 | All right reserved
                      No hay resultados Mostrar todos los resultados