首页 > 解决方案 > 如何在数组中输入最后一列以将文本转换为列?

问题描述

所以基本上我有大量数据都在一个用逗号分隔的单元格中。我有多行这些数据,每个单元格中有不同数量的数据。例如:第一行可能有 3 个逗号分隔的数据,所以它将变成 3 列。但是,第 2 行可能有 10 个逗号分隔的数据,这将变成 10 列。当我记录将文本转换为列的宏时,我得到以下代码:

Sub Macro2()
'
' Macro2 Macro
'

'
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
        Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
        ), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
        (20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1)) _
        , TrailingMinusNumbers:=True
End Sub

现在,正如我所提到的,每行的数据量不同,并且数据集总是会改变。有没有办法让数组设置为 Array(last column, 1) ?无需手动输入它们以确保捕获整个数据?

标签: excelvbatext-to-column

解决方案


我们可以使用该Split()函数来解析每条记录。前:

在此处输入图像描述

编码:

Sub Parse()
    Dim i As Long, N As Long, v As String, u As Long
    N = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To N
        v = Cells(i, 1).Value
        If v <> "" Then
            arr = Split(v, ",")
            u = UBound(arr) + 1
            Range(Cells(i, 1), Cells(i, u)).Value = arr
        End If
    Next i
End Sub

之后:

在此处输入图像描述

笔记:

您可以仅使用公式(无 VBA)获得类似的结果。例如,对于A列中的数据,在B1中输入:

=TRIM(MID(SUBSTITUTE($A1,",",REPT(" ",999)),COLUMNS($A:A)*999-998,999))

并横向和向下复制。

编辑#1:

  1. 带有的行Split()获取单个单元格的内容并将其分成一组项目
  2. u计算出数组中有多少项的行
  3. 行将Range()数组存放到行中的一组单元格中。

推荐阅读