簡體   English   中英

Excel VBA-比較具有唯一標識符的列數據

[英]Excel VBA - Comparing Column Data with Unique Identifiers

我堅持如何從邏輯上解決問題,因為它可能需要二維數組,或者我對此問題考慮過多。

我有兩張數據。 每個數據表都有一個唯一標識符的列表以及與每個標識符相關的少數幾個日期。 不幸的是(這就是我遇到的問題),與每個標識符關聯的日期數不會總是相等的,因此我很難比較日期。

例如,這是Sheet1的示例:

1    |    06/08
1    |    06/15
1    |    06/16
1    |    06/17
1    |    06/22
1    |    06/23
1    |    06/30
1    |    07/01
1    |    07/05
1    |    07/06
1    |    07/07
1    |    07/12
1    |    07/15
1    |    07/18
2    |    06/24
2    |    06/30
2    |    07/05
2    |    07/06
2    |    07/07
2    |    07/08
2    |    07/14

這是工作表2中的示例:

1    |    06/07
1    |    06/16
1    |    06/17
1    |    06/23
1    |    07/06
1    |    07/07
1    |    07/18
1    |    06/21
1    |    06/28
1    |    07/08
1    |    07/14
2    |    06/09
2    |    07/13

基本上,這應該按日期檢查每個標識符的進度。 在Sheet1上的日期具有應該更新項目的承諾日期。 Sheet2上的日期具有該序列實際更新項目的日期。

基本邏輯循環是獲取所有唯一標識符並將其存儲在數組中。

然后,對於該數組中的每個唯一值,請在Sheet1中查看該標識符的每個唯一日期。 對於Sheet1中的該日期,Sheet2中是否有一個等於或更早的日期? 如果是這樣,則該項目在該日期已成功更新。

但是,這是棘手的部分,因為Sheet2上的日期已被“使用”,所以現在需要將其丟棄。 現在,我們轉到Sheet1上的下一個日期作為該標識符。 在Sheet2中,該標識符是否還有另一個日期等於或更早的日期? 等等。

您可以提供任何幫助將此邏輯轉換為VBA的幫助! 一個簡單的比較將很容易,但是這種復雜程度需要比我現在所熟悉的更多的VBA。

無需VBA。 在Sheet1的C1中使用此公式,並向下拖動所有數據:

=B1>=OFFSET(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet2!$A:$A, 0),2,1,1,"Sheet2")), IFERROR(COUNTIF(OFFSET(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet1!A:A, 0),3,1,1,"Sheet1")),0,0,ROW()-ROW(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet1!A:A, 0),3,1,1,"Sheet1")))),TRUE),0),0)

如果找到合適的更新日期,此公式將返回TRUE;如果未遵守承諾日期,則返回FALSE。

編輯

另外兩點:

  1. 公式可以從以下標識符讀取“更新日期”,這是一個小錯誤。 更正的版本是:

     =AND(B1>=OFFSET(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet2!$A:$A, 0),2,1,1,"Sheet2")), IFERROR(COUNTIF(OFFSET(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet1!A:A, 0),3,1,1,"Sheet1")),0,0,ROW()-ROW(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet1!A:A, 0),3,1,1,"Sheet1")))),TRUE),0),0), OFFSET(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet2!$A:$A, 0),1,1,1,"Sheet2")), IFERROR(COUNTIF(OFFSET(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet1!A:A, 0),3,1,1,"Sheet1")),0,0,ROW()-ROW(INDIRECT(ADDRESS( MATCH(Sheet1!A1, Sheet1!A:A, 0),3,1,1,"Sheet1")))),TRUE),0),0)=Sheet1!A1) 
  2. 兩張紙都需要按標識符(“ A”列)和日期(“ B”列)進行排序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM