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
展开
 我来答
数码专业达人筱筱

2020-11-18 · TA获得超过5252个赞
知道大有可为答主
回答量:4217
采纳率:81%
帮助的人:158万
展开全部
因为Excel的特性,其中的内容都是保存在各个单元格中,通常情况下,对Excel的多个单元格进行复制后再粘贴时仍然会粘贴到与复制时数量相同的单元格中。

如果想把多个单元格中的文字内容复制后粘贴到一个单元格中,(也就是合并到一个单元格中),虽然用函数或者连接符(&)等可以实现这个目的,不过使用起来会有点麻烦。因此,关于把多个单元格内容合并为一个单元格的操作,详细的方法如下:

首先,先选择要合并的单元格区域。

选择单元格区域后,用点击开始选项卡中的“复制”按钮或者按键盘的“Ctrl+C”键等方法进行复制。

复制后点击开始选项卡中下图所示的“剪贴板”功能区右下角的按钮,这个按钮比较小。

点击后会打开Excel自带的剪贴板,在剪贴板中会显示已复制的内容。

此时用鼠标双击要粘贴的单元格,让光标在该单元格中闪烁。

也可以用鼠标单击选中要粘贴的单元格,再在编辑栏中点击鼠标,让光标在编辑栏中闪烁。

然后用鼠标点击剪贴板中已复制的内容。

点击剪贴板内容后,之前复制的多个单元格中的内容就合并粘贴到所选单元格中了。

粘贴后点击剪贴板的关闭按钮关闭剪贴板即可。

粘贴后的内容通常是分行排列的,如果想把所有复制的内容都排列在一行,可以点击开始选项卡中图示的“自动换行”按钮,取消单元格中的自动换行。

取消单元格的自动换行后,所有内容就都排列在一行了,这样就完成了多个单元格内容的合并。
追问
谢谢你的回答,目前是只需要使用VBA技术来实现功能。
追答
好的,不客气
阳光上的桥
2020-11-18 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65812
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部

直接用数据【数据透视表】功能可能实现这样的汇总,一般系统功能可以实现的不建议用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最好还是卖本书,理解语句的前提下使用,否则可能出现灾难,你的情况使用透视为好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式