2015-03-31 62 views
0

我很新,不是第一次使用的用户,但可能在这里曾经有一次。计算Excel中两个单元格之间的字符数相同

我有一个庞大的名单,以检查他们是否有重复。

问题是,有时同名的拼写不同,列表中的同一个人。

所以,我想检查单元格的第一个字母,看它们是否相同。

例如,这里是一个虚构的名单:

A1 John Doe 
A2 John Dowe 
A3 John Dove 

有一个Excel的功能,我可以使用,会告诉我有多少字符是从它上面的细胞一样吗?

所以,在细胞中,其中所述公式将是上面的例子中,将显示:

A1 John Doe B1 0 (or "NA" or "REF" because there's no cell to compare to above it) 
A2 John Dowe B2 7 
A3 John Dove B3 7 

因为无论A2和A3份额7个字符与它们上面的小区...我希望这是很容易理解。

谢谢!

+0

可能重复的[匹配名称的好算法?](http://stackoverflow.com/questions/7946192/good-algorithm-for-matching-names) – FreeMan 2015-03-31 18:03:48

+0

哇...我在我的头上,但你可能是正确的,我只是不知道如何在Excel中实现任何...谢谢... – manny 2015-04-01 19:30:38

+0

我已经把闪光灯放在那个洞,我认为有一些VB/VBA示例实现,如果你看远远不够。我已经没有了,但是我曾经和一个人一起工作的人实现了Levenshtein距离算法。执行起来很慢,但代码并不是非常困难。我没有做到这一点,因为我现在已经被另一个方向重定向了。 – FreeMan 2015-04-01 19:34:22

回答

0

看看this question。它是在不同的情况下询问名称匹配的问题,但有很多很好的例子说明如何在那里列出。

这是一个相当深的兔子洞,取决于你想得到多深和深度。

+0

是啊,你是对的,它看起来像一个非常复杂的东西,我正在寻找...谢谢!... – manny 2015-04-01 19:41:49

0

您没有给我们足够的信息。

就你而言,A1(“John Doe”)包含两个“o”字符。因此,下面的单元格A2(“John Dowe”)将只有6个字符的共同点。

IF你所说的“同一个字符”是相同位置的同一个字符,那么你在A1和A2之间仍然存在问题。

约翰待办事项Ë
约翰待办事项W¯¯Ë

“W” 和 “e” 不匹配。只有6个字符是相同的。

为我们提供更多信息!

编辑#1
复制并粘贴此代码的模块

Function compareCells(ran As Range) As Variant 
Dim numSame As Integer 

Dim c As Integer 
Dim r As Integer 
c = ran.Column 'find selected column 
r = ran.Row  'find selected row 

Dim a As String 
Dim b As String 
a = Worksheets("Ark1").Cells(r - 1, c).Value 'string of the cell above 
b = Worksheets("Ark1").Cells(r, c).Value  'string of the current cell 

Dim aLen As Integer 
aLen = Len(a)  'check the length of the a string 


Dim i As Integer 
For i = 1 To aLen 
    If Mid(a, i, 1) = Mid(b, i, 1) Then 'if chars in same pos are equal... 
     numSame = numSame + 1 
    End If 
Next 

compareCells = numSame 

End Function 

编辑#2

Function compareCells(ran As Range) As Variant 
Dim numSame As Integer 

Dim c As Integer 
Dim r As Integer 
c = ran.Column 'find selected column 
r = ran.Row  'find selected row 

Dim a As String 
Dim b As String 
a = ActiveSheet.Cells(r - 1, c).Value 'string of the cell above 
b = ActiveSheet.Cells(r, c).Value  'string of the current cell 

Dim aLen As Integer 
aLen = Len(a)  'check the length of the a string 


Dim i As Integer 
For i = 1 To aLen 
    If Mid(a, i, 1) = Mid(b, i, 1) Then 'if chars in same pos are equal... 
     numSame = numSame + 1 
    End If 
Next 

compareCells = numSame 

End Function 

使用=compareCells()并选择只有你想要的细胞与

0以上的单元格进行比较
+0

好吧,让我试试...我的意思是,该功能将比较相同的字符相同的位置......但我也将空间角色计为一个角色......所以,这就是为什么约翰·多伊和约翰·多伊算作7个角色一样,他们都以John_Do开始,如果你数了空间作为一个字符......通过查看一个字符串的长度并在它旁边设置一个列来计算相同字符的数量,我可以设置一个比例,这将帮助我找到类似的名称来查看更密切... – manny 2015-04-01 19:41:05

+0

现在,请参阅我的编辑。经过测试和工作。 – FancyGamer 2015-04-02 04:37:21

+0

哇!我印象深刻,但我一定在做错事。我急于尝试这一点,但我无法弄清楚为什么它不适合我。不过,我是新来的,所以让我问你几个愚蠢的问题。我在Excel中插入了一个'模块',然后我试图通过在括号内插入BG116来使用公式compareCells(),因为那是我的测试单元。 BG116上方和下方都有细胞,但我得到了#VALUE!错误。 BG116上方的单元格的名称以Tom_开头,BG116也是如此。我知道我一定在做错事...我该怎么做?...再次感谢... – manny 2015-04-03 02:17:09

相关问题