2016-03-03 97 views
1

我有一個包含3列的文件。 A列包含300,000行,大約有200個獨立的ID,全部重複至少1,000次。 B列包含每個行的日期。列C包含我需要提取的值。根據2條標準查找列中的值

Col A中的200個ID中的每一個可以具有多個值(例如,ID 1234可能具有日期1/1/2001,1/3/2001,1/2/2015等)。類似地,欄B中的每個日期將具有多個ID(例如,1/2/15可能具有1234,1874,1930,6043等的ID)。

簡而言之,我需要檢查列A和列B中的值,以找出列A中的相關ID和列B中的最大值,並返回列C中相關單元格中的值。

我看了索引/匹配的例子,但他們似乎並不適合。有沒有關於我可以運行的宏的任何建議,這將完成需要的東西。

+3

請求VBA代碼幫助的人有**期望的**以顯示原始努力。開始一些事情,然後回來展示你自己的嘗試。 – Jeeped

+3

提示:看看下面的數組公式,然後看到[用VBA存儲器數組替換工作表數組公式中的代碼](http://stackoverflow.com/questions/34159105/replace-worksheet-array-formula-with- VBA的存儲器陣列)。 – Jeeped

+0

感謝您的鏈接。非常豐富的 – Clauric

回答

4

使用此陣列式:

=INDEX($C$1:$C$300000,MATCH(1,IF(($A$1:$A$300000="1234")*($B$1:$B$300000=MAX(IF($A$1:$A$300000="1234",$B$1:$B$300000))),1,0),0)) 

作爲一個陣列式,它必須與確認Ctrl鍵移輸入,而不是退出編輯模式時輸入。

"1234"更改爲具有適當ID的參考單元。

+0

該死的,4秒打我:-P –

+0

@Scott Craner - 謝謝你的配方。如何將此公式實現到VBA命令中,而不是在Excel單元格中實現公式? – Clauric

+1

@Clauric SO不是我的網站的代碼。如果您的代碼無法正常工作,請將其放在原始文章中,並詢問具體問題。 –

4

您可以使用數組公式來完成此操作。要開始,您可以使用以下公式在A列爲1234時檢索B列中的最大日期。請記住,在完成鍵入數組公式時,必須使用Ctrl-Shift-Enter。

{=MAX(IF($A$2:$A$24=1234,$B$2:$B$24))} 

請注意,您需要更改的範圍包括所有的數據,而不是行2-24我的測試數據。

既然你有一個公式來檢索最大日期,你可以把它放在一個索引/匹配中,再次使用Ctrl-Shift-Enter,使用下面的數組公式來檢索列C中的值匹配1234和最大日期。

{=INDEX($C$2:$C$24,MATCH(1234&MAX(IF($A$2:$A$24=1234,$B$2:$B$24)),$A$2:$A$24&$B$2:$B$24,0))} 
+1

如果我們都做過類似的話,那麼這是正確的方法。 :) –

+0

@Nick Peranzi - 謝謝你的公式。如何將這些公式實現爲VBA命令,而不是在Excel單元格中實現公式? – Clauric

+1

@Clauric你能更具體一點嗎?這可以通過多種方式在VBA中實現,從UDF返回列C中的相關值以獲得列A中的一個特定值,或在大範圍的單元格中輸入數組公式,以輸入輸出值(靜態,非公式)在唯一ID列表中。 –

相關問題