Excel 计算单元格中的大写单词和标点符号
我已经使用这个网站很长一段时间来解决我的Excel问题,但还没有找到以下问题的解决方案。 我在B16到B936单元格中有文本字符串(从约5个单词到1000个单词长)。 我想实现两件事:Excel 计算单元格中的大写单词和标点符号,excel,excel-formula,vba,Excel,Excel Formula,Vba,我已经使用这个网站很长一段时间来解决我的Excel问题,但还没有找到以下问题的解决方案。 我在B16到B936单元格中有文本字符串(从约5个单词到1000个单词长)。 我想实现两件事: 计算每个单元格中出现的大写字母单词 长度超过两个字符的。所以基本上我发现 StackOverflow是一个非常棒的网站“会返回分数“1” 由于“GREAT”是此文本字符串中唯一较长的单词 超过2个字符,并以大写字母表示 计算多个问号(“?”,“?”)的次数, “??,…)显示在这些文本字符串中。示例:“你确定吗?
“1”
由于“GREAT”
是此文本字符串中唯一较长的单词
超过2个字符,并以大写字母表示(“?”,“?”)的次数,
“??,…)
显示在这些文本字符串中。示例:“你确定吗?”
??真的确定??将返回分数“2”
。我试着用一个
例如(LEN-LEN(替换为(…;“?”)
,但当
公式遇到一个“
它返回一个奇数结果Function CountUppercaseWords(Expression As String) As Integer
Dim SplitArray() As String
SplitArray = Split(Expression, " ")
Dim I As Integer
Dim Count As Integer
Dim NextWord As String
Count = 0
For I = LBound(SplitArray) To UBound(SplitArray)
NextWord = SplitArray(I)
If NextWord = UCase(NextWord) And Len(NextWord) >= 2 Then
Count = Count + 1
End If
Next
CountUppercaseWords = Count
End Function
Function MultipleQuestionMarkOccurences(Expression As String) As Integer
Dim I As Integer
Dim CurrentLength As Integer
Dim Count As Integer
Dim NextChar As String
Count = 0
CurrentLength = 0
For I = 1 To Len(Expression)
NextChar = Mid(Expression, I, 1)
If NextChar = "?" Then
CurrentLength = CurrentLength + 1
Else
CurrentLength = 0
End If
If CurrentLength = 2 Then
Count = Count + 1
End If
Next
MultipleQuestionMarkOccurences = Count
End Function
这不是一个完美的解决方案,但可能会有所帮助。 公共函数CountUpperWords(ByVal String1作为字符串)作为整数
Dim StringArray() As String
ReDim StringArray(Len(String1)) As String
Dim String2 As String
Dim String2Array() As String
ReDim String2Array(UBound(StringArray)) As String
Dim isUpper As Boolean
String2 = UCase(String1)
For i = 0 To Len(String1) ' fragmentation all text to array and make UCase mirror
StringArray(i) = Mid(String1, i + 2, 1) 'Function would start from secound character because first character often will be upper
String2Array(i) = LCase(StringArray(i))
Next
CountUpperCases = 0
For i = 0 To UBound(StringArray) ' compare original text and upper
If StringArray(i) <> String2Array(i) Then
j = i
isUpper = False
Do While StringArray(j) <> " " ' checking word is upper
If StringArray(j) <> String2Array(j) Then
isUpper = True
Else
isUpper = False
End If
j = j + 1
Loop
If isUpper = True Then
CountUpperCases = CountUpperCases + 1
End If
i = j
End If
Next
End Function
Dim StringArray()作为字符串
将ReDim StringArray(Len(String1))作为字符串
将字符串2变暗为字符串
将String2Array()设置为字符串
将String2Array(UBound(StringArray))重拨为字符串
Dim是布尔型的
String2=UCase(String1)
对于i=0到Len(String1)'将所有文本碎片化到数组并生成UCase镜像
StringArray(i)=Mid(String1,i+2,1)'函数将从secound字符开始,因为第一个字符通常是上字符
String2Array(i)=LCase(StringArray(i))
下一个
CountUpperCases=0
对于i=0到UBound(StringArray)'比较原始文本和上限
如果StringArray(i)String2Array(i),则
j=i
isUpper=False
当StringArray(j)“”检查单词为大写时执行
如果StringArray(j)String2Array(j),则
isUpper=True
其他的
isUpper=False
如果结束
j=j+1
环
如果isUpper=True,则
CountUpperCases=CountUpperCases+1
如果结束
i=j
如果结束
下一个
端函数
我觉得这很搞笑。我很想知道您使用这些数据进行的实际报告的结果。当您返回结果时,布局会是什么样子?1)转到“C”2)转到“D”?您能否给出该列数据中可能存在的所有标点符号的确定列表?“我用这个网站解决我的Excel问题已经很长时间了”,但这是你的第一个问题,从…今天起你就是会员了。你可以不提供代码也可以试试。@PJ Rosenburg:正楷和多个标点符号被用作情绪的代表(大多是负面情绪)以书面形式。现有的元规范不考虑基于单词和其他工件计算价和交互。我不是VBA方面的专家,但请参见上面的OP重新标点。例如,此解决方案是否也会忽略字符串“IS!“-我认为这不应该被视为计数的一部分-从诸如“你知道任何伟大的网站吗?”?对StackOverflow是!“?是的,你是对的。首先你必须从表达式中去掉所有标点符号。还要定义标点符号。@XOR LX:说得好。谢谢。在对法语文本进行分析时,大写字母超过2个字符的任何内容都是有意义的。你给出的示例实际上并不适用于法语年龄。这在英语中是常见的吗?它的意思是什么?它是否有任何情感意义!“?他的意思是我的方法将所有非空白字符作为单词的一部分进行计数。不客气。如果您当时接受我的回答,我将不胜感激。”。