如何使用 VBA 合并列 A 中的重复单元格,同时在列 C 中对它们的值求和,并在列 B 中获取它们的标识符 Excel 2013

如何使用 VBA 合并列 A 中的重复单元格,同时在列 C 中对它们的值求和,并在列 B 中获取它们的标识符 Excel 2013

这就是我要的。

这就是我要的

合并 A 列中的重复项
从 B 列中提取标识符
从 C 列中求和

Sub SkuSorter()

Dim x As Long, y As Long
Dim rng As Range
Dim wSrc As Worksheet: Set wSrc = Sheets("AR Received SKU's List 1")

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

With wSrc
    x = .Range("A" & .Rows.Count).End(xlUp).Row
    Set rng = .Range("A1:A" & x)
    y = .Cells(1, .Columns.Count).End(xlToLeft).Column + 2
    rng.AdvancedFilter Action:=xlFilterCopy, copytoRange:=.Cells(1, y), unique:=True
    Z = .Cells(.Rows.Count, y).End(xlUp).Row
    y = y + 1
    .Cells(1, y).Value = "Total"
    .Range(.Cells(2, y), .Cells(Z, y)).Formula = _
        "=SUMIF(" & rng.Address & "," & .Cells(2, y - 1).Address(False, False) & "," & rng.Offset(, 1).Address & ")"
End With

With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With

End Sub

答案1

希望您能再次查看这里。
我将给出不需要 VBA 的答案,并尝试解释每一个细节。

使用您分享的图片,我创建了自己的表格:
在此处输入图片描述
我们从F2最上面的项目开始。简单=A2就可以了。
这里没什么可解释的。

G2=IF(LEN(F2),INDEX(B:B,MATCH(F2,A:A,0)),"")。知道第二列将始终与第一列相同,它只需F2在范围A:A( MATCH) 内搜索精确匹配的内容并打印B:B同一行中的所有内容。(它会在找到的第一个项目处停止,但这并不重要,因为它始终相同)。LEN仅防止它在搜索字符串为空时显示#NA,并跳过整个数组计算。

正是H2您所建议的。它只是将列中具有给定搜索词的=IF(LEN(F2),SUMIF(A:A,F2,C:C),"")所有值相加。-part 与 相同,虽然它不会显示错误,但它会弹出一个。但是,如果存在搜索词并且总和为,您仍将得到零。CALENG200

虽然您可以根据需要自动填充G2H2减少,但对于 则不起作用F2。但您可以在 中使用以下公式来实现F3

=IF(LEN(F2),IFERROR(INDEX(A:A,MATCH(1,(COUNTIF(F$2:F2,A$2:A$1000)=0)*(A$2:A$1000<>""),0)+1),""),"")

Ctrl这是一个数组公式,必须用++Shift来确认Enter

它以 开始,它只返回一个二进制数组,而每个项目如果与任何搜索字符串匹配,则COUNTIF获得 ,所有其他项目都获得(搜索自身上方的所有字符串)。因为我们不想得到一个已经使用过的项目,所以我们将所有项目变为()。我们也不想要一个项目,所以我们也检查它( )。将两个布尔数组相乘与每对项目都有一个相同,而使用实数将检查两个数组中的所有项目是否为。但是,再次相乘会给我们一个二进制数组,每个项目都有 ,它不为空且未使用。现在检查第一个并返回其位置编号(行)。但从第二行开始给我们一个偏移量,该偏移量被 抵消。有了位置,我们就可以得到我们需要的字符串。仅适用于第一个解决方案,它将返回。并且只是跳过第一个空单元格之后的所有单元格的计算。 使用公式向导查看它真正计算的内容也有助于理解。但总是10F$2:F20 TRUE=0emptyA$2:A$1000<>""ANDANDTRUE1MATCH1+1INDEXIFERRORempty#NALEN
再检查一遍全部$或自动填充可能会失败。

如果您还需要询问什么,请发表评论。:)

相关内容