从列表中查找多个单元格值

时间:2018-01-23 10:43:23

标签: excel vba

我有一张2张工作簿 Sheet1包含A列中的产品代码列表,R列是当前库存水平。 Sheet2包含A列中的产品代码列表,B列包含新库存水平。 我想要做的是将Sheet1中的当前库存水平替换为Sheet2中的新库存水平。

我已经在这个网站上找到了一些代码(下面),我已经略微适应了我的目的,它工作正常但仅适用于一个产品代码(因为它引用了A1和B1)。我想要做的是添加一个循环,以便它可以解决Sheet2中的所有产品,但我不知道如何调整我在网上找到的任何类似的循环。

任何帮助将不胜感激,我的备份计划是在Sheet1中执行v-lookup以引入Sheet2新库存级别值,然后替换原始列,但如果可能的话,我希望以其他方式工作。

Private Sub CommandButton1_Click()

    Dim search_range As Range, search_value As Range, _
    lastcell As Range, foundcell As Range
    Dim ws As Worksheet


Set ws = ThisWorkbook.Sheets("Sheet1")
Set search_range = ws.Range("A1", ws.Range("A" & Rows.Count).End(xlUp))
Set lastcell = search_range.Cells(search_range.Cells.Count)
Set search_value = ThisWorkbook.Sheets("Sheet2").Range("A1")

Set foundcell = search_range.Find(What:=search_value, After:=lastcell, 
LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)

If Not foundcell Is Nothing Then foundcell.Activate Else MsgBox "Not Found"

ActiveCell.Offset(0, 17).Value = Sheets("Sheet2").Range("B1").Value



End Sub

2 个答案:

答案 0 :(得分:1)

以下内容如何:

Private Sub CommandButton1_Click()

Dim search_range As Range, search_value As Range, lastcell As Range, foundcell As Range
Dim ws As Worksheet

Set ws = ThisWorkbook.Sheets("Sheet1")
Set search_range = ws.Range("A1", ws.Range("A" & Rows.Count).End(xlUp))
Set lastcell = search_range.Cells(search_range.Cells.Count)

For i = 1 To lastcell.Row

    Set search_value = ThisWorkbook.Sheets("Sheet2").Range("A" & i)
    Set foundcell = search_range.Find(What:=search_value, After:=lastcell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)

    If Not foundcell Is Nothing Then foundcell.Activate Else MsgBox "Not Found"
    ActiveCell.Offset(0, 17).Value = Sheets("Sheet2").Range("B" & i).Value

Next i

End Sub

答案 1 :(得分:0)

这个想法如下 - 你有两种类型的范围 - 你搜索的范围和你的值应该是的范围。它们被称为TargetSearch

在下面的代码中,您遍历第一个工作表的A列中的所有单元格,然后在第二个工作表的第A列中查找它们的值。如果找到该值,则将第二个工作表的第B列中的值写入第一个工作表中的17.列:

Private Sub CommandButton1_Click()

    Dim targetRange     As Range
    Dim targetValue     As Range
    Dim searchRange     As Range        
    Dim lastSearchCell  As Range
    Dim foundCell       As Range        
    Dim wsTarget        As Worksheet
    Dim wsSearch        As Worksheet

    Dim myCell          As Range

    Set wsTarget = ThisWorkbook.Worksheets(1)
    Set wsSearch = ThisWorkbook.Worksheets(2)

    With wsTarget
        Set targetRange = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    End With

    With wsSearch
        Set searchRange = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
    End With

    Set lastSearchCell = searchRange.Cells(searchRange.Cells.Count)

    For Each myCell In targetRange
        Set foundCell = searchRange.Find(What:=myCell, After:=lastSearchCell).Offset(0, 1)
        If Not foundCell Is Nothing Then
            myCell.Offset(0, 17) = foundCell
        Else
            MsgBox "Not Found"
        End If
    Next myCell

End Sub