首页 > 解决方案 > 跨工作表单元格比较和更新

问题描述

我正在尝试将一个工作表(“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

标签: excelvba

解决方案


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

推荐阅读