2013-11-04 55 views
2

我使用SQL Server 2012数据库。Excel + TSQL(在条件上突出显示单元格的宏)

每天早上我得到一个新的计算结果表。格式是

的productID - countryID - 2001 - 2002至2003年

我有2000吨的产品,每200个国家。约400000行。

此外,我有表格与以前的计算相同的格式。

我的任务是比较新的旧的和结果,并创建一个输出的Excel与格式文件:

计算 - 的productID - countryID - 2001 - 2002年至二〇〇三年

老 - 1 - CA - 0.02 - 0.89 - 5.3

新 - 1 - CA - 0.03 - 0.90 - 5.3

所以我的产品和国家,并在每年比较值组。

我的问题是,我需要突出显示那些结果是不同的2%以上的细胞。

有人知道该怎么办?

非常感谢。

+0

抱歉,写不是非常正确。 我的任务是自动化这个过程。数据的差异将由另一个部门检查。我想实现过程的自动化: 数据库 - > excel文件 - >宏比较和格式化excel文件 – Almazini

回答

0

您可以用Excel公式处理这个问题:

A   B  C 

old   0.5 
new   1  Alert ! 
old   0.9 
new   0.91  
old   0.1 
new   0.15 Alert ! 

=IF(A2="new";IF(B2-B1>0.02;"Alert !";"");"") 

要突出显示单元格,您可以使用条件格式使用此公式(从菜单格式)

+0

如何在Excel中比较我知道:)但想法是创建自动比较程序 – Almazini

1

假设每行是由前旧的,你需要选择新的行,并与直接在它们上面的结果进行比较。最简单的方法是添加过滤器,过滤新过滤器,选择结果,添加条件格式,然后取消过滤结果。

'Select everything and add a filter 
Cells.Select 
Selection.AutoFilter 
ActiveSheet.Range("$A$1:$C$10").AutoFilter Field:=1, Criteria1:="New" 
'Select the newly filtered results 
Cells.Select 
'Apply a conditional format (substitute B2 for the first filtered cell, and B1 for the cell above it) 
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=IF(B2>(B1*1.2),TRUE,FALSE)" 
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
With Selection.FormatConditions(1).Interior 
    .PatternColorIndex = xlAutomatic 
    .ThemeColor = xlThemeColorLight2 
    .TintAndShade = 0.799981688894314 
End With 
Selection.FormatConditions(1).StopIfTrue = False 
'Remove the filter 
Cells.Select 
Selection.AutoFilter 

创建一个新的宏,并将上面的代码粘贴到它,它应该工作。

+0

,但它是可能的编写一个存储过程,将数据从数据库导出到excel文件中,并创建一个“作业”,它将运行一个宏来比较 - 格式化? 这个想法是因为数据的变化应该由另一个部门检查,我不能每天比较是用手来强调差异:)是我的想法至少可能吗? – Almazini

+0

您应该能够设置Excel文件来查询数据库中的数据 - 不涉及存储过程。然后,运行宏以设置条件格式。 (您不需要宏,但是我发现Excel有时会在数据刷新时忘记格式化,即使它设置为记住格式。) 您使用的是哪个版本的Excel? – gwhenning

+0

是Excel 2010中 – Almazini

0

我会去数据透视表的路线。它是动态的。如果添加新信息,可轻松扩展。而不是依赖于你需要的数据正确的顺序。它也可以包含条件格式,这些条件格式将随数据的扩展而扩展。

0

子RunCheck()

昏暗eilute作为整数

ActiveSheet.Range("A2").Select 
Selection.End(xlDown).Select 

eilute = Selection.Cells.Row 

For e = 2 To eilute 

    For s = 8 To 72 
    If Cells(e, s) <> Cells(e + 1, s) Then 
    Cells(e, s).Interior.Color = RGB(217, 217, 25) 
    Cells(e + 1, s).Interior.Color = RGB(217, 217, 25) 
    End If 
    Next s 
    e = e + 1 
    Next e 

结束子

相关问题