就比如我有一个动态生成的工作表“项目汇总”,其中里面有工厂、项目、物料、项目状态、数量。
我想要实现在动态生成的工作表“项目汇总”已经完全生成好的情况下,再来给工厂、物料进行判断,如果工厂、物料的值相同的情况下。那么给对应的行合并为一行,并给项目不同的合并在一行,不同项目的数量也要累加起来。
例子:
工厂 项目 物料 项目状态 数量1 数量2
HZ20 V40 1234-00 正常 0.1 0.4
KZ20 V42 1234-00 正常 0.2 0.5
KZ20 V40 1234-00 正常 0.3 0.6
想要的效果:
工厂 项目 物料 项目状态 数量1 数量2
HZ20 V40 1234-00 正常 0.1 0.4
KZ20 V42V40 1234-00 正常 0.5 1.1
谢谢你的回答,目前是只需要使用VBA技术来实现功能。
追答好的,不客气
直接用数据【数据透视表】功能可能实现这样的汇总,一般系统功能可以实现的不建议用VBA。要用VBA写代码也是可以实现的,只是稍微有点长,如果有兴趣可以研究,思路是使用两个数组,一是原表数据,一个是汇总后的新表数据,对原表扫描,把数据累加到新表中,关键代码示例如下:
Option Explicit
Sub 汇总()
Dim arr1, arr2, m, n, i1, i2, j, n2, x
arr1 = ActiveSheet.UsedRange '提取原表数据
n = UBound(arr1)
m = UBound(arr1, 2)
ReDim arr2(1 To n, 1 To m) '定义新表
n2 = 0
For i1 = 1 To n
x = 0 '寻找i1行在新表中的位置
For i2 = 1 To n2
If arr2(i2, 1) = arr1(i1, 1) And arr2(i2, 2) = arr1(i1, 2) And arr2(i2, 3) = arr1(i1, 3) And arr2(i2, 4) = arr1(i1, 4) Then
x = i2
Exit For
End If
Next i2
If x = 0 Then '新行
n2 = n2 + 1
x = n2
For j = 1 To 4
arr2(x, j) = arr1(i1, j)
Next j
End If
For j = 5 To m
If VarType(arr1(i1, j)) = vbString Then
arr2(x, j) = arr2(x, j) & arr1(i1, j) '文本链接
Else
arr2(x, j) = arr2(x, j) + arr1(i1, j) '数值累加
End If
Next j
Next i1
'把汇总结果写入新文件
If n2 > 0 Then
Workbooks.Add
Range("a1").Resize(n2, m) = arr2
End If
End Sub
追问不好意思啊,大神我这是菜鸟级别的。运用了你的代码后,是把数据全部拷贝到了新建的一个工作薄中,并没有进行合并跟数据计算
追答要使用VBA最好还是卖本书,理解语句的前提下使用,否则可能出现灾难,你的情况使用透视为好。
追问目前是急需要使用,来不及了