VBA字典求和套路

Sub 字典求和套路()
    Dim i, j, arr, brr, key
    Dim sht As Worksheet
    Set sht = Sheet1
    Application.Calculation = xlManual
    Dim dic
    Set dic = CreateObject("scripting.dictionary")
    For i = 3 To sht.Cells(Rows.Count, "A").End(xlUp).Row
        key = sht.Cells(i, "A")
        dic(key) = dic(key) + sht.Cells(i, "C") '求和
    Next
    Sheet3.Range("A2").Resize(10000, 2).ClearContents '清空结果区
    Sheet3.Range("A2").Resize(dic.Count, 2) = Application.Transpose(Array(dic.keys, dic.items)) '结果区
    Application.Calculation = xlAutomatic
End Sub

### 回答1: 以下是 Excel VBA 某列以 24 个连续 0 值作为分段条件对各分段分别进行求和的代码: Sub SumBySegment() Dim lastRow As Long Dim sum As Double Dim i As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow If Cells(i, "A").Value = 0 Then sum = sum + Cells(i, "B").Value Else Cells(i, "C").Value = sum sum = 0 End If Next i Cells(i, "C").Value = sum End Sub 请注意,此代码假定数据位于 A 列和 B 列中,结果将在 C 列中显示。 ### 回答2: 以下是一个使用Excel VBA的示例代码,用于将某列以24个连续0值作为分段条件,对各分段分别进行求和。 ```vba Sub SumBySegments() Dim lastRow As Long ' 最后一行的索引 Dim col As Range ' 列范围 Dim i As Long ' 循环变量 Dim segmentStart As Long ' 分段起始行索引 Dim segmentEnd As Long ' 分段结束行索引 Dim segmentSum As Double ' 分段求和结果 ' 设置要操作的列范围,此处假设为A列,可根据需要修改 Set col = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) ' 重置起始行索引和分段求和结果 segmentStart = 1 segmentSum = 0 ' 循环遍历每一行 For i = 1 To col.Rows.Count ' 判断当前行的值是否为0 If col.Cells(i).Value = 0 Then ' 如果当前行的值为0,则进行分段判断 If segmentSum = 0 Then ' 如果分段求和结果为0,表示当前为新的分段起始位置 segmentStart = i End If ' 累加当前行的值到分段求和结果 segmentSum = segmentSum + col.Cells(i).Value Else ' 如果当前行的值不为0,则进行分段判断 If segmentSum <> 0 Then ' 如果分段求和结果不为0,表示当前为分段结束位置 segmentEnd = i - 1 ' 输出分段起始位置和结束位置,以及分段求和结果 Debug.Print "Segment: " & segmentStart & " - " & segmentEnd Debug.Print "Sum: " & segmentSum End If ' 重置分段起始位置和分段求和结果 segmentStart = 0 segmentSum = 0 End If Next i End Sub ``` 代码首先定义了需要操作的列范围,然后通过循环遍历每一行,在每一个0值开始的位置计算分段求和。通过判断当前行的值是否为0,以及分段求和结果是否为0来确定每个分段的起始位置和结束位置。最后通过打印输出显示分段的起始位置和结束位置,以及分段求和结果。 ### 回答3: 以下是可以用于Excel VBA的代码,实现了将某列以24个连续0值作为分段条件,对各个分段进行求和的功能: ```vba Sub SumBySegments() Dim ws As Worksheet Dim lastRow As Long Dim startRow As Long Dim endRow As Long Dim sumRange As Range Dim sumValue As Double ' 设置操作的工作表 Set ws = ThisWorkbook.Worksheets("Sheet1") ' 获取最后一行的行号 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 初始化起始行号和求和值 startRow = 1 sumValue = 0 ' 遍历每一行数据 For i = 1 To lastRow ' 判断当前行是否为0值 If ws.Cells(i, "A").Value = 0 Then ' 如果是0值,则累加求和值 sumValue = sumValue + ws.Cells(i, "B").Value ElseIf i - startRow >= 24 Then ' 如果不是0值且起始行号到当前行号的距离达到24行,则表示一个分段结束 ' 将求和值放入对应的范围,并重新初始化起始行号和求和值 Set sumRange = ws.Range(ws.Cells(startRow, "C"), ws.Cells(i - 1, "C")) sumRange.Value = sumValue sumValue = 0 startRow = i End If Next i ' 处理最后一个分段的求和值 If lastRow - startRow >= 24 Then Set sumRange = ws.Range(ws.Cells(startRow, "C"), ws.Cells(lastRow, "C")) sumRange.Value = sumValue End If End Sub ``` 请将代码复制到Excel的VBA编辑器中,然后调用`SumBySegments`子过程即可实现对某列以24个连续0值作为分段条件,对各个分段分别进行求和的功能。具体的操作步骤和数据列的位置请根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豪情云天

您的鼓励就是创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值