快速對比資料

2021-10-12 12:35:09 字數 2742 閱讀 8839

例項需求:日常工作中經常需要對比資料,例如如下的參會名單,現在需要對比兩屆參會名單的異同,100個人的名單,看得老眼昏花也未必能夠準確的找出差異。

strcompare = "減少:" & trim(strremove) & vbnewline & "新增:" & trim(stradd)

endfunction

sub demo(

) msgbox strcompare(range(

"a2:d26"

), range(

"f2:i26"))

,, "對比結果"

endsub

【**解析】

資料中可能存在重複,那麼首先要進行排重,然後再進行對比,資料去重那麼非字典莫屬。

自定義函式有兩個引數,分別對應於需要對比的兩個資料區域,二者形狀可以相同,也可以不同。

第4和5行**建立兩個字段物件,分布儲存兩個資料清單。

第6~11行**使用for each迴圈,將資料分布載入到字典物件中,實現去重。

第12~14行**查詢存在於第乙個資料區域中,但是第二個資料區域中不存在的名單。

第15~17行**查詢存在於第二個資料區域中,但是第以個資料區域中不存在的名單。

第18和19行**是否物件變數占用的系統資源。

第20行**設定自定義函式返回值。

第23行**呼叫自定義函式,其結果如下。

第12~17行**使用兩個迴圈結構分別提取「減少」和「新增」的人員名單,其實可以簡化如下。

function strcompare(

byval rng1 as range,

byval rng2 as range)

asstring

dim strremove as

string

, stradd as

string

, strkey

dim currdic, newdic, c

set currdic = createobject(

"scripting.dictionary"

)set newdic = createobject(

"scripting.dictionary"

)for each c in rng1

currdic(c.value)=""

next c

for each c in rng2

newdic(c.value)=""

next c

for each strkey in currdic.keys

ifnot newdic.exists(strkey)

then

strremove = strremove &

" "& strkey

else

newdic.remove strkey

endifnext strkey

strcompare = "減少:" & trim(strremove) & vbnewline & "新增:" & join(newdic.keys)

set currdic =

nothing

set newdic =

nothing

endfunction

如果currdic中的鍵值存在於newdic中,那麼將移除該鍵值,否則就追加到「減少」人員名單中,這樣只需要乙個迴圈就可以提取兩個人員名單了。

當然設定函式返回值的語句也需要變更一點,使用join(newdic.keys)生成「新增」人員名單。

枯燥的重複勞動交給vba來實現,肯定沒問題。

C 快速對比資料

1.相同列對比 var data1 dt1.asenumerable except dt2.asenumerable datarowcomparer.default 差集 篩選不一樣的資料返回對比的資料 如需顯示被對比資料則把被對比的資料放到前面替換位置 var data2 dt1.asenumer...

MySQL 如何快速對比資料

在mysql運維中,研發同事想對比下兩個不同例項上的資料並找出差異,除主鍵外還需要對比每乙個字段,如何做呢?第一種方案,寫程式將兩個例項上的每一行資料取出來進行對比,理論可行,但是對比時間較長。第二種方案,對每一行資料所有字段合併起來,取checksum值,再按照checksum值對比,看著可行,嘗...

MySQL 如何快速對比資料?

我們在mysql中想要對比下兩個不同的例項上的資料並且找出差異,除了主鍵之外我們還要對比每乙個字段,應該怎麼做呢?方案一 寫乙個程式將兩個例項裡面的每一行資料都分別取出來對比,但是耗時我們無法估計,大概天荒地老吧。方案二 對每一行資料所有字段合併起來,取checksum值,再按照checksum值對...