|
本帖最后由 f8b1987 于 2012-6-6 20:42 编辑
菜鸟表示有压力,虽然能用字典法解决两表四列数据核查问题,但是连用7个字典进行判断,不知道如何改进。期待各位高手指点改进,如能把对比出不一致的数据,创建工作表,粘贴差异明细,并在后面备注是表几的最好了。
代码如下:
- Sub 字典()
- Dim i As Integer, j As Integer, arr(), brr()
- Dim d1 As Object, d2 As Object, d3 As Object
- Dim d4 As Object, d5 As Object, d6 As Object, d7 As Object
- Set d1 = CreateObject("scripting.dictionary")
- Set d2 = CreateObject("scripting.dictionary")
- Set d3 = CreateObject("scripting.dictionary")
- Set d4 = CreateObject("scripting.dictionary")
- Set d5 = CreateObject("scripting.dictionary")
- Set d6 = CreateObject("scripting.dictionary")
- Set d7 = CreateObject("scripting.dictionary")
- arr = Sheet1.Range("a1").CurrentRegion
- brr = Sheet2.Range("a1").CurrentRegion
- For i = 2 To UBound(brr)
- d1(brr(i, 1) & "|" & brr(i, 2) & "|" & brr(i, 3) & "|" & brr(i, 4)) = "正常"
- d2(brr(i, 1) & "|" & brr(i, 2) & "|" & brr(i, 3)) = "金额差异"
- d3(brr(i, 1) & "|" & brr(i, 2) & "|" & brr(i, 4)) = "地区差异"
- d4(brr(i, 1) & "|" & brr(i, 2)) = "地区和金额"
- d5(brr(i, 2) & "|" & brr(i, 3) & "|" & brr(i, 4)) = "日期差异"
- d6(brr(i, 2) & "|" & brr(i, 4)) = "日期和地区"
- d7(brr(i, 2) & "|" & brr(i, 3)) = "日期和金额"
- Next i
- For j = 2 To UBound(arr)
- If d1(arr(j, 1) & "|" & arr(j, 2) & "|" & arr(j, 3) & "|" & arr(j, 4)) = "正常" Then
- arr(j, 5) = d1(arr(j, 1) & "|" & arr(j, 2) & "|" & arr(j, 3) & "|" & arr(j, 4))
- ElseIf d2(arr(j, 1) & "|" & arr(j, 2) & "|" & arr(j, 3)) = "金额差异" Then
- arr(j, 5) = "金额差异"
- ElseIf d3(arr(j, 1) & "|" & arr(j, 2) & "|" & arr(j, 4)) = "地区差异" Then
- arr(j, 5) = "地区差异"
- ElseIf d4(arr(j, 1) & "|" & arr(j, 2)) = "地区和金额" Then
- arr(j, 5) = "地区和金额"
- ElseIf d5(arr(j, 2) & "|" & arr(j, 3) & "|" & arr(j, 4)) = "日期差异" Then
- arr(j, 5) = "日期差异"
- ElseIf d6(arr(j, 2) & "|" & arr(j, 4)) = "日期和地区" Then
- arr(j, 5) = "日期和地区"
- ElseIf d7(arr(j, 2) & "|" & arr(j, 3)) = "日期和金额" Then
- arr(j, 5) = "日期和金额"
- Else
- arr(j, 5) = "待查"
- End If
- Next j
- Sheet1.Range("a1").Resize(UBound(arr), 5) = arr
- Call 字典2
- End Sub
- Sub 字典2()
- Dim i As Integer, j As Integer, arr(), brr()
- Dim d1 As Object, d2 As Object, d3 As Object
- Dim d4 As Object, d5 As Object, d6 As Object, d7 As Object
- Set d1 = CreateObject("scripting.dictionary")
- Set d2 = CreateObject("scripting.dictionary")
- Set d3 = CreateObject("scripting.dictionary")
- Set d4 = CreateObject("scripting.dictionary")
- Set d5 = CreateObject("scripting.dictionary")
- Set d6 = CreateObject("scripting.dictionary")
- Set d7 = CreateObject("scripting.dictionary")
- trow = Sheet1.Range("d65536").End(xlUp).Row
- brr = Sheet1.Range("a1").CurrentRegion
- arr = Sheet2.Range("a1").CurrentRegion
- For i = 2 To UBound(brr)
- d1(brr(i, 1) & "|" & brr(i, 2) & "|" & brr(i, 3) & "|" & brr(i, 4)) = "正常"
- d2(brr(i, 1) & "|" & brr(i, 2) & "|" & brr(i, 3)) = "金额差异"
- d3(brr(i, 1) & "|" & brr(i, 2) & "|" & brr(i, 4)) = "地区差异"
- d4(brr(i, 1) & "|" & brr(i, 2)) = "地区和金额"
- d5(brr(i, 2) & "|" & brr(i, 3) & "|" & brr(i, 4)) = "日期差异"
- d6(brr(i, 2) & "|" & brr(i, 4)) = "日期和地区"
- d7(brr(i, 2) & "|" & brr(i, 3)) = "日期和金额"
- Next i
- For j = 2 To UBound(arr)
- If d1(arr(j, 1) & "|" & arr(j, 2) & "|" & arr(j, 3) & "|" & arr(j, 4)) = "正常" Then
- arr(j, 5) = d1(arr(j, 1) & "|" & arr(j, 2) & "|" & arr(j, 3) & "|" & arr(j, 4))
- ElseIf d2(arr(j, 1) & "|" & arr(j, 2) & "|" & arr(j, 3)) = "金额差异" Then
- arr(j, 5) = "金额差异"
- ElseIf d3(arr(j, 1) & "|" & arr(j, 2) & "|" & arr(j, 4)) = "地区差异" Then
- arr(j, 5) = "地区差异"
- ElseIf d4(arr(j, 1) & "|" & arr(j, 2)) = "地区和金额" Then
- arr(j, 5) = "地区和金额"
- ElseIf d5(arr(j, 2) & "|" & arr(j, 3) & "|" & arr(j, 4)) = "日期差异" Then
- arr(j, 5) = "日期差异"
- ElseIf d6(arr(j, 2) & "|" & arr(j, 4)) = "日期和地区" Then
- arr(j, 5) = "日期和地区"
- ElseIf d7(arr(j, 2) & "|" & arr(j, 3)) = "日期和金额" Then
- arr(j, 5) = "日期和金额"
- Else
- arr(j, 5) = "待查"
- End If
- Next j
- Sheet2.Range("a1").Resize(UBound(arr), 5) = arr
- End Sub
复制代码
VBA对比两表四列模表 - 副本.rar
(98.86 KB, 下载次数: 273)
麻烦各位了,附件里有程序文件和参考差异的结果。
工作簿中有表一和表二
先在表一对表二核对,然后在表二对表一核对。
先在表一对表二数据查找判断:
如果A/B/C/D列中的数据完全一致,则F列显示正常
如果A/B/C一致,D不同,则F列显示金额差异
如果A/B/D一致,C不同,则F列显示地区差异
如果A/B相同,C/D均不同,则F列为“地区和金额”
如果B/C/D相同,A不同,则F列为“日期差异”
如果B/D相同,A/C不同,则F列为“日期和地区”
如果B/C相同,A/D不同,则F列为“日期和金额”
其他情况,F列返回“待查”
然后继续在表二对表一数据查找判断,判断方式如上 |
评分
-
1
查看全部评分
-
|