ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 414|回复: 3

[分享] 个人工作中的数据统计相关自定义函数!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-27 15:28 | 显示全部楼层 |阅读模式
1.函数功能,单元格数据中(可能一个单元格中有多个数据以各种分割符分割),对数据进行清洗后进行指定运算
(极差/平均值/标准偏差(基于目前样本预估整体)/等等)

Function CustomRangeVariance(rngArray As Range, splitCters As String, funcitonAlg As Integer, resDigits As Integer) As Double
Rem rngArray是需要计算的连续单元格区域,比如:a1:b10
Rem splitCters是指定的分割字符,比如"\"
Rem functionAlg 是指定的计算模式,0是求极差,1是计算算术平均值,2是计算标准偏差
Rem resDigits是指定保留最后计算数据的位数,2是保留2位小数
    ' 声明变量
    Dim allValues() As String
    Dim dblValues() As Double
    Dim iArea As Long, iCell As Long, iValue As Long
    Dim maxValue As Double, minValue As Double
    Dim CELL As Range, I, rng As Range
    ReDim dblValues(1 To 1000) ' 初始化足够大的数组,根据实际情况调整大小
    iValue = 1
        For Each CELL In rngArray.Cells
            ' 获取单元格内的文本值并分割成数组
            Dim strValues As String
            strValues = CELL.Value
            Dim arrValues() As String
                      arrValues = Split(strValues, splitCters)
            For I = LBound(arrValues) To UBound(arrValues)
                If IsNumeric(arrValues(I)) Then
                    dblValues(iValue) = CDbl(arrValues(I))
                    iValue = iValue + 1
                End If
            Next I
        Next CELL
    ReDim Preserve dblValues(1 To iValue - 1)
    If funcitonAlg = 0 Then
        If UBound(dblValues) > 0 Then
            maxValue = Application.WorksheetFunction.Max(dblValues)
            minValue = Application.WorksheetFunction.Min(dblValues)
            CustomRangeVariance = Format(Round(maxValue - minValue, resDigits), "#.00")
        Else
            CustomRangeVariance = "无有效数据"
        End If
    ElseIf funcitonAlg = 1 Then
  Rem   Format(roundedValue, "#.00")
        CustomRangeVariance = Format(Round(Application.WorksheetFunction.Average(dblValues), resDigits), "#.00")
    Else
        CustomRangeVariance = Format(Round(Application.WorksheetFunction.StDevP(dblValues), resDigits), "#.00")
    End If
End Function

2.函数功能,单元格数据中(可能一个单元格中有多个数据或者以各种分割符分割),对数据/字符进行清洗后进行指定字符进行计数,(可以利用内置函数进行二次开发更多其他功能)
Function SpeSymbolcount(rngArray As Range, splitCters As String, countCha As String)
Rem 三个参数,数据单元格区域,分割字符,指定计数的字符
Rem rngArray是需要计算的连续单元格区域,比如:a1:b10
Rem splitCters是指定的分割字符,比如"\"
Rem countCha是指定的需要被计数的字符,比如"+"
    Dim dblValues() As Double
    Dim CELL As Range, I, rng As Range
    Dim iValue As Long
  ReDim dblValues(1 To 1000) ' 初始化足够大的数组,根据实际情况调整大小
    iValue = 0
  For Each CELL In rngArray.Cells
            ' 获取单元格内的文本值并分割成数组
            Dim strValues As String
            strValues = CELL.Value
            Dim arrValues() As String
            arrValues = Split(strValues, splitCters) ' 将分割出的字符串转换为数值并存储到dblValues数组中
            For I = LBound(arrValues) To UBound(arrValues)
                If arrValues(I) = countCha Then
                    iValue = iValue + 1
                End If
            Next I
        Next CELL
     SpeSymbolcount = iValue
End Function

自定义函数2

自定义函数2

自定义函数1

自定义函数1

TA的精华主题

TA的得分主题

发表于 2024-1-27 20:09 | 显示全部楼层
平时遇到这种情况较少,比较偏门。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-29 16:50 | 显示全部楼层
ykcbf1100 发表于 2024-1-27 20:09
平时遇到这种情况较少,比较偏门。

碰到各种奇葩的数据报表,起码的数据方式 !

TA的精华主题

TA的得分主题

发表于 2024-1-30 11:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习了,传个附件就更好了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 23:27 , Processed in 0.031777 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表