Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2458|回复: 4

VBA用两种方法实现计算一列结果

[复制链接]
发表于 2017-11-29 19:44 | 显示全部楼层 |阅读模式
VBA用两种方法实现计算一列结果


VBA用两种方法实现计算一列结果.jpg

VBA用两种方法实现计算一列结果.rar

6.5 KB, 下载次数: 7

发表于 2017-11-29 21:28 | 显示全部楼层
Private Sub CommandButton1_Click()
For i = 3 To Range("D65536").End(3).Row
   For j = 3 To Range("A65536").End(3).Row
      If Cells(i, 4) = Cells(j, 1) Then
       Cells(i, 5) = Cells(i, 5) + Cells(j, 2)
      End If
   Next
Next
End Sub

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-11-30 07:41 | 显示全部楼层
回复

使用道具 举报

发表于 2017-11-30 09:56 | 显示全部楼层
Private Sub CommandButton1_Click()
  Dim dic As Object, i%
    Set dic = CreateObject("scripting.dictionary")
    For i = 3 To Cells(Rows.Count, 1).End(3).Row
      If dic.exists(Cells(i, 1).Value) Then
      dic(Cells(i, 1).Value) = dic(Cells(i, 1).Value) + Cells(i, 2).Value
      Else
      dic(Cells(i, 1).Value) = Cells(i, 2).Value
      End If
    Next i
    Range("D:E").Clear
    Cells(2, 4).Resize(1, 2) = Array("编号", "金额")
    Cells(3, 4).Resize(dic.Count, 1) = Application.Transpose(dic.keys)
    Cells(3, 5).Resize(dic.Count, 1) = Application.Transpose(dic.items)
    Set dic = Nothing
End Sub

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-12-5 16:40 | 显示全部楼层
如果编号是1开始连续的纯数字的话,直接
  1. Sub aaa()
  2. Dim arr, brr, i&
  3. arr = [a1].CurrentRegion
  4. ReDim brr(1 To Application.Max(Columns(1)), 1 To 2)
  5. For i = 3 To UBound(arr)
  6.   brr(arr(i, 1), 1) = arr(i, 1)
  7.   brr(arr(i, 1), 2) = brr(arr(i, 1), 2) + arr(i, 2)
  8. Next i
  9. [d3].Resize(UBound(brr), 2) = brr
  10. End Sub
复制代码

评分

参与人数 2 +9 学分 +3 收起 理由
lsyylw + 3 太强大了
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-30 15:27 , Processed in 0.395986 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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