Excel,拆分逗号分隔值

时间:2014-12-22 08:02:50

标签: excel vba excel-vba xlsx

我有一张包含2列的Excel表格。

Column1包含如下值:

  

10969
  11284个
  1222
  1227
  12669个
  12670个
  12671个
  12672

Column2包含逗号分隔值,如下所示:

  

601010,6010,40,4010
  601010,6010,40,4010
  40,4010,6010,601010
  40,4010,6010,601010
  40,4010,6010,601010
  40,4010,6010,601010
  40,4010,6010,601010
  40,4010,6010,601010

我需要以不同的方式进行拆分,所以我没有使用column2逗号分隔,而是每列第2列需要1行 Column1应该为每个字符串使用相同的值,因此您将获得4行,其中column1中的编号相同,而column2中的编号不同

使用上述数据的示例

栏目1

  

10969
  10969个
  10969个
  10969个
  11284个
  11284个
  11284个
  11284

列2

  

601010
  6010
  40个
  4010
  601010个
  6010
  40个
  4010

每次都不是相同的值,并且有超过1000行,因此手动执行它是一项艰巨的任务。 据我所知,使用标准Excel"是不可能的,但也许是VBA?

我希望有人能指出我正确的方向。

此致 马丁

2 个答案:

答案 0 :(得分:0)

这非常适合Power Query。将表格吸入Power Query,用逗号分隔符拆分Column2,选择除第一列之外的所有列,然后单击Unpivot。

主要处理问题之一是数字数据用逗号分隔,逗号也可以是大量的“千”分隔符。我试图复制你的数据样本,但有些行以文本形式返回,只有数字和逗号,其他行以指数格式返回非常非常大的数字。

因此,您可能需要在定义传入数据类型方面做一些工作。这可能是区域设置的问题。我的区域设置将逗号作为千分隔符。

您最好使用文件共享服务发布实际的Excel文件并在此处发布链接。

Power Query可以做到这一点 - 这是给定的。我们只需要理顺数据格式就可以解决这个问题。

答案 1 :(得分:-1)

回答HERE

我相信最好的解决方案是在突出显示/选择B列时运行以下VBA:

Sub columnsplit()
Dim c As Range
Dim splitv() As String

For Each c In Selection
    splitv = Split(c.Value, ",")
    If UBound(splitv) > 0 Then
        c.EntireRow.Insert
        c.Offset(-1, 0).Value = splitv(1)
        c.Offset(-1, -1).Value = c.Offset(0, -1).Value
        c.Value = splitv(0)
    End If
Next c
End Sub

这应该会给你想要的结果。

然而,当我测试代码时,有时候不清楚代码是否已经运行,因为您需要记住Excel有一个很好的功能,即为您分隔数值添加逗号。

例如,您可能拥有123456,123456789这段代码将拆分它,但Excel可能会显示123,456和123,456,789作为结果。您需要修改格式,以便不会发生这种情况。