Excel 检查字符串的大写字符

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“”则斜体=拆分

如何检查单元格中的每个字符是否为大写

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“”则斜体=拆分(左(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