vba 如何将一个已经动态生成的excel工作表里的某两个单元格进行判断,并给其他单元格进行合并? 5
我想要实现在动态生成的工作表“项目汇总”已经完全生成好的情况下,再来给工厂、物料进行判断,如果工厂、物料的值相同的情况下。那么给对应的行合并为一行,并给项目不同的合并在一行,不同项目的数量也要累加起来。
例子:
工厂 项目 物料 项目状态 数量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 展开
如果想把多个单元格中的文字内容复制后粘贴到一个单元格中,(也就是合并到一个单元格中),虽然用函数或者连接符(&)等可以实现这个目的,不过使用起来会有点麻烦。因此,关于把多个单元格内容合并为一个单元格的操作,详细的方法如下:
首先,先选择要合并的单元格区域。
选择单元格区域后,用点击开始选项卡中的“复制”按钮或者按键盘的“Ctrl+C”键等方法进行复制。
复制后点击开始选项卡中下图所示的“剪贴板”功能区右下角的按钮,这个按钮比较小。
点击后会打开Excel自带的剪贴板,在剪贴板中会显示已复制的内容。
此时用鼠标双击要粘贴的单元格,让光标在该单元格中闪烁。
也可以用鼠标单击选中要粘贴的单元格,再在编辑栏中点击鼠标,让光标在编辑栏中闪烁。
然后用鼠标点击剪贴板中已复制的内容。
点击剪贴板内容后,之前复制的多个单元格中的内容就合并粘贴到所选单元格中了。
粘贴后点击剪贴板的关闭按钮关闭剪贴板即可。
粘贴后的内容通常是分行排列的,如果想把所有复制的内容都排列在一行,可以点击开始选项卡中图示的“自动换行”按钮,取消单元格中的自动换行。
取消单元格的自动换行后,所有内容就都排列在一行了,这样就完成了多个单元格内容的合并。
谢谢你的回答,目前是只需要使用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最好还是卖本书,理解语句的前提下使用,否则可能出现灾难,你的情况使用透视为好。