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
  • 运行结果:单列、多列数据分别举例

相关推荐
技术小甜甜7 小时前
[办公效率] Excel 表格越做越乱,先整理字段、格式还是公式?
数据库·excel·办公效率·数据整理
SunnyDays10118 小时前
如何使用 C# 自动调整 Excel 行高和列宽
开发语言·c#·excel
itgather8 小时前
OfficeExcel — Word / Excel DLL 验证台功能介绍
c#·word·excel
葡萄城技术团队8 小时前
【SpreadJS 新版本特性揭秘】完美对齐 Excel 365:V19.1 单元格内嵌图片架构解析
excel
qq_422152579 小时前
Excel 转 CSV 工具怎么选?格式兼容、编码问题与数据导出方案实测
excel
҉人间无事人9 小时前
wps中excel跨表通过匹配数据取其他值
excel·wps
sbjdhjd9 小时前
04 (下) | K8S微服务实战:从 Service 到金丝雀发布
运维·微服务·云原生·kubernetes·开源·云计算·excel
sbjdhjd1 天前
04(上)| k8s中的微服务
微服务·云原生·kubernetes·开源·云计算·excel·kubelet
VBA63371 天前
VBA中类的解读及应用第三十五讲 类对象的生死轮回----“二师兄”的成长历程之七
vba
SunnyDays10111 天前
使用 C# 添加、修改和删除 Excel VBA 宏 (无需 Microsoft Office Interop)
c#·excel··vba