EXCEL编程VBA,新手小白紧急求助!求代码,在线等

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL编程VBA,新手小白紧急求助!求代码,在线等相关的知识,希望对你有一定的参考价值。

因工作需要,来不及学VBA了,求一个能马上用的代码,以后慢慢研究,谢谢!

问题描述:
有两张sheet,sheet1为原始数据,sheet2为汇总后的数据

要将sheet1中的第k列数据进行如下计算:

1、k列数据分为4个区域,分别是北区、东区、南区、西区,区域标识为b列

2、将K列数值按北区、东区、南区、西区分别求和,存入sheet1中的北区h17单元格、东区h18单元格、南区h19单元格和西区h20单元格

求示例VBA代码,和相关的注释,方便以后学习研究,谢谢!

只求代码!!!!数据透视表太慢!
补充一下,前面有写错的,抱歉

2、将K列数值按北区、东区、南区、西区分别求和,存入sheet2中的北区h17单元格、东区h18单元格、南区h19单元格和西区h20单元格

是sheet2

主要是这个工作重复性太多,希望能先学一列的处理方法,再依葫芦画瓢处理别的列,谢谢

代码已发你私信。 参考技术A 把你的样表发过来看看。。wjp456789123@qq.com 参考技术B 表复制一份发过来,留下你邮箱,弄好给你发过去
duohaiou@163.com
参考技术C 你只在开头提到了sheet2后面就和它没关了,而且看你的要求就是简单的sumif()过程阿? 参考技术D 最快的办法是发样表出来,悬赏也是手段哈
友情提示,不求采纳,嘿嘿

[求助] excel VBA多条件求和代码优化

Sub 佳兴汇总()
Range("B5") = Application.WorksheetFunction.SumIfs(Sheet2.Range("C:C"), Sheet2.Range("A:A"), Range("A5"), Sheet2.Range("B:B"), Range("B3"))Range("C5") = Application.WorksheetFunction.SumIfs(Sheet2.Range("D:D"), Sheet2.Range("A:A"), Range("A5"), Sheet2.Range("B:B"), Range("B3"))Range("E5") = Application.WorksheetFunction.SumIfs(Sheet2.Range("E:E"), Sheet2.Range("A:A"), Range("A5"), Sheet2.Range("B:B"), Range("B3"))
End Sub

因为物料编码很多,一个编码一条代码,会很长,请问一下,要如何解决这个问题

这种情况用字典法最合适

Sub test()
arr = Sheet2.Range("A1:E" & Sheet2.[a65536].End(xlUp).Row) 'Sheet2数据存入数组
Set d1 = CreateObject("Scripting.Dictionary") '外发字典
Set d2 = CreateObject("Scripting.Dictionary") '返回字典
Set d3 = CreateObject("Scripting.Dictionary") '生产字典
For i = 1 To UBound(arr)
d1(arr(i, 1) & arr(i, 2)) = d1(arr(i, 1) & arr(i, 2)) + arr(i, 3)
d2(arr(i, 1) & arr(i, 2)) = d1(arr(i, 1) & arr(i, 2)) + arr(i, 4)
d3(arr(i, 1) & arr(i, 2)) = d1(arr(i, 1) & arr(i, 2)) + arr(i, 5)
Next
For i = 2 To [iv3].End(xlToLeft) Step 4
For j = 5 To [a65536].End(xlUp).Row
Cells(j, i) = d1(Cells(j, 1).Value & Cells(3, i).Value)
Cells(j, i + 1) = d2(Cells(j, 1).Value & Cells(3, i).Value)
Cells(j, i + 3) = d3(Cells(j, 1).Value & Cells(3, i).Value)
Next
Next
End Sub

参考技术A

要使用变量,用with,就可以化简很多。而且速度快的多,因为不需要每次都去找对象。 

Sub 佳兴汇总()
Dim MyRng(1 To 5) As Range, B3 As String, i As Long
B3 = Range("B3").Value
With Sheet2
    For i = 1 To 5
        Set MyRng(i) = .Columns(i)
    Next i
End With
With Application.WorksheetFunction
For i = 5 To 12 '5到12行
Range("B" & i) = .SumIfs(MyRng(3), MyRng(1), Range("A" & i), MyRng(2), B3)
Range("C" & i) = .SumIfs(MyRng(4), MyRng(1), Range("A" & i), MyRng(2), B3)
Range("E" & i) = .SumIfs(MyRng(5), MyRng(1), Range("A" & i), MyRng(2), B3)
Next i
End With
Erase MyRng
End Sub

追问

这个看不明白,不过还是谢谢你.

追答

这是基础。

参考技术B 没有代码,是没有办法“优化”代码的。追问

刚刚加上去了,之前添加不了,说内容太长了。

追答

试试下面的代码行不?
Sub 佳兴汇总()
Dim i%
For i = 5 To 12
Range("B" & i) = Application.WorksheetFunction.SumIfs(Sheet2.Range("C:C"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3"))
Range("C" & i) = Application.WorksheetFunction.SumIfs(Sheet2.Range("D:D"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3"))
Range("E" & i) = Application.WorksheetFunction.SumIfs(Sheet2.Range("E:E"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3"))
Next i
End Sub

追问

谢谢,这样可以的。非常感谢。再请教一个问题,D5=B5-C5,D6=B6-C6……一直递加下去。VBA怎么写,写成上面的那个样子

追答

以上代码还可简写为:
Sub 佳兴汇总()Dim i%
With Application.WorksheetFunction
For i = 5 To 12 Range("B" & i) = .SumIfs(Sheet2.Range("C:C"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3")) Range("C" & i) = .SumIfs(Sheet2.Range("D:D"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3")) Range("E" & i) = .SumIfs(Sheet2.Range("E:E"), Sheet2.Range("A:A"), Range("A" & i), Sheet2.Range("B:B"), Range("B3")) Next i
End WithEnd Sub

D5=B5-C5,D6=B6-C6……一直递加下去:
Sub 对应相减()
Dim i%
For i = 5 to [B65536].End(3).Row
Cells(i , 4) = Cells(i , 2) - Cells(i , 3)
Next i
End Sub

本回答被提问者采纳
参考技术C 求助高手:怎样用VBA实现多条件计数:比如使工作表2中某一单元格等于工作表1中某几列中的某些条件个数,如中学、男、大于26小于30岁等

以上是关于EXCEL编程VBA,新手小白紧急求助!求代码,在线等的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL VBA 求助

[求助] excel VBA多条件求和代码优化

求高手帮忙注释下excel中vba宏代码各是啥意思,满意的加满分,谢谢!

excel用VBA连接数据库为啥我的程序错误呢?新手上路,求各位前辈指点!

向vb 高手求助代码编程:菜单中打开txt或excel数据表文件,求某列中几个数求平均,找出并输出均值附近数据

捉急求助:vba打开spreadsheet