Excel 比较同一工作表VBA中的两列
我试图比较同一工作表中B列和AB列的数据。如果存在匹配项,那么我想从AB列中删除匹配项。 一旦匹配完成,我想将剩余的数据复制到Z列中 到目前为止,我所研究的是,但我并没有和不同工作簿上的同一专栏进行比较 我附上了一些截图,如下所示: 我现在的代码在这里`Excel 比较同一工作表VBA中的两列,excel,vba,Excel,Vba,我试图比较同一工作表中B列和AB列的数据。如果存在匹配项,那么我想从AB列中删除匹配项。 一旦匹配完成,我想将剩余的数据复制到Z列中 到目前为止,我所研究的是,但我并没有和不同工作簿上的同一专栏进行比较 我附上了一些截图,如下所示: 我现在的代码在这里` Sub CompareNRemove() For i = 1 To last_cell_B For j = 1 To last_cell_AB If Worksheets("Sheet1").Range("
Sub CompareNRemove()
For i = 1 To last_cell_B
For j = 1 To last_cell_AB
If Worksheets("Sheet1").Range("B" & i).Value = Worksheets("Sheet1").Range("AB" & j).Value Then
Worksheets("Sheet2").Range("C" & i).Value = Worksheets("sheet2").Range("b" & j).Value
End If
Next j
Next i
Next r
'Sheets("Sheet1").Range("AB18:AC999").ClearContents
'Call MatchNSortW
End Sub
For r = 18 To Cells(Rows.Count, "E").End(xlUp).row ' From row 1 to the last row with data
On Error Resume Next
myCountif = ThisWorkbook.Sheets("Sheet1").Cells(r, "E")
myLookup = ThisWorkbook.Sheets("Sheet1").Cells(r, "E")
MyAnswer = Application.WorksheetFunction.Application.Countif(Range("AB18:AB999"), Cells(r, "E"))
If MyAnswer = 1 Then
Match = Application.WorksheetFunction.Application.VLookup(myLookup, ThisWorkbook.Sheets("Sheet1").Range("AB18:AB999"), 1, 0)
Cells(r, "B").Value = Match
'Check = Application.WorksheetFunction.Application.VLookup(Match, Range("AB18:AB999"), 0)
'Cells(r, "D").Value = Check
'Check it off the list
'Check = Application.WorksheetFunction.Application.Match(Cells(r, "B"), Range("AB18:AB999"), 0)
'Checkup = Application.WorksheetFunction.Application.Match(MyAnswer, ThisWorkbook.Sheets("Sheet1").Range("AB18:AB999"), 0)
ElseIf MyAnswer = 0 Then
Cells(r, "B").Value = ""
End If
Next r
'Sheets("Sheet1").Range("AB18:AC999").ClearContents
'Call MatchNSortW
End Sub`
这将获取列B中不存在的列AB中的值,并将其放入列Z。如果您还想从列AB中删除重复的值,则只需清除列AB并将相同的值转移到该列即可
Sub CompareNRemove()
dim i as long, arrB as variant, arrAB as variant, z as object
set z = createobject("scripting.dictionary")
with worksheets("sheet101")
arrB = .range(.cells(2, "B"), .cells(.rows.count, "B").end(xlup)).value
arrAB = .range(.cells(2, "AB"), .cells(.rows.count, "AB").end(xlup)).value
for i=lbound(arrab, 1) to ubound(arrab, 1)
if arrab(i, 1) <> vbnullstring then
if iserror(application.match(arrab(i, 1), arrb, 0)) then
z.item(arrab(i, 1)) = vbnullstring
end if
end if
next i
.cells(2, "Z").resize(z.count, 1) = application.transpose(z.keys)
end with
end sub
因此,请使用链接文章中的代码,但将引用更改为指向同一工作表中的不同列。您自己的努力是在此处找到帮助的条件。若要限定代码,您需要尝试过的代码和失败的代码。@KenWhite我尝试过,但它不允许我在不同的工作表之间更改参考点