string - 更改/更改单元格值的第 N 个元素 Excel VBA

标签 string vba excel case-sensitive

为了更好地解释,我正在创建一个宏来反转单元格值的大写。

原始值-

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

只需要帮助更改/控制单元格值的第 n 个字符,例如我们使用 cell(x,y).value = XXX。

最佳答案

试试这个:

使用 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

测试 function()

enter image description here

两种变体都经过测试,工作正常

关于string - 更改/更改单元格值的第 N 个元素 Excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33821210/

相关文章:

c - 如果前一个数组是同一位置的字符,则填充数组

excel - 在表中使用切片器/过滤器

php - 如何在不使用 strlen() 的情况下在 php 中查找字符串长度?

c++ - 正则表达式匹配失败,特殊左括号无效

python - 检查字符串是否包含 Python 数组中的多个元素

sql-server - 使用 SQL Server 链接表时,连续形式不会显示 'new record'

vba - 如何使用 VBA 在 Excel 中更改图表的范围?

vba - Google Apps 宏 - 与 Office VBA 宏相比如何?

excel - 如何在“数据”选项卡的“文本到列”功能中将所有列指定为 "Text"?

vba - 如何覆盖 scripting.dictionary 中键的值?