【问题标题】:Split comma separated entries to new rows while keeping row data [duplicate]将逗号分隔的条目拆分为新行,同时保留行数据[重复]
【发布时间】:2017-01-28 09:50:47
【问题描述】:

我根本不知道 vba,所以我想知道是否有人可以帮助我解决我正在尝试创建的 VBA 代码。 我有一堆数据。我在 A 到 W 列中有数据。

我有一列有多个用逗号分隔的数据,如下所示:

Col V  |  Col W 
----   |  ----
1      |angry birds, gaming
2      |nirvana,rock,band

我想要做的是拆分第二列中的逗号分隔条目并插入新行,如下所示:

Col V|Col W
---- |----
1    |angry birds
1    |gaming
2    |nirvana
2    |rock
2    |band

基本上,我想复制这个

Excel macro -Split comma separated entries to new rows

但我想这样做,同时保持 A-V 列中的所有数据完好无损。另请注意,W 列最多可以有 40 个需要分隔的项目。

非常感谢!

【问题讨论】:

  • 请展示您修改代码以满足您的需要的尝试。 Stack Overflow 不是我网站的代码。我们将帮助解决现有代码的具体问题,但提出问题的人必须做出一些尝试。
  • 这个也可以用公式来完成,你试过吗?

标签: vba excel


【解决方案1】:

试试这个方法。之前。

代码

Option Explicit

Const ANALYSIS_ROW As String = "K"
Const DATA_START_ROW As Long = 2

Sub ReplicateData()
    Dim iRow As Long
    Dim lastrow As Long
    Dim ws As Worksheet
    Dim iSplit() As String
    Dim iIndex As Long
    Dim iSize As Long

    'Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    With ThisWorkbook
        .Worksheets("Sheet1").Copy After:=.Worksheets("Sheet1")
        Set ws = ActiveSheet
    End With

    With ws
        lastrow = .Cells(.Rows.Count, ANALYSIS_ROW).End(xlUp).Row
    End With


    For iRow = lastrow To DATA_START_ROW Step -1
        iSplit = Split(ws.Cells(iRow, ANALYSIS_ROW).Value2, ",")
        iSize = UBound(iSplit) - LBound(iSplit) + 1
        If iSize = 1 Then GoTo Continue

        ws.Rows(iRow).Copy
        ws.Rows(iRow).Resize(iSize - 1).Insert
        For iIndex = LBound(iSplit) To UBound(iSplit)
            ws.Cells(iRow, ANALYSIS_ROW).Offset(iIndex).Value2 = iSplit(iIndex)
        Next iIndex
Continue:
    Next iRow

    Application.CutCopyMode = False
    Application.Calculation = xlCalculationAutomatic
    'Application.ScreenUpdating = True
End Sub

之后。

【讨论】:

    【解决方案2】:

    根据您的数据(并且增加 ID 不会破坏交易,只是做出的假设),您可以使用公式为您分解它。这将实现以下效果,其中绿色区域是数据,黄色将形成所需的输出,为了便于理解,我添加了蓝色的“帮助”列。 公式如下

    C2填写完毕=LEN(B2)-LEN(SUBSTITUTE(B2,",",""))+1

    D2 填写完毕=SUM($C$2:C2)

    F2=A2

    F3 =IF(ROW()-1>VLOOKUP($F2,$A$2:$D$4,4,0),$F2+1,$F2) 填写完毕

    G2 =COUNTIF($F$2:F2,F2) 填写完毕

    H2 =VLOOKUP($F2,$A$2:$B$4,2,0) 填写完毕

    I2 =IF($G2=1,SUBSTITUTE($H2,",",">",1),SUBSTITUTE(SUBSTITUTE(H2,",","<",G2-1),",",">",G2-1)) 填写完毕

    J2 =IF($G2=1,1,FIND("<",$I2)) 填写完毕

    K2 =IF($G2<VLOOKUP($F2,$A$2:$D$4,3,0),FIND(">",$I2),LEN(H2)+1)-J2 填写完毕 L2=IF(ISERROR(H2),"--",MID(H2,J2,IF(K2>0,K2,1)))填写完毕

    逗号计数,应为段计数,道歉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 2013-10-05
      相关资源
      最近更新 更多