【发布时间】:2013-12-27 06:06:29
【问题描述】:
所以我有两个包含数据的工作表,我想将工作表 1 的 A 列与工作表 2 的 A 列进行比较。工作表 1 是模板,工作表 2 是数据报告。两个工作表的 A 列都是项目 #s,工作表 1 更新项目 #s 和工作表 2 中报告中的数据。我想创建一个公式或者我猜是 vba 代码(我对 VBA 一无所知),我可以比较项目。我希望公式/代码将数据从工作表 2 中的报告中提取到工作表 1 模板中的相应项目 #s 并突出显示工作表 2 的报告(A 列)中不在的任何新项目 #s工作表 1,然后将这些新的突出显示的项目 #s 及其数据添加到工作表 1。
工作表 1 的 A 列中的数据范围小于我试图比较和从中提取的工作表 2 的 A 列中的数据范围。
我考虑在工作表 2 中创建一个 IF 公式,以显示存在哪些项目编号,哪些项目编号是新的,但由于工作表 1 的 A 列中的数据范围小于工作表 2 的 A 列,我最终得到一个错误值,我认为创建一个 vba 可能会更好,但我不确定。任何建议,请逐步详细说明该做什么。到目前为止,对于模板,我有一个 vlookup 来提取数据,但我需要知道哪些项目是新的并突出显示/拉取它们。此外,如果我可以删除或标记已停产的项目编号,那就太好了。我认为到目前为止,当我进行 vlookup 时,工作表 1 中的项目而不是工作表 2 中的项目出现,因为 #N/A 是已停产的项目。我有excel 2007,希望能帮到你。
样本 Sheet1 和 Sheet2
使用Vlookup更新后的输出
我正在尝试比较三个工作表中的三个不同数据列,并使用 VBA 突出显示差异。我对 VBA 很陌生,对编程知之甚少。到目前为止,这就是我所做的:
worksheet1:
Sub compare_cols()
Dim myRng As Range
Dim lastCell As Long
'Get the last row
Dim lastRow As Integer
lastRow = ActiveSheet.UsedRange.Rows.Count
'Debug.Print "Last Row is " & lastRow
Dim c As Range
Dim d As Range
Application.ScreenUpdating = False
For Each c In Worksheets("worksheet1").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("worksheet2").Range("A2:A" & lastRow).Cells
c.Interior.Color = vbGreen
If (InStr(1, d, c, 1) > 0) Then
c.Interior.Color = vbWhite
Exit For
End If
Next
Next
For Each c In Worksheets("worksheet2").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("worksheet1").Range("A2:A" & lastRow).Cells
c.Interior.Color = vbYellow
If (InStr(1, d, c, 1) > 0) Then
c.Interior.Color = vbWhite
Exit For
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Worksheet 2:
Sub compare_cols()
Dim myRng As Range
Dim lastCell As Long
'Get the last row
Dim lastRow As Integer
lastRow = ActiveSheet.UsedRange.Rows.Count
'Debug.Print "Last Row is " & lastRow
Dim c As Range
Dim d As Range
Application.ScreenUpdating = False
For Each c In Worksheets("worksheet2").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("worksheet3").Range("A2:A" & lastRow).Cells
c.Font.Color = rgbRed
If (InStr(1, d, c, 1) > 0) Then
c.Font.Color = rgbBlack
Exit For
End If
Next
Next
For Each c In Worksheets("worksheet3").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("worksheet2").Range("A2:A" & lastRow).Cells
c.Interior.Color = vbRed
c.Font.Color = rgbWhite
If (InStr(1, d, c, 1) > 0) Then
c.Interior.Color = vbWhite
c.Font.Color = rgbBlack
Exit For
End If
Next
Next
Application.ScreenUpdating = True
End Sub
.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
我遇到的问题:
- 在比较
worksheet1和worksheet2时,不在worksheet2中的数据在worksheet1中以绿色突出显示,不在worksheet1中的数据在worksheet2中以黄色突出显示。 - 例如
worksheet2中的一些数据以黄色突出显示,但在worksheet1中找到,这是不应该发生的。然后在比较worksheet2和worksheet3时,不在worksheet3中的项目在worksheet2中具有红色字体,不在worksheet2中的项目在@987654341 中以白色字体突出显示为红色@。 -
worksheet2中的数据例如具有红色字体,但在worksheet3中找到,这是不应该发生的。
你能告诉我为什么我的 VBA 代码不能工作,或者我还能做什么?
【问题讨论】:
-
这不适合你吗?
I think so far when I do a vlookup the items that are in worksheet 1 and not worksheet 2 come up as #N/A are the discontinued items。这是最快的方法。在工作表 2 中输入Vlookup(在空白列中)。过滤 #N/A,突出显示它们并复制到 worksheet1 列 A。您还想要什么? -
@L42 只要知道工作表 1 中的哪些项目打折就可以工作,但我仍然无法找出工作表 2 中的哪些项目是新项目,报告非常大,我不知道不想花几个小时浏览它。然后特别是当客户快速需要它时。
-
如果您能提供简单的示例数据和示例所需的结果,我们将不胜感激。如果您对 vba 持开放态度,请向我们展示您迄今为止所做的尝试,并说明您遇到困难的地方。
-
@L42 例如表 1 列 A 列 B 项目数量 100 25 456 10 102 34 203 55 104 20 105 88 106 99 107 1000 108 2500 109 400 111 5 2010 550 4556 22 278 55和在片材2列A列B产品数量100 15 101 50 102 25 103 44 104 9000 105 200 106 25 107 55683 108 1000 109 444 110 57696 500 5454 554 566 664 23 700 34 888 55 300 28的某些项目的在工作表 1 的 A 列中在工作表 2 的 A 列中。当我进行 vlookup 时,从工作表 1 中的工作表 2 中提取数量
-
@L42i 获取工作表 1 列 A 列 B 项目数量 100 15 456 #N/A 102 25 203 #N/A 104 9000 105 200 106 25 107 55683 108 1000 109 444 111 #N/A 200 #N/A 225 #N/A 264 #N/A 558 #N/A 278 #N/A 工作表 1 的 A 列中以 #N/A 作为数量的这些项目是折扣项目。但我仍然有工作表 2 中的项目是工作表 1 中没有的新项目 工作表 2 A 列 B 列 项目数量 100 15 101 50 102 25 103 44 104 9000 105 200 106 25 107 55683 108 1000 109 444 110 57696 500 5454 554 566 664 23 700 34 888 55 300 28
标签: vba excel worksheet-function