简体   繁体   English

VBA宏以比较单元格值

[英]VBA Macro to compare cell values

I have problem in comparing cells with different value and give what ever is missing in one cell into third cell. 我在比较具有不同值的单元格时遇到了问题,并将一个单元格中缺少的内容提供给第三个单元格。

Example: 例:

I am trying to match two cells: 我正在尝试匹配两个单元格:

cell 1 (abcd ) & cell 2 (cab) both have " abc" in common and I want the macro to show 单元格1(abcd)和单元格2(cab)都有共同的“ abc”,我希望宏显示

missing value "d" to be shown in cell 3. 缺失值“ d”将显示在单元格3中。

Consider: 考虑:

Public Function WhatsMissing(Big As String, Little As String) As String
    Dim V As String
    V = Big
    For i = 1 To Len(Little)
        ch = Mid(Little, i, 1)
        V = Replace(V, ch, "")
    Next i
    WhatsMissing = V
End Function

So if A1 contains abcdefg and B1 contains def then =WhatsMissing(A1,B1) would display: 因此,如果A1包含abcdefg,而B1包含def,则= WhatsMissing(A1,B1)将显示:

abcg abcg

If your values will have spaces in them for sure, then you can split them with the Split function and put them into arrays (or dictionary objects) and compare the two dictionaries for differences. 如果您的值中肯定有空格,则可以使用Split函数将它们拆分,然后将它们放入数组(或字典对象)中,并比较两个字典的区别。

Here's a simple example: 这是一个简单的例子:

Option Explicit

Sub getDifferences()
    Dim s1() As String
    Dim s2() As String

    s1 = Split(Range("A1").Value, " ") ' a b c d
    s2 = Split(Range("B1").Value, " ") ' c a b

    Dim d1 As Object
    Dim d2 As Object

    Set d1 = CreateObject("Scripting.Dictionary")
    Set d2 = CreateObject("Scripting.Dictionary")

    ' collect the values from cell 1
    Dim i As Long
    For i = 0 To UBound(s1)
        d1.Add s1(i), i
    Next

    ' collect the values from cell 2
    For i = 0 To UBound(s2)
        d2.Add s2(i), i
    Next


    Dim missing As Object
    Set missing = CreateObject("Scripting.Dictionary")
    Dim sKey As Variant

    ' check missing items from first cell to second
    For Each sKey In d1.keys()
        If (d2.exists(sKey) = False) Then
            missing.Add sKey, 1
        End If
    Next

    ' check missing items from second cell to first
    For Each sKey In d2.keys()
        If (d1.exists(sKey) = False) Then
            missing.Add sKey, 1
        End If
    Next

    ' display the missing items between the two
    For Each sKey In missing.keys()
        Debug.Print sKey
    Next


End Sub

If cell 1 had: abcd 如果单元格1具有:abcd

And cell 2 had: cabe 单元2具有:cabe

This will print out: de 这将打印出:de

Hope this helps 希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM