![比较两张表中的多个列以获取一个值](https://linux22.com/image/1577698/%E6%AF%94%E8%BE%83%E4%B8%A4%E5%BC%A0%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%E5%88%97%E4%BB%A5%E8%8E%B7%E5%8F%96%E4%B8%80%E4%B8%AA%E5%80%BC.png)
我对 Excel VBA 宏的了解有限。我有两张名为“摘要”和“数据”的工作表
- 摘要表有固定的行和列。
- 数据表中有值。
我需要比较摘要和数据表的代码、公司 MRC 编号和状态,如果字段匹配,则从数据表获取摘要字段的相应值。
答案1
我的解决方案基于附屏幕截图,我发现工作表之间只有两个公共列, 是
1. 代码
2. 公司 MRC
我无法找到摘要和数据状态字段。
我想建议使用一组宏来比较两个工作表,以便将公共数据复制到另一个工作表中。
Sub CompareRanges()
Dim WorkRng1 As Range, WorkRng2 As Range, Rng1 As Range, Rng2 As Range
Set WorkRng1 = Application.InputBox("Range A:", "", Type:=8)
Set WorkRng2 = Application.InputBox("Range B:", Type:=8)
For Each Rng1 In WorkRng1
rng1Value = Rng1.Value
For Each Rng2 In WorkRng2
If rng1Value = Rng2.Value Then
Rng1.Interior.Color = VBA.RGB(255, 0, 0)
Exit For
End If
Next
Next
End Sub
怎么运行的:
- 回应两者输入框使用两张表中适当的数据范围进行比较。
- 宏观将突出显示重复数据在 Sheet 1(数据表) 中红色。
- 跑步下面写的宏来复制重复数据。
- 将两个宏复制为标准模块。
編輯:
执行以下操作以避免使用第二个宏:
- 选择数据范围
DATA Sheet
并应用自动过滤。 - 筛选行数红色。
- 复制已过滤的行。
将单元格指针放置在所需单元格处并应用特殊粘贴然后点击价值。
Sub CopyRedRows() Dim wks As Worksheet Dim wNew As Worksheet Dim lRow As Long Dim lNewRow As Long Dim x As Long Set wks = Sheets("Data") lRow = wks.Cells.SpecialCells(xlCellTypeLastCell).Row Set wNew = Sheets("Summary") lNewRow = 10 For x = 1 To lRow If wks.Cells(x, 1).Interior.Color = vbRed Then wks.Cells(x, 1).EntireRow.Copy wNew.Cells(lNewRow, 1) lNewRow = lNewRow + 1 End If Next End Sub
Sheet Name
、RGB Color Code
&lNewRow
值是可编辑的。