UDF: eXl_SubtotalHorizontal calcula SUBTOTALES por Filas

0

 

Código:


Function eXl_SubtotalHorizontal(Funcion As Integer, ParamArray Rangos() As Variant) As Variant


    Application.Volatile


    Dim R As Range, S As Double, P As Double, Vlr() As Double, C As Long, T As Long, V As Long, Rng As Variant

    S = 0

    P = 1

    C = 0

    T = 0

    V = 0

    On Error GoTo ManejoError

    For Each Rng In Rangos

        If TypeOf Rng Is Range Then

            For Each R In Rng

                If Not R.EntireColumn.Hidden Then

                    If Not IsEmpty(R.Value) Then

                        If IsNumeric(R.Value) Then

                            V = V + 1

                            S = S + R.Value

                            P = P * R.Value

                            ReDim Preserve Vlr(C)

                            Vlr(C) = R.Value

                            C = C + 1

                        End If

                        T = T + 1

                    End If

                End If

            Next R

        Else

            eXl_SubtotalHorizontal = CVErr(xlErrValue)

            Exit Function

        End If

    Next Rng

    Select Case Funcion

        Case 1

            If V > 0 Then

                eXl_SubtotalHorizontal = WorksheetFunction.Average(Vlr)

            Else

                eXl_SubtotalHorizontal = CVErr(xlErrDiv0)

            End If

        Case 2

            eXl_SubtotalHorizontal = V

        Case 3

            eXl_SubtotalHorizontal = T

        Case 4

            If V > 0 Then

                eXl_SubtotalHorizontal = WorksheetFunction.Max(Vlr)

            Else

                eXl_SubtotalHorizontal = CVErr(xlErrNum)

            End If

        Case 5

            If V > 0 Then

                eXl_SubtotalHorizontal = WorksheetFunction.Min(Vlr)

            Else

                eXl_SubtotalHorizontal = CVErr(xlErrNum)

            End If

        Case 6

            If V > 0 Then

                eXl_SubtotalHorizontal = P

            Else

                eXl_SubtotalHorizontal = 0

            End If

        Case 7

            If V > 1 Then

                eXl_SubtotalHorizontal = WorksheetFunction.StDev(Vlr)

            Else

                eXl_SubtotalHorizontal = CVErr(xlErrNum)

            End If

        Case 8

            If V > 0 Then

                eXl_SubtotalHorizontal = WorksheetFunction.StDev_P(Vlr)

            Else

                eXl_SubtotalHorizontal = CVErr(xlErrNum)

            End If

        Case 10

            If V > 1 Then

                eXl_SubtotalHorizontal = WorksheetFunction.Var(Vlr)

            Else

                eXl_SubtotalHorizontal = CVErr(xlErrNum)

            End If

        Case 11

            If V > 0 Then

                eXl_SubtotalHorizontal = WorksheetFunction.Var_P(Vlr)

            Else

                eXl_SubtotalHorizontal = CVErr(xlErrNum)

            End If

        Case 9

            eXl_SubtotalHorizontal = S

        Case Else

            eXl_SubtotalHorizontal = CVErr(xlErrValue)

    End Select

    Exit Function


ManejoError:

    eXl_SubtotalHorizontal = CVErr(xlErrValue)

End Function


👉 Como hacer que la UDF (User Defined Functions) esté disponible como una Función Nativa de Excel


⭐ Si te gustó, por favor regístrate en nuestra Lista de correo y Suscríbete a mi canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

Entradas que pueden interesarte

Sin comentarios

Etiquetas:
#aprendiendoexcel365, #josealcaldealias, #Excel, #funciones, #UDF, #Visual Basic, #VBA, #DAX, #Tips, #Basico, #Microsoft Excel, #Cursos Excel OnLine, #Aprende Excel, #Aprende Excel OnLine, #Excel 365, #Power Pivot, #Power BI, #Power Query, #Google Sheets, #Macros, #Código VBA, #Tutoriales Excel, #MTV, #Vbscript, #TypeScript, #Lenguaje M, #fórmulas, #funciones, #paso a paso, #funciones Excel, #libros, #tablas, #formatos, #hojas, #datos, #gráfico, #análisis de datos, #base de datos, #dashboards, #tablas dinámicas, #excel desde cero, #hoja de cálculo, #plantillas de Excel