Excel 检查字符串的大写字符
如何检查单元格中的每个字符是否为大写 UCASE将字母转换为大写,但我想检查一下 我不确定“做”的陈述应该放在哪里Excel 检查字符串的大写字符,excel,vba,Excel,Vba,如何检查单元格中的每个字符是否为大写 UCASE将字母转换为大写,但我想检查一下 我不确定“做”的陈述应该放在哪里 函数斜体(rng作为范围)作为变量 作为字符串的Dim strng 我和你一样长,我和你一样长,斯特格伦和你一样长 strngLen=Len(rng.Value2) iIni=1 当iEnd iIni时执行,然后strng=strng&Mid(rng.Value2,iIni,iEnd-iIni)和“|” iEnd=iEnd+1 iIni=iEnd 环 如果strng“”则斜体=拆分
函数斜体(rng作为范围)作为变量
作为字符串的Dim strng
我和你一样长,我和你一样长,斯特格伦和你一样长
strngLen=Len(rng.Value2)
iIni=1
当iEnd iIni时执行,然后strng=strng&Mid(rng.Value2,iIni,iEnd-iIni)和“|”
iEnd=iEnd+1
iIni=iEnd
环
如果strng“”则斜体=拆分(左(strng,Len(strng)-1),“|”)
端函数
我不确定在“大写”中应该做什么。请检查大写字符是否等于当前字符:
While UCase(rng.Characters(iEnd, 1).Text) = rng.Characters(iEnd, 1).Text And Not rng.Characters(iEnd, 1).Font.Italic
感谢@SiddharthRoth的帮助
现在您已经显示了完整的代码,还有一个注意事项。您应该避免使用excel中使用的单词命名变量、子变量和函数
因此,将名称更改为Itlc
或其他名称:
Function Itlc(rng As Range) As Variant
Dim strng As String
Dim iEnd As Long, iIni As Long, strngLen As Long
strngLen = Len(rng.Value2)
iIni = 1
Do While iEnd <= strngLen
Do While UCase(rng.Characters(iEnd, 1).Text) = rng.Characters(iEnd, 1).Text And Not rng.Characters(iEnd, 1).Font.Italic
If iEnd = strngLen Then Exit Do
iEnd = iEnd + 1
Loop
If iEnd > iIni Then strng = strng & Mid(rng.Value2, iIni, iEnd - iIni) & "|"
iEnd = iEnd + 1
iIni = iEnd
Loop
If strng <> "" Then Itlc = Split(Left(strng, Len(strng) - 1), "|")
End Function
函数Itlc(rng作为范围)作为变量
作为字符串的Dim strng
我和你一样长,我和你一样长,斯特格伦和你一样长
strngLen=Len(rng.Value2)
iIni=1
当iEnd iIni时执行,然后strng=strng&Mid(rng.Value2,iIni,iEnd-iIni)和“|”
iEnd=iEnd+1
iIni=iEnd
环
如果strng为“”,则Itlc=Split(左(strng,Len(strng)-1),“|”)
端函数
您可以使用Regexp
快速执行此操作,而无需循环:
Function OpalsOut(StrIn As String) As Variant
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Pattern = "[A-Z]+"
.Global = True
.ignorecase = False
If .test(StrIn) Then
Set OpalsOut = .Execute(StrIn)
Else
OpalsOut = "No match"""
End If
End With
End Function
函数为大写(parString为String)布尔值
将值设置为整数
值=Asc(左(部分字符串,1))
isUpperCase=(value>=65,value=192,value=216,value=158,value就这么简单:
Function IsUpper(ByVal s) As Boolean
IsUpper = UCase(s) = s
End Function
这里的想法是创建字符串的副本并将副本转换为大写。如果输入参数字符串确实是以大写开头的,那么转换后的副本现在应该与输入完全相等
如果将Excel VBA比较文本值的默认值更改为选项Compare text
,则需要不同的解决方案。但这种情况很少见。上述方法在Excel VBA中绝大多数情况下都适用
以下基于RegEx的函数是一种即使与选项Compare Text
一起使用也可以使用的替代函数:
Function IsUpper(s) As Boolean
With CreateObject("VBScript.RegExp")
.Pattern = "^[^a-z]*$"
IsUpper = .Test(s)
End With
End Function
第二个函数也将在Access VBA中工作,默认为另一个字符串比较选项。我做了一个小更改。希望您不介意?如果您愿意,可以回滚这些更改。@johndoe253:现在就试试。@SiddharthRout感谢您的帮助。我正在编写一个示例。@johndoe253请参见编辑。您可能需要刷新屏幕。Y我们的原始代码是正确的。它只是缺少了。Text
@johndoe253刚刚做了另一次编辑。看看这是否有帮助。我在一些虚构的数据上测试了它,它似乎对我有用。确保没有任何单元格有错误。纯代码的答案被认为是低质量的:确保提供一个解释,说明你的代码是什么,以及它是如何解决的解决问题。如果你能在帖子中添加更多信息,这将有助于提问者和未来的读者。请看,这只测试字符串中的第一个字符。它不会测试字符串中的所有字符。添加一些上下文来解释你的答案将如何解决问题,从长远来看,这将真正有助于社区。函数isAllUppercase将测试字符串中的所有字符
Function isAllUppercase(parString As String) As Boolean
Dim lenParString As Long
Dim pos As Long
Dim temp As String
lenParString = Len(parString)
isAllUppercase = True
For pos = 1 To lenParString
temp = Mid(parString, pos, 1)
If (isAlpha(temp) And isUpperCase(temp) = False) Then
isAllUppercase = False
Exit Function
End If
Next pos
End Function 'isAllUppercase
Function isAlpha(parString As String) As Boolean
Dim lenParString As Integer
Dim pos As Integer
lenParString = Len(parString)
For pos = 1 To lenParString
Select Case Asc(Mid(parString, pos, 1))
Case 65 To 90, _
97 To 122, _
138, _
140, _
142, _
154, _
156, _
158 To 159, _
192 To 214, _
216 To 246, _
249 To 255
' 65-90=A-Z, 97-122=a-z
' 138=Š, 140=Œ, 142=Ž, 154=š, 156=œ, 158=ž, 159=Ÿ, 192-214=À-Ö, 216-246=Ø-ö, 248-255=ø-ÿ
isAlpha = True
Case Else
isAlpha = False
Exit For
End Select
Next pos
End Function 'isAlpha
Function isUpperCase(parString As String) As Boolean
Select Case Asc(Left(parString, 1))
Case 65 To 90, _
138, _
140, _
142, _
159, _
192 To 214, _
216 To 222
' 65-90=A-Z
' 138=Š, 140=Œ, 142=Ž, 159=Ÿ, 192-214=À-Ö, 216-222=Ø-Þ
isUpperCase = True
Case Else
isUpperCase = False
End Select
End Function 'isUpperCase
Function IsUpper(ByVal s) As Boolean
IsUpper = UCase(s) = s
End Function
Function IsUpper(s) As Boolean
With CreateObject("VBScript.RegExp")
.Pattern = "^[^a-z]*$"
IsUpper = .Test(s)
End With
End Function
Function isAllUppercase(parString As String) As Boolean
Dim lenParString As Long
Dim pos As Long
Dim temp As String
lenParString = Len(parString)
isAllUppercase = True
For pos = 1 To lenParString
temp = Mid(parString, pos, 1)
If (isAlpha(temp) And isUpperCase(temp) = False) Then
isAllUppercase = False
Exit Function
End If
Next pos
End Function 'isAllUppercase
Function isAlpha(parString As String) As Boolean
Dim lenParString As Integer
Dim pos As Integer
lenParString = Len(parString)
For pos = 1 To lenParString
Select Case Asc(Mid(parString, pos, 1))
Case 65 To 90, _
97 To 122, _
138, _
140, _
142, _
154, _
156, _
158 To 159, _
192 To 214, _
216 To 246, _
249 To 255
' 65-90=A-Z, 97-122=a-z
' 138=Š, 140=Œ, 142=Ž, 154=š, 156=œ, 158=ž, 159=Ÿ, 192-214=À-Ö, 216-246=Ø-ö, 248-255=ø-ÿ
isAlpha = True
Case Else
isAlpha = False
Exit For
End Select
Next pos
End Function 'isAlpha
Function isUpperCase(parString As String) As Boolean
Select Case Asc(Left(parString, 1))
Case 65 To 90, _
138, _
140, _
142, _
159, _
192 To 214, _
216 To 222
' 65-90=A-Z
' 138=Š, 140=Œ, 142=Ž, 159=Ÿ, 192-214=À-Ö, 216-222=Ø-Þ
isUpperCase = True
Case Else
isUpperCase = False
End Select
End Function 'isUpperCase