对我来说另一项艰巨的任务......
我有这样的excel表......
在第一列中有两个Aa
,其值显示在第二列中,即A string
和Astring
。
A string
和Astring
与一个空白键区别 。我想使用excel VBA来说,这两个值是相等的,只要它们在第一列中相同,但只与第二列中的一个字母不同。其中一个应该删除。 [显示在"目标"部]
同样地,有两个Dd
,它们的值与<{1}}的仅不同。
这里我写了一些代码,但我不知道怎么做;
。
if algorithmus
感谢!!!
答案 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