我想将所有文本转换为“句子大小写”,但我需要大写单词保持大写。如果文件不是 ~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 |
___阿德里亚诺靠垫 | _ |
无论如何,缺少保留大写单词的方法。
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 - 不锈钢 |