【问题标题】:Cross-worksheet cell comparison and update跨工作表单元格比较和更新
【发布时间】:2020-04-15 19:47:28
【问题描述】:

我正在尝试将一个工作表(“UserProf”)列的值与另一个工作表(“DeptClasses”)列中的值进行比较。如果这些值相同,请使用第二个工作表中另一列的值更新第一个工作表中的单独单元格。这还需要遍历第一个工作表中的值以查找匹配项。

本质上,如果工作表 1 中 A1 中的值等于工作表 2 单元格 D1、D2 或 D3 等中的值,则将工作表 1 上单元格 A2 中的值设置为工作表 2 匹配行中的值列(即如果工作表 2 中的 D1 与工作表 1 A1 匹配,则将 A2 设置为工作表 2 的 E2 单元格中的当前值等)。

每个工作表的列都有唯一的值(没有重复),并且是一个数字,但存储为文本值。我尝试将单元格的格式更改为数字,结果没有变化。每张工作表中的列范围是固定的(因此将“To lastXxx”设置为固定整数,而不使用 End(xlUp).Row 设置值。我已将此方法用于其他电子表格/跨表比较和它按我的预期工作。

在进行故障排除时,我确实添加了更多变量以显示在 VBA 的 Locals 窗口中并“进入”脚本 - 即查看正在评估的值等;据我所知,“If”语句永远不会评估为“True”,即使我可以在 Locals 中看到被比较的单元格值确实匹配。

可能有一种更有效的方法来设置范围等,但这是过去对我有用的一种方法,所以试图保持这种格式 - 主要是因为我理解它。

Sub Profiles()
    Dim lastDepClass As Integer
    Dim lastClass As Integer
    Dim DepClass As Integer
    Dim Class As Integer

    lastDepClass = 137
    lastClass = 106

    For Class = 3 To lastClass
        For DepClass = 2 To lastDepClass
            If Sheets("UserProf").Cells(Class, 1).Value = Sheets("DeptClasses").Cells(DepClass, 5).Value Then
                Sheets("DeptClasses").Cells(DepClass, 6) = Sheets("UserProf").Cells(DepClass, 5).Value
            End If
        Next DepClass
    Next Class   

End Sub

【问题讨论】:

  • 您的工作表名称在您的 If 语句中交换。此外,第一个DepClass 应该是Class。由于您知道每个工作表的最后一行,因此除非最后一行是动态的,否则您不需要变量,只需在 For 语句中使用137106。创建工作表变量,例如ws1ws2 不会那么混乱。我会使用xy 而不是ClassDepClass,这将使您的代码更易于阅读。根据您的问题描述查看我的简化版代码。

标签: excel vba


【解决方案1】:
Sub Profiles()
    Dim ws1 As Worksheet, ws2 As Worksheet 'Define worksheet variables
    Dim x As Long, y As Long 'Define last row variables

    'Assign your variables
    Set ws1 = ThisWorkbook.Sheets("UserProf")
    Set ws2 = ThisWorkbook.Sheets("DeptClasses")

    For x = 3 To 106 'Just use the last row numbers, unless the lastrow is dynamic
        For y = 2 To 137 'for each x row loop in ws1 loop through all y rows 
                         'in ws2 until a match is found
            If ws1.Cells(x, 1).Value = ws2.Cells(y, 5).Value Then
                ws1.Cells(x, 6).Value = ws2.Cells(y, 5).Value
            End If
        Next y
    Next x
End Sub

【讨论】:

  • 感谢 GMalc - 可以肯定,这更“干净”!奇怪的是,我仍然遇到值没有正确更新的问题。我为 x 和 y 单元格值添加了 2 个变量,这样当我进入代码时我可以在 Locals 窗口中看到输出……它仍然将这些值识别为匹配。我已经重新验证了表格中数据的格式——尝试了文本、常规和数字——但它(出于某种原因)仍然无法识别它们是相同的。我的下一步是将数据复制到一个新的独立工作簿中,看看它是否有效;也许工作簿很时髦?
  • @M.Lamb 我使用了您的代码作为列号,您需要检查列号并确保每个工作表都有正确的列。
猜你喜欢
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多