Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 用excel中的另一个范围替换值比较范围_Vba_Excel - Fatal编程技术网

Vba 用excel中的另一个范围替换值比较范围

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

我在excel中有两列数据,“a列”中的数据需要替换为另一个单独的值,比如“b列”中匹配数据的“新数据”,例如,b列中的40010244000521也存在于a列中,所以我需要用“新数据”替换a列中的值

样本数据和输出如下所示。 我还需要查看B列的所有值,B列包含大约1000个条目,a列包含5000多个条目

原始数据预期输出

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”替换。