Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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/0/vba/17.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
Excel 检查列并复制是否相同_Excel_Vba - Fatal编程技术网

Excel 检查列并复制是否相同

Excel 检查列并复制是否相同,excel,vba,Excel,Vba,我有G2:G10范围内的数字,我必须检查这些数字是否在第二个文件B行的一个单元格中。现在,当G2(文件1)和B2(文件2)中的数字相同时,我只有一个true if参数。但我如何才能做到这一点,以便当G2(文件1)和B4(文件2)相同时,if也可以工作 Dim cell As Range Dim wb1 As Workbook, ws1 As Worksheet Dim wb2 As Workbook, ws2 As Worksheet Set wb1 = App

我有G2:G10范围内的数字,我必须检查这些数字是否在第二个文件B行的一个单元格中。现在,当G2(文件1)和B2(文件2)中的数字相同时,我只有一个true if参数。但我如何才能做到这一点,以便当G2(文件1)和B4(文件2)相同时,if也可以工作

    Dim cell As Range
    Dim wb1 As Workbook, ws1 As Worksheet
    Dim wb2 As Workbook, ws2 As Worksheet

    Set wb1 = Application.Workbooks.Open("T:\folder\Map2.xlsm")
    Set ws1 = wb1.Sheets("Tabelle1")
    Set wb2 = Application.Workbooks.Open("T:\folder\file.xlsx")
    Set ws2 = wb2.Sheets("sheet1")



    For Each cell In wb1.Sheets(1).Range("G2:G10")
        If cell.Value = ws2.Cells(cell.Row, "B").Value Then

            ws2.Cells(cell.Row, "D").Resize(1, 3).Select

        End If
    Next cell

End Sub

这是一本字典,我想你在找它。虽然我可能会把你的床单倒过来。我使用一个工作簿进行了测试,并在工作簿和工作表中添加了值。我也不确定当找到一个值时您想做什么,所以我将其留空

Sub compare()
    Dim wb1 As Workbook
    Dim wb2 As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet

    Dim cell As Range
    Dim lastrow As Long

    Dim dict As Object

    Set wb1 = Application.Workbooks.Open("T:\folder\Map2.xlsm")
    Set ws1 = wb1.Sheets("Tabelle1")
    Set wb2 = Application.Workbooks.Open("T:\folder\file.xlsx")
    Set ws2 = wb2.Sheets("sheet1")

    Set dict = CreateObject("Scripting.Dictionary") 'This is late bound you can change to early binding if you want
    With ws2
        lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row

        For Each cell In .Range("B1:B" & lastrow)
            If Not dict.exists(cell.Value) Then 'Avoid errors
                dict.Add cell.Value,cell 'Add key value, item will be the range
            End If
        Next cell
    End With

    With ws1
        For Each cell In Range("G2:G10")
            If dict.exists(cell.Value) Then 'Duplicate found when true
            'Here we take the matched range offset and place it in the new offset range
                Range(cell.Offset(0, 2), cell.Offset(0, 4)).Value = Range(dict(cell.Value).Offset(0, 2), dict(cell.Value).Offset(0, 4)).Value
            End If
        Next cell
    End With


End Sub

这是一本字典,我想你在找它。虽然我可能会把你的床单倒过来。我使用一个工作簿进行了测试,并在工作簿和工作表中添加了值。我也不确定当找到一个值时您想做什么,所以我将其留空

Sub compare()
    Dim wb1 As Workbook
    Dim wb2 As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet

    Dim cell As Range
    Dim lastrow As Long

    Dim dict As Object

    Set wb1 = Application.Workbooks.Open("T:\folder\Map2.xlsm")
    Set ws1 = wb1.Sheets("Tabelle1")
    Set wb2 = Application.Workbooks.Open("T:\folder\file.xlsx")
    Set ws2 = wb2.Sheets("sheet1")

    Set dict = CreateObject("Scripting.Dictionary") 'This is late bound you can change to early binding if you want
    With ws2
        lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row

        For Each cell In .Range("B1:B" & lastrow)
            If Not dict.exists(cell.Value) Then 'Avoid errors
                dict.Add cell.Value,cell 'Add key value, item will be the range
            End If
        Next cell
    End With

    With ws1
        For Each cell In Range("G2:G10")
            If dict.exists(cell.Value) Then 'Duplicate found when true
            'Here we take the matched range offset and place it in the new offset range
                Range(cell.Offset(0, 2), cell.Offset(0, 4)).Value = Range(dict(cell.Value).Offset(0, 2), dict(cell.Value).Offset(0, 4)).Value
            End If
        Next cell
    End With


End Sub
试试这个

Sub test()
    Dim c As Range, cx As Range, str$
    Dim wb1 As Workbook, ws1 As Worksheet
    Dim wb2 As Workbook, ws2 As Worksheet

    Set wb1 = Application.Workbooks.Open("T:\folder\Map2.xlsm")
    Set ws1 = wb1.Sheets("Tabelle1")
    Set wb2 = Application.Workbooks.Open("T:\folder\file.xlsx")
    Set ws2 = wb2.Sheets("sheet1")

    For Each c In ws1.Range(ws1.Cells(1, 7), ws1.Cells(ws1.Rows.Count, 7).End(xlUp))
        For Each cx In ws2.Range(ws2.Cells(1, 2), ws2.Cells(ws2.Rows.Count, 2).End(xlUp))
            If c = cx Then
                cx.Offset(, 2).Resize(1, 3).Select
                str = str & ", " & cx.Address
                'Msgbox cx.Address
            End If
        Next cx
    Next c
    Msgbox "The following cells meet the conditions: " & Replace(str, ",", "", 1, 1)
