Excel VBA:查找具有相似值

时间:2016-08-31 21:23:17

标签: excel-vba vba excel

对我来说另一项艰巨的任务......

我有这样的excel表......

enter image description here

在第一列中有两个Aa,其值显示在第二列中,即A stringAstring

A stringAstring与一个空白键区别 。我想使用excel VBA来说,这两个值是相等的,只要它们在第一列中相同,但只与第二列中的一个字母不同。其中一个应该删除。 [显示在"目标"部]

同样地,有两个Dd,它们的值与<{1}}的不同。

这里我写了一些代码,但我不知道怎么做;

if algorithmus

感谢!!!

1 个答案:

答案 0 :(得分:2)

我在工作中遇到过这个问题,当我想保证&#34;等价&#34;一定的字符串。所以我的技术是&#34;规范化&#34;通过关注字符串的重要内容来强调字符串。

在我的大多数情况下,这意味着:

  • 剥离所有空格(通常不重要)
  • 将所有内容转换为小写(案例通常对我来说并不重要)
  • 有时会忽略某些特殊字符

所以我有一个名为NormalizeString的实用程序函数来执行这些操作。

然后您的代码变为:

Option Explicit

Sub DeleteSimilars()
    Dim thisSH As Worksheet
    Dim lastRow As Long
    Set thisSH = ActiveSheet
    lastRow = thisSH.UsedRange.Rows.Count

    Dim i As Long
    For i = lastRow To 2 Step -1
        If thisSH.Cells(i, 1) = thisSH.Cells(i - 1, 1) Then
            If NormalizeString(thisSH.Cells(i, 2), ";") = _
               NormalizeString(thisSH.Cells(i - 1, 2), ";") Then
                thisSH.Cells(i, 1) = vbNullString
                thisSH.Cells(i, 2) = vbNullString
            End If
        End If
    Next i
End Sub

Function NormalizeString(ByVal inputStr As String, _
                         Optional ByVal specialChars As String) As String
    '--- "normalizes" a string by a series of modifications, such as
    '      -- removes all whitespace
    '      -- converts all characters to lowercase
    '      -- removes other "special" characters that should not
    '         be considered part of the string
    Dim returnString As String
    returnString = Replace(inputStr, " ", "", , , vbTextCompare)
    returnString = LCase(returnString)
    If Not IsMissing(specialChars) Then
        Dim i As Integer
        For i = 1 To Len(specialChars)
            returnString = Replace(returnString, _
                                   Mid(specialChars, i, 1), "", , , vbTextCompare)
        Next i
    End If
    NormalizeString = returnString
End Function