如何将短语转换为句子大小写,忽略大写单词

问题描述 投票:0回答:1

我想将所有文本转换为“句子大小写”,但我需要大写单词保持大写。如果文件不是 ~50.000 行,我会手动编写它。

字符串可以以字母、数字或符号开头。

这些是我想要的一些例子:

A B
247 金属桥柄 247 金属桥柄
阿德里亚诺靠垫 阿德里亚诺靠垫
石英和水晶石英 60 毫米 石英和水晶石英 60 毫米
*** 客户完全集成的洗碗机*** *** 客户完全集成洗碗机***
_____漆木 _____ _____漆木 _____
基本单元 2 个门 + 2 个架子 [L_10CUC] 基本单元 2 个门 + 2 个架子 [L_10CUC]
引擎盖 HILIGHT X - 不锈钢 引擎盖 HILIGHT X - 不锈钢

我尝试了一些建议的公式和 VBA,但每个都给出了一些错误:

=MID(A1,匹配(65,代码(MID(A1,ROW(间接("1:"&LEN(A1))),1)),1)+1,1)

它会找到我的第一个字母(然后我可以轻松搜索其左侧和右侧的内容,并将其设为小写),但有时会失败:在 B3 中我期待“A”。

A B
247 金属桥柄 M
*** 客户完全集成的洗碗机*** F
阿德里亚诺靠垫 N

我也可以用一些 VBA 得到我的第一个字母,但如果我想丢弃符号,我必须输入每个符号:

Function FirstChar(Stringa As String)
Application.Volatile
Dim sStr As String
Dim i As Long

For i = 1 To Len(Stringa)
If Not IsNumeric(Mid(Stringa, i, 1)) Then
If Mid(Stringa, i, 1) <> " " And Mid(Stringa, i, 1) <> "*" Then
FirstChar = Mid(Stringa, i, 1)
Exit Function
End If
End If
Next i

FirstChar = CVErr(xlErrNA)

End Function
A B
247 金属桥柄 M
*** 客户完全集成的洗碗机*** F
___阿德里亚诺靠垫 _

无论如何,缺少保留大写单词的方法。

excel vba text uppercase
1个回答
0
投票

Shapes.TextFrame2.TextRange
非常适合编辑文本。

这将正确处理大小写,但第一个单词是数字除外。

Shapes.TextFrame2.TextRange.ChangeCase msoCaseSentence

代码

我故意让范围变得简单,根据需要修改它们。

Sub Example()
    Application.ScreenUpdating = False
    Dim Editor As Shape
    Set Editor = ActiveSheet.Shapes.AddTextEffect(PresetTextEffect:=msoTextEffect31, Text:=" ", _
        FontName:="+mn-lt", FontSize:=8, FontBold:=10, FontItalic:=msoFalse, Left:=200, Top:=0)
                
    Dim Data As Variant
    Data = Range("A1").CurrentRegion.Columns(1)
        
    Dim CharCode As Long
    With Editor.TextFrame2.TextRange
        Dim r As Long, s As Long, c As Long
        For r = 1 To UBound(Data)
            .Text = Data(r, 1)
            .ChangeCase msoCaseSentence
                
            Rem This was added to handle the first word in the sentence being numeric (e.g. 247)
            For s = 1 To .Sentences.Count
                With .Sentences(s)
                    For c = 1 To .Characters.Count
                        CharCode = Asc(.Characters(c, 1).Text)
                        If (CharCode >= 65 And CharCode <= 90) Or (CharCode >= 97 And CharCode <= 122) Then
                            .Characters(c, 1).ChangeCase msoCaseUpper
                            Exit For
                        End If
                    Next
                End With
            Next
            Data(r, 1) = Editor.TextFrame2.TextRange.Text
        Next
    End With
    Range("B1").Resize(UBound(Data)).Value = Data
    Editor.Delete
End Sub

结果

原文 修改文字
2金属桥形手柄 2金属桥柄
247 金属桥柄 247 金属桥柄
阿德里亚诺靠垫 阿德里亚诺靠垫
石英和水晶石英 60 毫米 石英和水晶石英 60 毫米
*** 客户完全集成的洗碗机*** *** 客户完全集成洗碗机***
_____漆木 _____ _____漆木 _____
基本单元 2 个门 + 2 个架子 [L_10CUC] 基本单元 2 个门 + 2 个架子 [L_10CUC]
引擎盖 HILIGHT X - 不锈钢 引擎盖 HILIGHT X - 不锈钢
© www.soinside.com 2019 - 2024. All rights reserved.