Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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_Worksheet - Fatal编程技术网

Vba 比较两个不同excel工作表和工作簿中的列,然后将匹配值发布到另一列中

Vba 比较两个不同excel工作表和工作簿中的列,然后将匹配值发布到另一列中,vba,excel,worksheet,Vba,Excel,Worksheet,我很难理解这个宏,所以现在我在一个工作簿中使用了两张工作表;我想使用两种不同的工作手册,但这没有问题重要 为了解释,Sheet1列E是id号,Sheet2列A是id号,现在如果Sheet1 E中的任何值与Sheet2列A中的值匹配,我需要宏从Sheet2列D复制相应的单元格。因此,基本上如果E5(来自Sheet1)与Sheet2中的A1匹配,我需要宏将Sheet2的D1输出到Sheet1的F5。如果Sheet1列E与表2列a中的值不匹配,则最好删除Sheet1列F的值 我有一些代码,但如果She

我很难理解这个宏,所以现在我在一个工作簿中使用了两张工作表;我想使用两种不同的工作手册,但这没有问题重要

为了解释,Sheet1列E是id号,Sheet2列A是id号,现在如果Sheet1 E中的任何值与Sheet2列A中的值匹配,我需要宏从Sheet2列D复制相应的单元格。因此,基本上如果E5(来自Sheet1)与Sheet2中的A1匹配,我需要宏将Sheet2的D1输出到Sheet1的F5。如果Sheet1列E与表2列a中的值不匹配,则最好删除Sheet1列F的值

我有一些代码,但如果Sheet1列E的值与Sheet2列a的值匹配,它只会粘贴来自Sheet2列D的值。问题是当从Sheet2粘贴的值粘贴到Sheet1的列F中,并且这些值与Sheet2中匹配的正确值不匹配时。他们只是哑口无言。如果Sheet1的E列是这样的

Sheet1 Column E    Sheet1 F

1317               relays_120x120.jpg
1319              Control%20boards_120x120
1320              Control%20boards_120x120

Sheet2 Column A             Sheet2 column D
1317                       relays_120x120
1318                       /relays_120x120
1319                    ebay/SingleRunOval
但实际上,我需要它们都相等,如果Sheet1列E的值不在Sheet2列中,则不要在Sheet1列F中发布链接,将其留空

这是我的密码

Sub FindMatches()

    Dim oldRow As Integer
    Dim newRow As Integer
    Dim i As Integer

    i = 1

    For oldRow = 2 To 1170
        For newRow = 1 To 1170
            If Worksheets("Sheet1").Cells(oldRow, 5) = Worksheets("Sheet2").Cells(newRow, 1) Then

                Worksheets("Sheet1").Cells(i, 6) = Worksheets("Sheet2").Cells(oldRow, 4)


                i = i + 1

                Exit For
            End If
        Next newRow
    Next oldRow


End Sub

听起来你可以用VLookup函数来完成你的目标。将此公式添加到表1 F1:
=IFERROR(VLookup(E1,表2!A:D,4,FALSE),“”)


如果找到匹配项,该公式将把单元格复制到sheet1中,但如果没有找到匹配项,单元格将保持空白。

尝试使用以下代码。我刚刚用StrComp函数修改了你的代码

Sub FindMatches()

    Dim oldRow As Integer
    Dim newRow As Integer
    Dim i As Integer
    i = 1
    For oldRow = 1 To 1170
        For newRow = 1 To 1170
            If StrComp((Worksheets("Sheet1").Cells(oldRow, 5).Text), (Worksheets("Sheet2").Cells(newRow, 1).Text), vbTextCompare) <> 0 Then
                i = oldRow
                Worksheets("Sheet1").Cells(i, 6) = " "
                Else
                Worksheets("Sheet1").Cells(i, 6) = Worksheets("Sheet2").Cells(newRow, 4)
                i = i + 1
                Exit For
            End If
        Next newRow
    Next oldRow

End Sub
子查找匹配()
将oldRow设置为整数
将newRow设置为整数
作为整数的Dim i
i=1
对于oldRow=1至1170
对于newRow=1到1170
如果StrComp((工作表(“Sheet1”).Cells(oldRow,5.Text),(工作表(“Sheet2”).Cells(newRow,1.Text),vbTextCompare)为0,则
i=oldRow
工作表(“表1”)。单元格(i,6)=“
其他的
工作表(“表1”).单元格(i,6)=工作表(“表2”).单元格(纽罗,4)
i=i+1
退出
如果结束
下一个纽罗
下一个奥尔德罗
端接头

如何使用vlookup(值(e1,Sheet2!a:D,4,FALSE)而不是返回空白,将其宏入,您希望它返回什么而不是空白单元格?