VBA,怎么加和

谁能告诉我一下代码,帮我实现以下的加和目标:简单举例说明,假设excel中三列第一列是A或B,第二列是1或2或3,第三列是我需要加和的数据。前两列的组合可能分别是这样:A... 谁能告诉我一下代码,帮我实现以下的加和目标:简单举例说明,假设excel中三列 第一列是A或B,第二列是1或2或3,第三列是我需要加和的数据。前两列的组合可能分别是这样:
A 1
A 1
A 1
A 2
A 3
A 3
B 1
B 2
B 2
B 2
B 2
B 3
B 3
我想要的就是,只要前两列都一样的,就把第三列的值加到一起,所以最后我只需要得到六个数,也就是A1/A2/A3/B1/B2/B3 各自在第三列中的和。
因为我只会最基础的代码。。。本来写最简单的程序也可以,但就是效率比较低。数据少的时候还可以,但是因为真实的数据条目非常多,估计有几十万条,所以希望能够求助大家帮我写一个效率高点的程序实现一下。
不知道我说清楚了没有,谢谢大家的帮助啊!
展开
 我来答
redlz2500
2011-09-10 · TA获得超过666个赞
知道小有建树答主
回答量:751
采纳率:0%
帮助的人:584万
展开全部
你这个是非常实际的问题,所以就直接给你解决好了
Option Explicit

Sub damnvba()
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("sheet1") '这里放你放数据的sheet的名称

Dim i As Integer
Dim j As Integer

sh.Columns("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _
xlSortNormal, DataOption2:=xlSortNormal

'sh.Range("D1").FormulaR1C1 = "=sheet1!A1 & sheet1!B1"
sh.Range("D1").FormulaR1C1 = "=RC[-3] & RC[-2]"

'根据数据多少自己改D30000
sh.Range("D1").AutoFill Destination:=Range("D1:D30000"), Type:=xlFillDefault

Dim strLast As String
i = 1
Dim iStart As Integer
Dim iEnd As Integer
Dim iCount As Integer
iCount = 1
iStart = 1
iEnd = 1
Dim iTRow As Integer
Dim iTCol As Integer
strLast = sh.Range("D1").Text
Do While sh.Range("A" & i).FormulaR1C1 <> ""
DoEvents
If sh.Range("D" & i).Text <> strLast Then
iEnd = i - 1
sh.Range("E" & iCount).FormulaR1C1 = "=sum(R[" & iStart - iCount & "]C[-2] : R[" & iEnd - iCount & "]C[-2])"
sh.Range("F" & iCount).FormulaR1C1 = strLast
iCount = iCount + 1
iStart = i
strLast = sh.Range("D" & i).Text
End If
i = i + 1
Loop
'还有最后一个需要判断
iEnd = i - 1
sh.Range("E" & iCount).FormulaR1C1 = "=sum(R[" & iStart - iCount & "]C[-2] : R[" & iEnd - iCount & "]C[-2])"
sh.Range("F" & iCount).FormulaR1C1 = strLast
iCount = iCount + 1
iStart = i
strLast = sh.Range("D" & i).Text

End Sub
太极健1969
2011-09-09 · TA获得超过9033个赞
知道大有可为答主
回答量:8668
采纳率:69%
帮助的人:3622万
展开全部
用字典来完成很方便
代码如下
Sub aaa()
Dim d As Object, arr, arr1(), x&, i&, Zd As String
arr = Range("A1:B" & Range("A65536").End(xlUp).Row)
Set d = CreateObject("scripting.dictionary")
For x = 1 To UBound(arr)
Zd = arr(x, 1) & "|" & arr(x, 2)
d(Zd) = d(Zd) + 1
Next x
arr1 = d.keys
For x = 0 To d.Count - 1
arr1(x) = Replace(arr1(x), "|", "")
Next x
Range("C1").Resize(d.Count, 1) = Application.Transpose(arr1)
Range("D1").Resize(d.Count, 1) = Application.Transpose(d.items)
End Sub
结果为C列为A1,A2,A3,B1,B2,B3
D列为他们各自出现几次(计数)
追问
是我没说清楚哈,数据时是三列,前两列只是标签,第三列才是要加和的数据
A 1 3
A 1 5
A 2 8
A 2 2
A 2 4
A 3 4
B 1 2
B 2 4
B 2 2
B 3 5
B 3 6
我想得到的是,如果前两列都一样,就把第三列的数加起来。所以第四列应该得到8 14 4 2 6 11,因为
A1=3+5
A2=8+2+4
A3=4
B1=2
B2=4+2
B3=5+6
所以能不能麻烦再帮我修改一下呢?
不管怎样,非常感谢你的帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式