Excel 比较单元格A和D的两个范围并复制重复数据
如果A&D匹配,将A粘贴到G中,然后添加B&E并将结果放在H列中。我在将B&E的值添加到H中时遇到了问题Excel 比较单元格A和D的两个范围并复制重复数据,excel,vba,Excel,Vba,如果A&D匹配,将A粘贴到G中,然后添加B&E并将结果放在H列中。我在将B&E的值添加到H中时遇到了问题 Private Sub CommandButton1_Click() Dim rng1 As Range Dim rng2 As Range Dim RowNo As Long Dim LR As Long Set rng1 = Worksheets("Sheet1").Range("D1:D100", Worksheets("Sheet1").Ra
Private Sub CommandButton1_Click()
Dim rng1 As Range
Dim rng2 As Range
Dim RowNo As Long
Dim LR As Long
Set rng1 = Worksheets("Sheet1").Range("D1:D100", Worksheets("Sheet1").Range("D" & Rows.Count).End(xlUp))
Set rng2 = Worksheets("Sheet1").Range("A1:A100", Worksheets("Sheet1").Range("A" & Rows.Count).End(xlUp))
For Each d In rng1
LR = Range("H" & Rows.Count).End(xlUp).Row
Range("F1:F" & LR).Formula = "=H1+C1"
If Not d.Value = "" And Application.WorksheetFunction.CountIf(rng2, d) > 0 Then
RowNo = Application.WorksheetFunction.Match(d, rng2)
If d.Offset(, 1).Value = "" Then d.Offset(, 3).Resize(1).Value _
= Worksheets("Sheet1").Range("A" & RowNo).Value
If d.Offset(, 1).Value = "" Then d.Offset(, 4).Resize(1).Value _
= Worksheets("Sheet1").Range("B" & RowNo).Value
End If
Next d
End Sub
示例单元格:
A 1 X 22 A 45
B 2 C 33 C 36
C 3 A 44 F 105
D 4 Y 55
E 5 J 66
F 6 O 77
G 7 T 88
F 99
W 11
如果问题只是将正确的数字输入H,请使用此代码。把它放在“末端接头”上。 代码假设您在A和D中填充的行永远不会超过1000行,但您可以更改这一点
Range("H1").Select
ActiveCell.FormulaR1C1 = _
"=SUMIF(R1C1:R1000C1,RC[-1],R1C2:R1000C2)+SUMIF(R1C4:R1000C4,RC[-1],R1C5:R1000C5)"
Selection.Copy
Range("H2:H" & WorksheetFunction.CountA(Columns(7))).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("H1:H" & WorksheetFunction.CountA(Columns(7))).Select
'the following lines are only necessary if you don't want a formula in H.
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
希望有帮助!
Max有什么问题吗?我感觉到这句话中有输入错误
来自B和E的值将粘贴到单元格E
。你的意思是E
两次吗?你的代码将A&D和副本与G进行了比较。请明确解释你在做什么方面有困难。我不明白你的例子。B和E又有什么问题?您是否将它们进行比较,然后复制到E并覆盖其值?这就是目的吗?我可以比较A和D,得到结果A,C和F,如图所示。我的问题是把B和E的值加到H上,得到45,36和105。顺便说一下,我的代码有点问题,我还是vba的新手。欢迎使用堆栈溢出(SO)。请用这些问题更新您的问题,而不是将其放在评论中。因此,您试图用代码表示如果A
和D
匹配,请将A
粘贴到G
中。然后添加B
和E
,并将结果放入H
?