End Sub
试试这个

Sub test()
    Dim c As Range, cx As Range, str$
    Dim wb1 As Workbook, ws1 As Worksheet
    Dim wb2 As Workbook, ws2 As Worksheet

    Set wb1 = Application.Workbooks.Open("T:\folder\Map2.xlsm")
    Set ws1 = wb1.Sheets("Tabelle1")
    Set wb2 = Application.Workbooks.Open("T:\folder\file.xlsx")
    Set ws2 = wb2.Sheets("sheet1")

    For Each c In ws1.Range(ws1.Cells(1, 7), ws1.Cells(ws1.Rows.Count, 7).End(xlUp))
        For Each cx In ws2.Range(ws2.Cells(1, 2), ws2.Cells(ws2.Rows.Count, 2).End(xlUp))
            If c = cx Then
                cx.Offset(, 2).Resize(1, 3).Select
                str = str & ", " & cx.Address
                'Msgbox cx.Address
            End If
        Next cx
    Next c
    Msgbox "The following cells meet the conditions: " & Replace(str, ",", "", 1, 1)
End Sub


嗨,瑞克,我很困惑,你要检查G4是等于B2还是B2对G2。你的要求有点混乱。如果您想比较B2和G4,当您写入
cell.row
时,只需添加
+2
?Hi@标记。对不起,我的英语不是最好的。我有G2:G10在这是数字。我必须将这些数字与文件2中的整个B行进行比较。现在,if语句仅在G2和B2是相似数字时才起作用。但是我必须控制整个B行,所以当B15中有类似的数字时,我必须复制这个。你知道我的意思吗?不知道。您需要将一个电子表格中的1个单元格(一次)的值与整列(不是行?)中的多个单元格进行比较。我需要澄清,您想将
B2
G2:G10
之和进行比较吗?我有G2:G10。这些单元格中有数字。例如,单元格G2中的数字是20。我必须检查数字20是否也在整行B的一个单元格中。例如,20在B11中,那么我必须复制它旁边的单元格。当20在B256中时,我必须复制它旁边的单元格。现在它只在20处于G2和B2时工作。但是当20在B3中时,它不会起作用Hi Rick,我很困惑,你想检查G4是否等于B2或B2到G2。你的要求有点混乱。如果您想比较B2和G4,当您写入
cell.row
时,只需添加
+2
?Hi@标记。对不起,我的英语不是最好的。我有G2:G10在这是数字。我必须将这些数字与文件2中的整个B行进行比较。现在,if语句仅在G2和B2是相似数字时才起作用。但是我必须控制整个B行,所以当B15中有类似的数字时,我必须复制这个。你知道我的意思吗?不知道。您需要将一个电子表格中的1个单元格(一次)的值与整列(不是行?)中的多个单元格进行比较。我需要澄清,您想将
B2
G2:G10
之和进行比较吗?我有G2:G10。这些单元格中有数字。例如,单元格G2中的数字是20。我必须检查数字20是否也在整行B的一个单元格中。例如,20在B11中,那么我必须复制它旁边的单元格。当20在B256中时,我必须复制它旁边的单元格。现在它只在20处于G2和B2时工作。但是,当20在B3中时,它将不起作用。谢谢,我在ws1.Range(单元格(1,7),单元格(Rows.Count,7)。End(xlUp))中的每个c的第
行得到一个运行时错误1004,因此,您的范围正在查看一张工作表,而该范围包含的值正在从另一张工作表获取。@Rick请立即重试then@Rick如果我的回答能解决你的问题,请随意接受problem@AsUsual我有个问题,当我执行这个时,makro只会做一个单元格,但不会下一个单元格。我做错什么了吗?谢谢,我在ws1.Range(单元格(1,7),单元格(Rows.Count,7.End)(xlUp))的
行中得到一个运行时错误1004。
也许你现在有什么?
单元格和
行。Count
没有引用它正在使用活动工作表,因此,您的范围正在查看一张工作表,而该范围包含的值正在从另一张工作表获取。@Rick请立即重试then@Rick如果我的回答能解决你的问题,请随意接受problem@AsUsual我有个问题,当我执行这个时,makro只会做一个单元格,但不会下一个单元格。我做错什么了吗?感谢您的帮助,当G2:G10中的单元格与B行中的一个单元格相似时,我必须复制B行中相似单元格旁边的单元格。因此,如果
G2
B4
匹配,您想抓取
B3
B5
?还是
A4
C4
?在哪里粘贴?当G2(文件1)与B4(文件2)匹配时,我必须将B4旁边的D、E和F从文件2复制到文件1中G2Okay旁边的单元格i、J和K。在编辑中添加的字典项现在是
cell
,我们使用它来获取偏移值,并将其放置在匹配单元格的偏移量中。非常感谢,当我执行makro时,它不会做任何事情。感谢您的帮助,当G2:G10中的单元格与B行中的一个单元格相似时,我必须复制B行中相似单元格旁边的单元格。因此,如果
G2
B4
匹配,您想抓取
B3
B5
?还是
A4
C4
?在哪里粘贴?当G2(文件1)与B4(文件2)匹配时,我必须将B4旁边的D、E和F从文件2复制到文件1中G2Okay旁边的单元格i、J和K。在编辑中添加的字典项现在是
cell
,我们使用它来获取偏移值,并将其放置在匹配单元格的偏移量中。非常感谢,当我执行makro时,它什么也做不了。。