2013-11-04 75 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 

結束子

相關問題