Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何比较3个不同工作表中的3列不同数据,并在excel 2007中突出显示它们?_Vba_Excel_Worksheet Function - Fatal编程技术网

Vba 如何比较3个不同工作表中的3列不同数据,并在excel 2007中突出显示它们?

Vba 如何比较3个不同工作表中的3列不同数据,并在excel 2007中突出显示它们?,vba,excel,worksheet-function,Vba,Excel,Worksheet Function,所以我有两张有数据的工作表,我想比较工作表1的A列和工作表2的A列。工作表1是一个模板,工作表2是一个数据报告。两个工作表的A列都是项目,工作表1更新工作表2中报告的项目和数据。我想创建一个公式,或者我猜vba代码(我对vba一无所知)尽我所能来比较项目。我希望公式/代码将数据从工作表2中的报表拉至工作表1模板中的相应项,并高亮显示工作表2报表(A列)中不在工作表1中的任何新项,然后将这些新高亮显示的项及其数据添加到工作表1中 工作表1 A列中的数据范围小于工作表2 A列中我试图比较和提取的数据

所以我有两张有数据的工作表,我想比较工作表1的A列和工作表2的A列。工作表1是一个模板,工作表2是一个数据报告。两个工作表的A列都是项目,工作表1更新工作表2中报告的项目和数据。我想创建一个公式,或者我猜vba代码(我对vba一无所知)尽我所能来比较项目。我希望公式/代码将数据从工作表2中的报表拉至工作表1模板中的相应项,并高亮显示工作表2报表(A列)中不在工作表1中的任何新项,然后将这些新高亮显示的项及其数据添加到工作表1中

工作表1 A列中的数据范围小于工作表2 A列中我试图比较和提取的数据范围

我曾考虑在工作表2中创建一个IF公式,以显示存在哪些项目编号,这些编号是新的,但由于工作表1 a列中的数据范围小于工作表2 a列中的数据范围,我最终得到一个错误值,我认为创建vba可能更好,但我不确定。如有任何建议,请逐步给出详细信息/图像。到目前为止,一般来说,对于模板,我有一个vlookup来提取数据,但我需要知道哪些项目是新的,并突出显示/提取它们。此外,如果我可以删除或标签的项目编号,已停止作为已停止,这将是伟大的。我认为到目前为止,当我做一个vlookup时,工作表1中的项目而不是工作表2中的项目被认为是“N/a”是不连续的项目。我有Excel2007,希望你能帮忙

样本表1和表2

使用
Vlookup
更新后的输出

我试图比较三个工作表中三列不同的数据,并使用VBA突出显示差异。我是VBA新手,对编程了解不多。到目前为止,这就是我所做的:

工作表1

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  

我遇到的问题:

  • 在比较
    工作表1
    工作表2
    时,不在
    工作表2
    中的数据在
    工作表1
    中以绿色突出显示,不在
    工作表1
    中的数据在
    工作表2
    中以黄色突出显示
  • 例如,
    工作表2中的一些数据以黄色突出显示,但在
    工作表1中不应出现。然后在比较
    工作表2
    工作表3
    时,不在
    工作表3
    中的项目在
    工作表2
    中有一个红色字体,而不在
    工作表2
    中的项目在
    工作表3
    中用白色字体突出显示为红色
  • 例如,
    worksheet2
    中的数据有红色字体,但在
    worksheet3
    中可以找到,这是不应该发生的

你能告诉我为什么我的VBA代码不起作用,或者我还能做什么吗?

如果你想自动完成这项工作,那就是使用VBA。但您对此一无所知,所以我不会给您现成的VBA解决方案

为了实现您的目标,您可以使用
删除重复项
。使用此选项,您将创建唯一项的列表-这将是workbook1和workbook2中所有项的列表。稍后,您可以像以前一样使用
vlookup
函数创建列。如果找到项目,您将获得想要的数量,如果没有,您将获得
#N/D
,您可以使用条件格式突出显示该项目


我想如果没有VBA,它应该可以解决您的问题。

条件格式可以满足您的需要吗?这里有一种方法可以高亮显示在另一个区域中出现的单元格(或者如果在混合中抛出一个“”not(“”),则不显示)

我希望有帮助


JSR

这对你不起作用吗?
我认为目前为止,当我做一个vlookup时,工作表1中的项目而不是工作表2中的项目显示为#N/a是不连续的项目
。这是最快的方法。在工作表2中输入一个
vlookup
(在空白列中)。过滤不适用项,突出显示它们并复制到工作表1的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 200 225 200 264 4558 31 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 I中的工作表2中提取数量get@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条件格式设置不起作用B/c根据Excel 2007,您不能对另一个工作表中的另一列、单元格范围进行条件格式设置。我正在为初学者学习Excel vba,从回家学习。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub