【发布时间】:2017-08-28 10:37:45
【问题描述】:
我只修改了一次代码,因为这是我需要的,但我需要一些额外的东西,但我不知道该怎么做。
这是this帖子的原始代码:
Sub test()
将 lastRow 设为整数,i 设为整数 Dim cel As Range, rng As Range, sortRng As Range 将 curString 调暗为字符串,将 nextString 调为字符串 将 hasHeaders 调暗为布尔值
haveHeaders = False ' 如果您有标题,请将其更改为 TRUE。
lastRow = Cells(1, 1).End(xlDown).Row
If haveHeaders Then '如果你有标题,我们将在第 2 行开始范围 设置 rng = Range(Cells(2, 1), Cells(lastRow, 1)) 设置 sortRng = Range(Cells(2, 1), Cells(lastRow, 2)) 别的 设置 rng = Range(Cells(1, 1), Cells(lastRow, 1)) 设置 sortRng = Range(Cells(1, 1), Cells(lastRow, 2)) 万一 ' 首先,让我们利用您的数据,按顺序获取所有“A 列”值,这会将所有重复项组合在一起
使用 ActiveSheet .Sort.SortFields.Clear .Sort.SortFields.Add Key:=rng, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 使用 .Sort .SetRange sortRng .Header = xlGuess .MatchCase = 假 .Orientation = xlTopToBottom .SortMethod = xlPinYin 。申请 结束于
' Now, let's move all "Column B" data for duplicates into Col. C
' We can check to see if the cell's value is a duplicate by simply counting how many times it appears in `rng`
Dim isDuplicate As Integer, firstInstanceRow As Integer, lastInstanceRow As Integer
If haveHeaders Then
curString = Cells(2, 1).Value
Else
curString = Cells(1, 1).Value
End If
Dim dupRng As Range 'set the range for the duplicates
Dim k As Integer
k = 0
For i = 1 To lastRow
If i > lastRow Then Exit For
Cells(i, 1).Select
curString = Cells(i, 1).Value
nextString = Cells(i + 1, 1).Value
isDuplicate = WorksheetFunction.CountIf(rng, Cells(i, 1).Value)
If isDuplicate > 1 Then
firstInstanceRow = i
Do While Cells(i, 1).Offset(k, 0).Value = nextString
'Cells(i, 1).Offset(k, 0).Select
lastInstanceRow = Cells(i, 1).Offset(k, 0).Row
k = k + 1
Loop
Range(Cells(firstInstanceRow + 1, 2), Cells(lastInstanceRow, 3)).Copy
Cells(firstInstanceRow, 5).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Range(Rows(firstInstanceRow + 1), Rows(lastInstanceRow)).EntireRow.Delete
k = 0
lastRow = Cells(1, 1).End(xlDown).Row
End If
Next i
End With
End Sub
我做的是:
改变了这个:
Range(Cells(firstInstanceRow + 1, 2), Cells(lastInstanceRow, 2)).Copy
Cells(firstInstanceRow, 3).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Application.CutCopyMode = False
到
Range(Cells(firstInstanceRow + 1, 2), Cells(lastInstanceRow, 3)).Copy
Cells(firstInstanceRow, 5).PasteSpecial xlPasteValues
Application.CutCopyMode = False
我拥有的是:
A 列有重复项。 B 列具有独特的价值。 并且 C 列具有唯一值的数量。 我一直工作到复制和粘贴部分,除了它从 B 列的值复制列 C 或另一种方式是它从列 B 复制每个值和列 C 的数量,但是当它完成时,它会删除所有重复。
例子
Column A Column B column C
322 sku322 qty 20
322 322sku qty 25
输出类似
Column D column E
sku322 qty 20
322sku qty 25
完成后,它会删除第二行。这意味着我没有第二个唯一值。
或者输出如下:
Column D Column E
sku322 322sku
qty 20 qty 25
然后它删除最后一行,我不再有数量了。 从我的思维方式来看,如果没有办法粘贴在同一行上,那意味着在每次找到后它应该重新执行循环而不是批量复制/粘贴。但我尝试了多种方法,似乎无法找到一种方法让它发挥作用。 提前感谢您的帮助。
【问题讨论】: