【问题标题】:Split cell with multiple lines into rows将具有多行的单元格拆分为行
【发布时间】:2021-03-25 12:08:16
【问题描述】:

我有一个带有换行符的单元格的工作簿(通过 ALT + ENTER 输入)。

我必须将它们分成单独的行。所有单元格都在 A 列中。

单元格中的每一行前面都有一个项目符号点(例如“*”),它可以用作在此点断开该行的信标。

【问题讨论】:

  • 可以使用Split函数Split(Cells(i,1),, "*"),不断往下循环A列(从i=1开始,加1向下移动),输出进入另一列
  • 使用VbLf 作为分隔符或* 进行拆分,这样您也可以拥有这些项目符号。

标签: excel vba


【解决方案1】:

您可以将 split 与 Chr(10) 或 VbLf 一起使用

Dim cell_value As Variant
Dim counter As Integer

'Row counter
counter = 1

'Looping trough A column define max value
For i = 1 To 10

    'Take cell at the time
    cell_value = ThisWorkbook.ActiveSheet.Cells(i, 1).Value

    'Split cell contents
    Dim WrdArray() As String
    WrdArray() = Split(cell_value, vbLf)

    'Place values to the B column
    For Each Item In WrdArray
        ThisWorkbook.ActiveSheet.Cells(counter, 2).Value = Item
        counter = counter + 1
    Next Item


Next i

不,你有数组将每一行放置到不同的单元格

【讨论】:

    【解决方案2】:

    这个不需要代码,让我们让它变得简单。

    按照以下步骤操作。

    选择要拆分的数据集->转到数据选项卡->选择“文本到列”->从此弹出窗口中选择“分隔符”->选择哪个分隔符分隔您的文本->选择目标单元格 -> 点击“确定”

    试试这个。

    问候, 阿什温

    从 Markus 编辑:对于作为分隔符的换行符,请使用“Ctr-J”

    【讨论】:

    • 这将分成列,而不是行,而且不可能将 vbCrLf 定义为分隔符。
    • 您可以简单地通过复制数据(将其分成列之后)向@Ashwin 的解决方案添加另一个步骤,右键单击第一个单元格下的单元格,选择选择性粘贴,然后选择转置。但是,如果工作簿“充满单元格”(如前所述),那不是最好的解决方案。 VBA 更好。
    【解决方案3】:

    如果您选择单元格并运行宏,您将在下一列中获得您想要的内容,如下所示:

    Option Explicit
    
    Public Sub selection_into_rows()
    
    
        Dim k           As Variant
        Dim l_counter   As Long
    
        k = Split(Selection, Chr(10))
    
        For l_counter = LBound(k) To UBound(k)
            Cells(l_counter + 1, Selection.Column + 1) = k(l_counter)
        Next l_counter
    
    End Sub
    

    【讨论】:

      【解决方案4】:

      这仅在选择一行后才有效(但应该让你开始):

      Option Explicit
      
      Public Sub SelectionIntoRows()
      
      Dim k() As String
      Dim l As Long
      Dim i As Long
      
      k() = Split(Range("A1"), " ")
      i = 1
      For l = 0 To UBound(k)
          Cells(i, 1) = k(l)
          i = i + 1
      Next l
      
      End Sub
      

      【讨论】:

        【解决方案5】:

        子提取()

        '查询提取单元格B中的数据除以ALT+Enter,逗号空格 '必须在前面创建Sheet1、Sheet2、Sheet3 '注意力!如果字段 B 为空,则不返回任何数据!如果需要,手动添加 A 列(B 列为空)!! '手动删除结果中的空单元格(Sheet2) '在开始查询之前从输入数据中删除重复!! '不适用于句号 '完成后会显示 Msg Done

        Dim c As Long, r As Range, I As Long, d As Long, Temp() As String d = 0 For Each r In Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row) ' 更改此以适合您的范围.. c = 2 Temp = Split((r.Value), Chr(10)) For i = LBound(Temp) 到 UBound(Temp)

                Sheets("Sheet2").Cells(r.Row, c - 1).Offset(d, 0).Value = Cells(r.Row, r.Column - 1).Value
                Sheets("Sheet2").Cells(r.Row, c).Offset(d, 0).Value = Temp(i)
                Cells(r.Row, c).Offset(d, 0).Select
                ActiveCell.Value = Trim(ActiveCell.Value)
                d = d + 1
            Next
            d = d - 1
        Next
        Sheets("Sheet2").Select
        Columns("A:B").Select
        ActiveSheet.Range("$A$1:$B$62856").RemoveDuplicates Columns:=Array(1, 2), _
            Header:=xlYes
        Range("A1").Select
        

        【讨论】:

          【解决方案6】:

          从糟糕的 Acrobat PDF 到 XLSX 转换,我有半打这样的 blob,遍布 500 行。 我将文本 blob(如 OP)复制到记事本中,从开始行和结束行中删除“”,然后粘贴到新的电子表格中。这告诉我要插入多少行。然后粘贴到那个洞里。

          “这就是全部 我的输入文本”

          然后我可以使用 TextToCol。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-09-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-06-26
            • 1970-01-01
            相关资源
            最近更新 更多