我正在创建一个宏以反转单元格值的大写形式,以进行更好的解释。
原始值-
hh3crd220
xmi4Idc200
TEst02NoW
输出-
HH3CRD220
XMI4iDC200
teST02nOw
我认为必须已经有宏可以完成这项工作,但是我自己编写了一个代码,除了更改第n个值外,其他一切都正常,Mid无法正常工作,因为它只会提取值,我尝试过Character,但只会格式化元素,我希望像character.value或mid.value函数一样工作。
Sub CapsChange()
Dim letr As String
Dim Val1 As String
Dim sr As Range
lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
Set sr = Range("A1:A" & lastrow)
For Each r In sr
Fval = r.Value
Val1 = Left(r.Value, 1)
If Val1 <> UCase(Val1) Then
For i = 1 To Len(Fval)
letr = Mid(Fval, i, 1)
If letr = UCase(letr) Then
**'First Code try**
letr = LCase(letr)
**'Second Code try**
r.Characters(i, 1).Value = LCase(letr)
Else
letr = UCase(letr)
r.Characters(i, 1).Value = UCase(letr)
End If
Next i
End If
Next
End Sub
就像我们使用cell(x,y).value = XXX一样,只需要帮助就可以更改/控制单元格值的第n个字符。
最佳答案
试试这个:
使用SUB()的变体1
Sub Test()
Dim rng As Range, cl As Range, i&
Set rng = Range("A1:A" & Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row)
For Each cl In rng.Cells
For i = Len(cl.Value) To 1 Step -1
With cl.Characters(i, 1)
If .Text = UCase(.Text) Then
.Text = LCase(.Text)
ElseIf .Text = LCase(.Text) Then
.Text = UCase(.Text)
End If
End With
Next i, cl
End Sub
使用Function()的变体2
Public Function ReverseCase(cl As Range)
Dim StringOutput$, i&
For i = Len(cl.Value) To 1 Step -1
With cl.Characters(i, 1)
If .Text = UCase(.Text) Then
StringOutput = LCase(.Text) & StringOutput
ElseIf .Text = LCase(.Text) Then
StringOutput = UCase(.Text) & StringOutput
End If
End With
Next i
ReverseCase = StringOutput
End Function
测试功能()
两种变体都经过测试,可以正常工作