【问题标题】:Excel 2010 split cell and duplicate rowExcel 2010 拆分单元格和重复行
【发布时间】:2018-01-02 07:46:21
【问题描述】:

我知道已经回答了类似的问题,但它们对我不起作用。我不是 excel 专家,所以我需要一些帮助。

我在 A-P 列中有数据,但在 I 和 M 列中有数据,用分号分隔。我需要拆分 I 列和 M 列,并使用所有其他数据制作重复行。我想我必须拆分 I 并制作重复的行,然后对 M 重复,但我不确定。

再次抱歉问了类似的问题。

【问题讨论】:

    标签: excel vba split duplicates


    【解决方案1】:

    根据您的描述,这应该可以满足您的需求。

    Option Explicit
    
    'Qual coluna possui os termos que repetem?
    Const ANALYSIS_ROW1 As String = "I"
    Const ANALYSIS_ROW2 As String = "M"
    
    'Em qual linha começam os dados?
    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_ROW1).End(xlUp).Row
        End With
    
    
        For iRow = LastRow To DATA_START_ROW Step -1
            iSplit = Split(ws.Cells(iRow, ANALYSIS_ROW1).Value2, ";")
            iSplit = Split(ws.Cells(iRow, ANALYSIS_ROW2).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_ROW1).Offset(iIndex).Value2 = iSplit(iIndex)
                ws.Cells(iRow, ANALYSIS_ROW2).Offset(iIndex).Value2 = iSplit(iIndex)
            Next iIndex
    Continue:
        Next iRow
    
        Application.CutCopyMode = False
        Application.Calculation = xlCalculationAutomatic
        Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

      【解决方案2】:

      我愿意:

      1. I 之后插入两列并使用下面的公式(第 2 行的示例):

      2. 使用以下公式在J 中设置单元格:=LEFT(I2;SEARCH(";";I2)-1)

      3. 使用以下公式在K 中设置单元格:=MID(I2;SEARCH(";";I2)+1;10000)

      4. 复制两个新列的内容并将特殊值粘贴到同一位置

      5. 最后删除列I

      ...对列 M 执行相同操作

      您总是可以编写一个宏来迭代行、读取值、使用 Split() 函数拆分它们、将新值写入新列中,但我认为这不值得。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-22
        • 2017-09-11
        • 1970-01-01
        相关资源
        最近更新 更多