Excel·VBA指定目标值切割分组

看到一个帖子《excel吧-数据切断分组问题》,对1列数据按指定长度进行切割分组,获取每组的长度组成方式

  • VBA代码
vbnet 复制代码
Sub 数据分割()
    Dim arr, target, brr, res, x&, y&, i&, 差额, trr(1 To 2)  'trr(0)为数值,trr(1)为组成方式
    arr = [a1].CurrentRegion: target = 10: deg = 2  '待分割数据,目标值,计算精度
    brr = Array(): x = -1: res = Array(): y = -1
    For Each a In arr  '多行多列的,按列从左往右读取
        x = x + 1: ReDim Preserve brr(x): brr(x) = a
    Next
    Do
        If trr(1) + brr(i) >= target Then
            差额 = target - trr(1): trr(2) = trr(2) & "+" & CStr(差额)
            y = y + 1: ReDim Preserve res(y): res(y) = Mid(trr(2), 2)  '去除开头的+
            trr(1) = 0: trr(2) = "": brr(i) = Round(brr(i) - 差额, deg)  '更新数组
        Else
            trr(1) = trr(1) + brr(i): trr(2) = trr(2) & "+" & CStr(brr(i))
            i = i + 1  '下一个
        End If
        If i < x Then  '避免结果开头为0+
            If brr(i) = 0 Then i = i + 1  '下一个
        End If
        If i = x Then  '剩余部分
            If brr(i) < target Then y = y + 1: ReDim Preserve res(y): res(y) = brr(i)
        End If
    Loop Until i > x
    [d1].Resize(UBound(res) + 1, 1) = WorksheetFunction.Transpose(res)
End Sub
  • 运行结果:单列、多列数据分别举例

相关推荐
kylezhao201917 小时前
C#上位机开发数据持久化:excel报表导入导出
开发语言·c#·excel
悟能不能悟18 小时前
springboot controller返回的是HttpServletResponse成功返回excel文件流,失败就返回失败参数
spring boot·后端·excel
野比带雄2 天前
対excel时间格式的理解
excel
缺点内向2 天前
Java:轻松实现 Excel 文档属性添加
java·开发语言·excel
Teable任意门互动2 天前
从飞书多维表格 简道云到Teable多维表格:企业为何选择Teable作为新一代智能数据协作平台?
数据库·excel·钉钉·飞书·开源软件
AC赳赳老秦2 天前
DeepSeek + Excel 实战:多表联动分析与异常数据自动预警教程
microsoft·rabbitmq·excel·etcd·memcached·memcache·deepseek
2501_930707782 天前
如何使用C#代码将 Excel 文件转换为 SVG
开发语言·c#·excel
Eiceblue2 天前
将 Python 列表导出为 Excel 文件:一维、二维、字典列表
开发语言·python·excel·visual studio code
Shi_haoliu3 天前
inno setup6.6.1实例,制作安装包,创建共享文件夹,写入注册表(提供给excel加载项,此文章解释iss文件)
前端·vue.js·windows·excel
2501_907136823 天前
通用财务账模板【Excel版】
excel·软件需求