我有两个数据列表。 第一个列表是包含所有新数据的列表,在第二个列表中我有旧数据。现在我希望Excel显示一个消息框,告诉我第二个列表中缺少哪些数据。
使用在其他主题中找到的信息,我能够将这两个列表相互比较,并在第三张表格中输出这些数据。 但是我真的不需要第三张,但我希望在消息框中有这些差异.. :)任何人都可以帮助我如何正确地更改此代码?
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke android:color="#0a0909"
android:width="2dp"/>
<corners android:radius="20dp"/>
<gradient android:angle="45"
android:type="linear"
android:startColor="#d61a1a"
android:endColor="#19f269"
android:useLevel="false"/>
<size android:height="250dp"
android:width="250dp"/>
</shape>
答案 0 :(得分:1)
未经测试 - 直接在SO中输入,但应显示方式:(在End With
之后开始)
dim msg as string
msg = "Extras: "
For Each c In rng2
'edit: skip empty cells
If len(c.Value) > 0 And Application.CountIf(rng1, c.Value) = 0 Then
'sh3.Cells(Rows.Count, 2).End(xlUp)(2) = c.Value
msg = msg & c.value & ", "
End If
Next
msg = left(msg,len(msg)-2)
msgbox msg
答案 1 :(得分:0)
@PatrickHonorez有更好的答案,因为他纠正了OP的代码。
每当比较两个列表时,我会使用某种Collection或Dictionary。
我的方法是将第二个列表中的所有值添加到ArrayList,然后从ArrayList中删除第一个列表值。这样,只有新值保留在ArrayList中。
Sub Compare()
Dim cell As Range, list As Object
Set list = CreateObject("System.Collections.ArrayList")
With Worksheets(2)
For Each cell In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
If cell.Value <> "" Then
If Not list.Contains(cell.Value) Then list.Add cell.Value
End If
Next
End With
With Worksheets(1)
For Each cell In .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
If list.Contains(cell.Value) Then list.Remove cell.Value
Next
End With
With Worksheets(3)
.Columns(1).ClearContents
.Range("A1") = "Extras in List 2"
If list.Count = 0 Then
MsgBox "No new data", vbInformation, ""
Else
MsgBox Join(list.ToArray, ", "), vbInformation, "New Data"
.Range("A2").Resize(list.Count).Value = Application.Transpose(list.ToArray)
End If
End With
End Sub