Vba 用excel中的另一个范围替换值比较范围
我在excel中有两列数据,“a列”中的数据需要替换为另一个单独的值,比如“b列”中匹配数据的“新数据”,例如,b列中的4001024和4000521也存在于a列中,所以我需要用“新数据”替换a列中的值 样本数据和输出如下所示。 我还需要查看B列的所有值,B列包含大约1000个条目,a列包含5000多个条目 原始数据预期输出Vba 用excel中的另一个范围替换值比较范围,vba,excel,Vba,Excel,我在excel中有两列数据,“a列”中的数据需要替换为另一个单独的值,比如“b列”中匹配数据的“新数据”,例如,b列中的4001024和4000521也存在于a列中,所以我需要用“新数据”替换a列中的值 样本数据和输出如下所示。 我还需要查看B列的所有值,B列包含大约1000个条目,a列包含5000多个条目 原始数据预期输出 a列b列a列b列 400052040010244000520 4001024 4000520 4001204 4000520 4001204 4000520 40
a列b列a列b列
400052040010244000520 4001024
4000520 4001204 4000520 4001204
4000520 4002475 4000520 4002475
40005214002477新数据4002477
40005214002517新数据4002517
40005214003062新数据4003062
40005214000521新数据4000521
4000521newData
4000521newData
4000521newData
4000522 4000522
4000522 4000522
4001024newData
4001024newData
我将在C列中创建一个helper列,并在单元格C2中使用此公式并将其向下拖动:
=IF(ISERROR(VLOOKUP(A2,B:B,1,FALSE)),A2,"NewData")
如果在B列中找到A列中的值,那么它将被替换为“NewData”,否则它将显示为原始值
然后,您可以复制列C并将值粘贴到原始列A上。我将在列C中创建一个辅助列,并在单元格C2中使用此公式并将其向下拖动:
=IF(ISERROR(VLOOKUP(A2,B:B,1,FALSE)),A2,"NewData")
如果在B列中找到A列中的值,那么它将被替换为“NewData”,否则它将显示为原始值
然后可以复制列C并将值粘贴到原始列A上。如果使用VBA,代码可能如下所示:
Sub newdata()
Dim awb As Workbook
Dim ws As Worksheet
Dim a_lastrow As Integer 'last row of column A
Dim b_lastrow As Integer 'last row of column B
Set awb = ThisWorkbook
Set ws = awb.Worksheets("Sheet1") 'change "Sheet1" to the name of your sheet
With ws
a_lastrow = .Range("A100000").End(xlUp).Row
b_lastrow = .Range("B100000").End(xlUp).Row
For r = 1 To a_lastrow
If Application.WorksheetFunction.CountIf(.Range("B1:B" & b_lastrow), .Range("A" & r).Value) > 0 Then
.Range("A" & r).Value = "newData"
End If
Next r
End With
MsgBox ("done")
End Sub
将此代码发布到单独的模块中。将“Sheet1”更改为工作表的名称。如果使用VBA,代码可能如下所示:
Sub newdata()
Dim awb As Workbook
Dim ws As Worksheet
Dim a_lastrow As Integer 'last row of column A
Dim b_lastrow As Integer 'last row of column B
Set awb = ThisWorkbook
Set ws = awb.Worksheets("Sheet1") 'change "Sheet1" to the name of your sheet
With ws
a_lastrow = .Range("A100000").End(xlUp).Row
b_lastrow = .Range("B100000").End(xlUp).Row
For r = 1 To a_lastrow
If Application.WorksheetFunction.CountIf(.Range("B1:B" & b_lastrow), .Range("A" & r).Value) > 0 Then
.Range("A" & r).Value = "newData"
End If
Next r
End With
MsgBox ("done")
End Sub
将此代码发布到单独的模块中。将“Sheet1”更改为工作表的名称。对不起,您能更详细地解释一下逻辑吗?在示例表中,您具体在做什么?还有,你是说a列和b列,而不是单元格?我已经编辑了这个问题,你现在能理解吗?提前感谢您,因此a列和b列中出现的任何值都将被a列中的“newData”替换。我仍然不明白的是:为什么4001024会从输出中的b列中消失?抱歉,这是我的错误!实际上,b列在输出中是不变的,是的,您是对的,a列和b列中出现的任何值都将被a列中的“newData”替换。对不起,您能更详细地解释一下逻辑吗?在示例表中,您具体在做什么?还有,你是说a列和b列,而不是单元格?我已经编辑了这个问题,你现在能理解吗?提前感谢您,因此a列和b列中出现的任何值都将被a列中的“newData”替换。我仍然不明白的是:为什么4001024会从输出中的b列中消失?抱歉,这是我的错误!实际上,b列在输出中是不变的,是的,您是对的,a列和b列中出现的任何值都将被a列中的“newData”替换。