Excel 2010拆分单元格和重复行

时间:2017-07-26 19:52:38

标签: excel vba split duplicates

我知道类似的问题已得到解答,但它们对我不起作用。我不是excel的专家,所以我可以使用一些帮助。

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

再次抱歉提出类似问题。

2 个答案:

答案 0 :(得分:0)

我会:

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

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

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

  4. 复制两个新列'内容和特殊粘贴值在同一个地方。

  5. 最后删除列I

  6. ...并对列M

    执行相同操作

    您总是可以编写宏来迭代行,读取值,使用Split()函数拆分它们,在新列中写入新值,但我认为这不值得付出努力。< / p>

答案 1 :(得分:0)

根据你的描述,这应该做你想要的。

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