Vba Excel,拆分逗号分隔的值

Vba Excel,拆分逗号分隔的值,vba,excel,xlsx,Vba,Excel,Xlsx,我有一张Excel表格,有两列 第1列包含如下值: 10969 11284 1222 1227 12669 12670 12671 12672 Column2包含逗号分隔的值,如下所示: 60101060104010 601010,6010,40,4010 40,4010,6010,601010 40,4010,6010,601010 40,4010,6010,601010 40,4010,6010,601010 40,4010,6010,601010 4040106010601010 我需要以

我有一张Excel表格,有两列

第1列包含如下值:

10969 11284 1222 1227 12669 12670 12671 12672

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

60101060104010 601010,6010,40,4010 40,4010,6010,601010 40,4010,6010,601010 40,4010,6010,601010 40,4010,6010,601010 40,4010,6010,601010 4040106010601010

我需要以不同的方式将其拆分,因此,我需要为第2列中的每个值指定一行,而不是将第2列中的逗号分开 Column1应该为每个字符串使用相同的值,因此Column1中有4行的数字相同,column2中的数字不同

使用上述数据的示例

专栏1

10969 10969 10969 10969 11284 11284 11284 11284

专栏2

601010 6010 40 4010 601010 6010 40 4010

它不是每次都有相同的值,而且有1000多行,因此手动执行是一项艰巨的任务。 据我所知,这是不可能的标准Excel,但可能与VBA

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

问候 马丁

如回答所示

我认为最好的解决方案是在突出显示/选择列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有一个很好的功能,可以为您添加逗号来分隔数值


例如,如果您可能有123456123456789,此代码将对其进行拆分,但Excel可能会显示123456和123456789作为结果。您需要修改您的格式,这样就不会发生这种情况

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

其中一个主要的处理问题是数字数据用逗号分隔,逗号也可以是大量的千位分隔符。我试图复制您的数据示例,但有些行返回为仅包含数字和逗号的文本,而其他行返回为指数格式的非常非常大的数字

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

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


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

您以前听过或尝试过开放XML sdk吗:嗨,KCdod,不,我从来没有听说过,我将尝试研究一下,看看这是否有助于解决问题。谢谢。我相信看看这个答案会对你有很大帮助。嗨,佩泰87,是的,这似乎正是我的问题。我将研究该线程中的不同建议。非常感谢。您好,下面的公式将以逗号分隔的单个单元格值转换列,例如=TEXTJOIN,,TRUE,A1:A4167Hi-Petay87,我也有一些vba脚本问题,所以我使用了NickSlash中的另一个,效果非常好。您好Teylyn,谢谢您的回答。我不熟悉电源查询,但听起来很有趣。正如写给Petay87的答案一样,我在另一个stackoverflow线程中找到了解决方案,解决了我的问题。