【问题标题】:Split Cells by Line Break VBA按换行符 VBA 拆分单元格
【发布时间】:2018-06-03 18:17:38
【问题描述】:

我有一个包含 40 列和约 5000 行的数据集。在 L 和 M 列中有带换行符的多行单元格,我需要将这些行拆分为单独的行,但对于这些新行,其他列中的信息保持相同。我尝试了多个 VBA 代码,但似乎没有一个对两列有用。

【问题讨论】:

  • 你有这个工作来拆分一列吗?如果是这样,请分享该代码
  • 所以 L 和 M 不一定保持对齐。这意味着您将一次处理一列并通过插入行将多行单元格拆分为单独的单元格?

标签: vba excel split


【解决方案1】:

这适用于数字和字符串,但不适用于公式。它也不适合格式化单元格:

Sub multilineCellsToSeparateCells(rng As Range)

        Dim i As Long, j As Long, ubnd As Long
        Dim cll As Range
        Dim arrVals As Variant, tempVal As Variant, vItem As Variant

        With rng

            ReDim arrVals(.Rows(1).Row To rng.Rows.Count, 1 To 1) As Variant
            For Each cll In rng.Cells
                tempVal = cll.Value2
                If InStr(1, tempVal, Chr(10)) > 0 Then
                    vItem = Split(tempVal, Chr(10))
                    i = i + 1
                    ubnd = UBound(vItem)
                    For j = 0 To ubnd
                        arrVals(i + j, 1) = vItem(j)
                    Next j
                    i = i + ubnd

                ElseIf tempVal <> vbNullString Then
                    i = i + 1
                    arrVals(i, 1) = tempVal
                End If

            Next cll

            .Value2 = arrVals
            .AutoFit ' optional

        End With

End Sub

示例

把这个写在A列中:

A1: 1
A2: 2
A3: 3
A4: This
    is
    a 
    test
A5: 5

调用Sub,输出将是:

A1: 1
A2: 2
A3: 3
A4: This
A5: is
A6: a 
A7: test
A8: 5

sub 一次固定一列。像这样调用它:

Call multilineCellsToSeparateCells(Activesheet.Columns("A"))

【讨论】:

  • 嗨@Miqi180 你知道如何让它跳过在L列中空白的单元格中运行宏吗?
  • 如果在 For 循环中添加条件语句,可以检查是否 vItem(j) = vbNullstring,如果不是则只添加到数组中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多