<ExcelVBA>多行内容合并到同一个单元格


Sub Test()
    With Sheet1
        '准备阶段
        .Range("C:C").Clear  '清除C列中数据即格式
        '定义数据类型
        Dim k() As Integer '定义一个整型数组k(),用于存放获取到的数据
        Dim ks As Integer '定义一个整型ks,作为整型数组k()的序列号
        Dim UseCount As Integer '定义一个整型UseCount,用于记录统计【合并单元格】的总数量
        Dim EndRow As Integer '定义一个整型EndRow,用于记录需要进行合并的数据的最后一行的行数,同时也是总行数
        UseCount = Application.WorksheetFunction.CountA(Range("A1:A1000")) '调用Excel函数CountA获取【合并单元格】的数量,并赋值给UseCount
        EndRow = .Range("D1000").End(xlUp).Row '使用End()方法获取需要合并的数据的最后一行的函数,并赋值给EndRow
        '获取对应单元格的单元格地址
        ks = 0 '使ks为零
        ReDim k(UseCount) '重新定义数组k()的数组元素的数量
        For i = 1 To EndRow '设置循环判断,从第一行到需要合并的数据的最后一行
            If .Range("B" & i) <> "" Then '通过If...Then方法来获取当合并单元格的值不为空时
                k(ks) = i                           '数组k(ks)的值为i,i为行数
                ks = ks + 1                      '此时ks+1,然后进入下一个循环,如不能理解,详细解释请见公众号
            End If
        Next
        k(UseCount) = EndRow     '设置数组k()的最后一位为需要合并的数据的最后一行的行数
        '执行输出
        ks = 0 '重置ks为0
        For i = 1 To EndRow '设置循环判断,从第一行到需要合并的数据的最后一行
            If .Range("B" & i) <> "" Then '通过If...Then方法来获取当合并单元格的值不为空时
                For j = k(ks) To k(ks + 1)  '即进入从数组k()相邻的两个元素之间的循环值,如不能理解,详细解释请见公众号
                    .Range("C" & i) = .Range("C" & i) & vbCrLf & .Range("D" & j) '输出值到相对应合并单元格中的C列所对应的行中
                Next
                .Range("C" & k(ks)) = Replace(.Range("C" & k(ks)), vbCrLf, "", , 1) '将多余的回车符删除,保留最终结果
                If ks < UseCount - 1 Then   '判断序列号ks是否小于数组k()的总数-1,实际上是用于判断是否处理到了最后一个合并单元格,因为最后一个单元格出现了特殊情况
                    .Range("C" & k(ks) & ":C" & k(ks + 1) - 1).Merge  '如是,则需要少合并一个单元格
                Else
                    .Range("C" & k(ks) & ":C" & k(ks + 1)).Merge '如不是,则直接合并单元格
                End If
                ks = ks + 1 '然后ks+1,进入下一个循环
            End If
        Next
        Cells.EntireRow.AutoFit  '执行单元格行高的自动调整
        .Range("C:C").ColumnWidth = 100  '执行单元格列宽的调整
        .Range("C:C").EntireColumn.AutoFit '执行单元格列宽的自动调整
    End With
End Sub


### Excel 中将多数据合并成一的方法 在 Excel 中,有多种方法可以实现将多数据合并为一的操作。以下是几种常见的解决方案: #### 方法一:使用 PHONETIC 函数 如果目标是简单地将多文本内容合并到同一单元中,则可以利用 `PHONETIC` 函数来完成此操作。具体步骤如下: - 首先,在目标单元中输入公式`=PHONETIC(范围)`,其中“范围”是指定包含多数据的区域[^1]。 - 应用该公式后,所有指定范围内的文字会被提取并显示在同一。 这种方法适用于简单的场景,但对于复杂需求可能不够灵活。 #### 方法二:通过 TEXTJOIN 和数组公式组合 对于更高级的需求,比如希望根据某些条件筛选后再合并,并且能够自定义分隔符的情况,推荐采用 `TEXTJOIN` 结合数组公式的方案[^2]: - 假设 A 列存储类别信息(如部门),而 B 列保存具体的条目(如员工名字)。为了基于相同的类别汇总对应的条目至单一字符串形式,可以在新列应用以下公式: ```excel {=TEXTJOIN(",", TRUE, IF(A:A=E2, B:B, ""))} ``` 这里需要注意的是,上述大括号 `{}` 并不需要手动添加;而是当录入完毕之后按 **Ctrl+Shift+Enter** 键确认时由系统自动附加上的标志,表明这是一个数组公式。 这种技术允许我们设置任意字符作为项目间的间隔标记(此处选用逗号 `,`) ,同时忽略空白值的存在。 #### 方法三:借助 VBA 宏程序自动化处理 除了内置函数外,编写一段短小精悍的VBA脚本也可以轻松达成目的。下面给出一个例子供参考: ```vba Sub MergeRows() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为实际的工作表名 Dim lastRow As Long lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Dim result As String For i = 1 To lastRow If Len(result) > 0 Then result = result & ", " End If result = result & ws.Cells(i, 1).Value Next i MsgBox result End Sub ``` 运这段宏代码将会弹出消息框展示最终拼接好的结果串[^4]。 以上就是关于如何在Excel环境下有效执转单任务的主要介绍。每种方式都有其适用场合,请依据具体情况挑选最适合自己的工具吧!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值