excel - 跨工作表单元格比较和更新
问题描述
我正在尝试将一个工作表(“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
解决方案
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
推荐阅读
- github - 您可以自定义贡献者在您的 Github 项目问题选项卡上看到的内容吗?
- javascript - 将对象添加到特定的 json PHP 数组
- android - 从 sqlite 数据库中删除表中的整行
- android - 当 taskAffinity 活动正在调用 finish() 但它不会关闭最近的应用程序
- azure - 对 ASP.NET Web API 的 Azure 静态网站身份验证
- python - 如何在不同的 kdeplot(seaborn 2D plot)中保持相同的比例/级别?
- unity3d - Unity2D分层多个画布'
- unit-testing - 运行货物测试时如何抑制多个线程的输出?
- operating-system - 如何加载内核精灵文件?
- scala - F 有界类型和在参数和返回位置具有类型参数的方法