2017-06-15 69 views
2

我正在創建一個PowerShell腳本通過標準的Excel電子表格上傳數據到SQL服務器。我想在Excel電子表格中添加一些錯誤檢查功能,這樣如果鏈接錯誤,我可以將其全部放回填寫電子表格的用戶。Excel - 錯誤列多個錯誤在一個單元

作爲示例這裏是Excel電子表格的公司部的一部分:

enter image description here

此錯誤是指管理器銷柱(D2),在那裏它不會在管理器上載片存在:

enter image description here

以上是使用下面的公式:

=IF(COUNTIF('Manager'!$A$2:$A$1048576, [@[Manager Pin]])>0, "", "Manager Pin Does Not Exist") 

我想要的是在每個字段之間用一個換行符分隔符返回多個錯誤,因此在圖像一中,如果管理員PIN碼和公司PIN碼都不存在,則ERRORS(A2)將是:

enter image description here

這樣我可以排除任何進口,其中的錯誤部分是不是對事物的SQL側空子。

---------按位錯誤組:

至於可能的錯誤的3設定的逐位誤差的示例:

0 - No errors 
1 - Manager pin not valid 
2 - Company pin not valid 
3 - Manager pin not valid 
    Company pin not valid 
4 - Company name is null - required field 
5 - Manager pin not valid 
    Company name is null - required field 
6 - Company pin not valid 
    Company name is null - required field 
7 - Manager pin not valid 
    Company pin not valid 
    Company name is null - required field 

所以將被創建的上述誤差在電子表格的單獨表格中。然後,我可以在電子表格中創建一個隱藏列來計算錯誤代碼。之後,我所要做的就是根據隱藏列中的錯誤代碼引用ERRORS列中的錯誤代碼。

+2

我會建議設置按位錯誤編號(例如1,2,4,8等),以便通過查看總數,您始終可以確定發生了哪些錯誤。例如7將是錯誤1,2和4; 5將是錯誤1和4; 10將是錯誤2和8.如果按位構造正確創建,則任何總和只能有一個錯誤代碼組合。 0(零)表示錯誤代碼成功。此外,總結比字符串連接更容易。 – Jeeped

+0

這是一個非常好的主意,最好的辦法是做什麼?有一個單獨的隱藏單元,它可以在單獨的表單上計算錯誤編號和錯誤響應列表,然後僅引用錯誤列中的錯誤響應? –

+0

那麼,你會從一個錯誤代碼表開始,其中的描述和錯誤代碼從0開始,錯誤成功通過1,2,4,8,16等等,就像你需要的一樣多。在進一步建議之前,我必須更深入地觀察一下現有的方法。 – Jeeped

回答

1

您可以連接兩個單獨的類似檢查的結果。 Assumning你有一個Company片與Manager片的相似的佈局:

=IF(COUNTIF(Manager!$A$2:$A$1048576, [@[Manager Pin]])>0, 
    "", "Manager Pin Does Not Exist") 
& IF(COUNTIF(Company!$A$2:$A$1048576, [@[Company Pin]])>0, 
    "", CHAR(10)&"Company Pin Does Not Exist") 

順便提一下,爲什麼要用$A$2:$A$1048576,而不是簡單地A:A?如果你在serched表中有一個標題行不會匹配,那麼讓我們簡化它。

=IF(COUNTIF(Manager!A:A, [@[Manager Pin]])>0, "", "Manager Pin Does Not Exist") 
& IF(COUNTIF(Company!A:A, [@[Company Pin]])>0, "", CHAR(10)&"Company Pin Does Not Exist") 

psThe MATCH替代:

=IF(ISNUMBER(MATCH([@[Manager Pin]], Manager!A:A,0)), "", "Manager Pin Does Not Exist") 
& IF(ISNUMBER(MATCH([@[Company Pin]], Company!A:A,0)), "", CHAR(10)&"Company Pin Does Not Exist") 
+0

非常感謝您的幫助,我從未使用過Match功能,因此不得不看一看。至於細胞的範圍,不知道爲什麼我不使用A:A。這些引腳將始終被排序,它們是每個條目的自動增量字段,使用= ROW() - 1 –

+0

問題在於,在此電子表格的公司表單中,有4個字段需要檢查併發布到錯誤單元格。這意味着我需要有一個巨大的功能去處理無效字段的每一個可能的結果。 –

+0

@OwainEsau在這種情況下,如果數據足夠大,使用二進制搜索「匹配」將會快得多。如果您有興趣,我可以添加匹配解決方案。 –

1

如果您有機會獲得TEXTJOIN function(EXCEL 2016+),您可以通過換行符加入他們的行列:

= TEXTJOIN(CHAR(10), TRUE, IF(...), IF(...)) 
+0

我確實是這樣,但不能保證我發送這張excel表格的人會,他們中的大多數人可能不會。 –

+0

@OwainEsau好點,但我想不出任何其他方式來避免消息之間可能出現的額外新行(VBA UDF除外)。順便說一句,我認爲'@ []'只能在Excel 2010+中使用,而在Excel 2007+中使用結構化的參考'[]' – Slai