【发布时间】:2018-01-02 07:46:21
【问题描述】:
我知道已经回答了类似的问题,但它们对我不起作用。我不是 excel 专家,所以我需要一些帮助。
我在 A-P 列中有数据,但在 I 和 M 列中有数据,用分号分隔。我需要拆分 I 列和 M 列,并使用所有其他数据制作重复行。我想我必须拆分 I 并制作重复的行,然后对 M 重复,但我不确定。
再次抱歉问了类似的问题。
【问题讨论】:
标签: excel vba split duplicates
我知道已经回答了类似的问题,但它们对我不起作用。我不是 excel 专家,所以我需要一些帮助。
我在 A-P 列中有数据,但在 I 和 M 列中有数据,用分号分隔。我需要拆分 I 列和 M 列,并使用所有其他数据制作重复行。我想我必须拆分 I 并制作重复的行,然后对 M 重复,但我不确定。
再次抱歉问了类似的问题。
【问题讨论】:
标签: excel vba split duplicates
根据您的描述,这应该可以满足您的需求。
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
【讨论】:
我愿意:
在I 之后插入两列并使用下面的公式(第 2 行的示例):
使用以下公式在J 中设置单元格:=LEFT(I2;SEARCH(";";I2)-1)
使用以下公式在K 中设置单元格:=MID(I2;SEARCH(";";I2)+1;10000)
复制两个新列的内容并将特殊值粘贴到同一位置。
最后删除列I。
...对列 M 执行相同操作
您总是可以编写一个宏来迭代行、读取值、使用 Split() 函数拆分它们、将新值写入新列中,但我认为这不值得。
【讨论】: