我列出了几千个中国品牌名称,每个单元格一个品牌名称,我试图计算这些名称中有多少使用双重字符,这意味着两个相同的汉字一个接一个。例如,这里列出了6个品牌名称(每个品牌都在自己的单元格中):
数字1,3和5中有两个字符(晶晶,五五,哈哈),所以我想要一个返回数字“3”的公式,因为有三个单元格包含双重字符。 (请注意,虽然#6包含两个相同的字符 - 拉,两次 - 这些字符彼此不相邻,因此不会返回为真)。
我认为字符是中文并不重要,计算双字母的公式也是一样的,例如:
ABB
CC
FDDF
字符不以空格分隔。我不了解VBA,但很高兴学习如何输入和运行脚本。
答案 0 :(得分:1)
不要劝阻你学习VBA(这是一个很棒的技能!)但我想我会掀起一个VBA功能,你可以立即开始使用你的数据......一旦我们确认一切正常我我将给你一些链接来解释这个(简单)函数是如何工作的,以及其他一些好的初学者资源。 :)
我从不使用汉字,但我做了一些研究。西方字母通常来自一组255个字符,称为ASCII。东部字母表来自一组65533个字符,称为Unicode。 ASCII字符每个占用1个字节的存储空间,而Unicode字符每个占用2个字节。
对于像我放在一起的文本功能,这意味着什么?我不完全确定!显然我应该使用不同的内置公式,但我的代码不适用于替代方法,但似乎工作得很好,就像我一直做的事情一样。
与“北美”相比,这可能与您的“完整”数据集以及计算机的语言设置相结合。从理论上讲,它应该可以正常工作,但我建议当你开始使用它时,计算一堆不同的单元格手动,以便你可以比较函数给你的数字,让我知道是否存在差异。 (如果你的名单不是“绝密”,如果你不介意的话,我有点想要一份副本;这对我来说都是陌生的[双关语意思]而且我想了解更多关于数据方面的差异。)
一小组中文字符还不是Unicode标准的一部分,但显然很少使用它们(通常用于地名?)但是你应该留意这一点。同样,它应该不是一个问题 - 理论上 - 因为怀疑“如果它们不是Unicode,你的计算机也不会有它们”(我认为!)Here is a link to a list有问题的字符。 / p>
无论如何,了解它是否正常运作的唯一方法就是尝试使用您的全套数据!
选择下面的VBA代码,然后按 Ctrl + C 进行复制。
转到Excel工作簿,然后按 Alt + F11 打开VBA编辑器(又名 VBE )。
点击VBE中的插入菜单,然后选择模块。
按 Ctrl + V 粘贴代码。
单击VBE中的调试菜单,然后选择**编译项目。 这会检查代码是否有错误。理想情况下“nothing”将会发生,这意味着它没有错误&很高兴。
关闭VBE窗口,右上角有“✘”。
保存您的工作簿,新功能随时可用! 有关示例用法,请参阅下面的屏幕截图。
Public Function cellHasDups(str_In As String) As Boolean
'returns TRUE if there are at least 2 identical characters in a row
Dim x As Integer, prevChar As String, dupFound As Boolean
On Error GoTo dError
prevChar = ""
dupFound = False
For x = 1 To Len(str_In) 'compare each character to the previous
If Mid(str_In, x, 1) = prevChar Then dupFound = True
prevChar = Mid(str_In, x, 1)
Next x
cellHasDups = dupFound 'return T/F to the calling cell
Exit Function
dError:
cellHasDups = False
End Function
Public Function rangeHasDups(rge_In As Range) As Long
'returns the number of cells in the specified range that have duplicate characters
'ashleedawg@outlook.com
Dim c As Range, countDups As Long
On Error GoTo dError
countDups = 0
'loop through all cells in selected range; run [cellHasDups] on each one and count "TRUE" responses
For Each c In rge_In
countDups = countDups + IIf(cellHasDups(c.Value), 1, 0)
Next c
rangeHasDups = countDups 'return total to the calling cell
Exit Function
dError:
rangeHasDups = 0
End Function
该功能有两种变化。您可以将它们粘贴到模块中,并使用适合您需要的任何一个(或者如果有另一种方法更容易,我可以在此时轻松进行更改):
cellHasDups 检查单个单元格,如果单元格中有2个相同的字符,则返回TRUE,否则返回FALSE。
rangeHasDups 检查一小部分单元格(即A1:A20或A5:G99或A:A等)并返回一个具有重复字符的单元格数。
尝试一下,如果您有任何问题或疑问,请告诉我们!
答案 1 :(得分:0)
您可以运行此宏来实现此目的:
Sub countDoubles()
Dim Rrng As Range
Dim Rcell As Range
Dim cellArray(1 To 100) As Integer //100 - The number of cells in the range
Dim i As Integer
Dim j As Integer
Dim count As Integer
On Error Resume Next
Set Rrng = Range("G10:G20") //change this to the relevant range
j = 1
For Each Rcell In Rrng.Cells
For i = 2 To Len(Rcell)
If Mid(Rcell, i - 1, 1) = Mid(Rcell, i, 1) Then
cellArray(j) = 1
j = j + 1
Exit For
End If
Next i
Next Rcell
For i = 1 To UBound(cellArray)
count = count + cellArray(i)
Next i
MsgBox (count) //message box to show the number of double
End Sub