【问题标题】:Excel VBA - Search for value from sheet1 in sheet2 and update with adjacent value from sheet1Excel VBA - 在 sheet2 中搜索 sheet1 中的值并使用 sheet1 中的相邻值进行更新
【发布时间】:2012-06-13 22:20:45
【问题描述】:

我正在尝试编写一些 VBA 代码,该代码将获取 sheet2 上 A 列中唯一值列表中的第一个值,并针对 sheet1 上 A 列中的唯一值进行搜索。一旦找到,它将使用与 sheet2 中唯一代码相邻的值更新 sheet1 上活动单元格右侧的单元格 6。它将继续,沿着 sheet2 中的列表的其余部分运行,直到它到达一个空白单元格。

我设法让代码找到唯一值,然后通过添加 1 将单元格 6 更新到右侧,但我无法计算出另一位:

    Private Sub SinglePaste_Click()
    On Error GoTo InvalidBarcode
    Dim EAN As Range
        Sheets("Paste Here").Select
          For Each EAN In ActiveSheet.Range("A:A")
          Sheets("Master Stock File").Select
          With Worksheets("Master Stock File")
          .Range("A:A").Find(What:=EAN, After:=.Range("A1"), LookIn:=xlFormulas, _
          LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
          MatchCase:=False).Activate
        ActiveCell.Offset(0, 6).Select
        ActiveCell.Value = ActiveCell.Value + 1
       End With
      If IsEmpty(EAN) Then Exit For
      Next EAN
     Exit Sub
    InvalidBarcode:
    MsgBox ("Invalid Barcode - " & "" & EAN)
    End Sub

这有意义吗?非常感谢任何帮助。

【问题讨论】:

  • 那么你无法解决的“另一部分”到底是什么?运行直到空白单元格或在另一张表中找到相应的唯一代码?两张纸是否具有相同的唯一代码,还是会在一张纸中丢失某些代码?

标签: vba excel


【解决方案1】:

您的代码使用了大量 ActiveSheet、ActiveCell 和 Select,这表明宏记录器通常效率较低。我仍然不确定您所指的“另一位”是什么,但这是一个重新设计的宏:

Public Sub NewSinglePaste_Click()
  Dim EAN As Range
  Dim FoundRange As Range
  Dim ValueCell As Range
  Dim MasterSheet As Worksheet
  Dim PasteSheet As Worksheet

  Set MasterSheet = Sheets("Master Stock File")
  Set PasteSheet = Sheets("Paste Here")

  On Error GoTo InvalidBarcode
  For Each EAN In PasteSheet.Range("A:A")
    If IsEmpty(EAN.Text) Or EAN.Text = "" Then Exit For

    Set FoundRange = MasterSheet.Range("A:A").Find(What:=EAN, _
      After:=MasterSheet.Range("A1"), LookIn:=xlFormulas, LookAt:=xlPart, _
      SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

    If Not (FoundRange Is Nothing) Then
      Set ValueCell = FoundRange.Offset(0, 6)
      ValueCell.Value = ValueCell.Value + 1
    Else
      Debug.Print "Cell not found: " & EAN.Worksheet.Name & "!" & EAN.Address
    End If
  Next EAN

  Exit Sub

InvalidBarcode:
    MsgBox ("Invalid Barcode - " & "" & EAN)

End Sub

【讨论】:

  • 我想他想用EAN.Offset(0,1)中的值更新FoundRange.Offset(0, 6)
  • 感谢您的帮助。我试图解释(以一种非常令人困惑的方式)是 Sheet1(“主库存文件”)将有一个唯一 ID 的明确列表,Sheet2(“Paste Here”)将是我粘贴一小部分这些 ID 以及将用于更新主库存文件表上的某些值的其他数据。我正在努力解决的部分不仅仅是在 Master Stock File 中找到的 EAN 右侧的单元格 6 中添加 1,我想在 Paste Here 表上添加 ID 旁边的数量,我认为是蒂姆上面提到的。
  • ...可能应该提到,与 + EAN.Offset(0,1) 的添加完美配合。非常感谢你们。
猜你喜欢
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
相关资源
最近更新 更多