Excel 列中单元格的大写字母
我试图将B2列和下列中包含数据的所有单元格中的所有字母都转换为大写字母。这是VBAExcel 列中单元格的大写字母,excel,vba,excel-formula,Excel,Vba,Excel Formula,我试图将B2列和下列中包含数据的所有单元格中的所有字母都转换为大写字母。这是VBA Sub CapitalLettersColumnB() 'Capital Letters to names in column B (from B2 and down) 'Column B holds headers! With Range("B2", Cells(Rows.Count, "B").End(xlUp)) .Value = Evaluate("INDEX(
Sub CapitalLettersColumnB()
'Capital Letters to names in column B (from B2 and down)
'Column B holds headers!
With Range("B2", Cells(Rows.Count, "B").End(xlUp))
.Value = Evaluate("INDEX(UPPER(" & .Address(External:=True) & "),)")
End With
End Sub
当我的工作表包含2行(或更多)数据时,不计算标题,vba工作正常。
但是,当我的工作表只包含1行数据,而不包括标题时,B列(单元格B2)中的名称将替换为#值。
任何人都可以帮助找出问题所在,以及如何纠正我的vba 老实说,我不知道出了什么问题。(我认为这与范围(“B2:B2”)的原因相同。不能设置跨越同一单元格的范围)
您的
单元格(Rows.Count,“B”).End(xlUp)
返回最后一个单元格的值,我不确定它是如何工作的。但是,您可以更改代码,使其范围为lastrow。
但是如果最后一行是2,代码将失败,因此if转到else,它只更改单元格B2的Ucase
If Cells(Rows.Count, "B").End(xlUp).Row > 2 Then
' more than one row after B2
With Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
.Value = Evaluate("INDEX(UPPER(" & .Address(external:=True) & "),)")
End With
Else
' no rows past B2
Range("B2").Value = UCase(Range("B2").Value)
End If
老实说,我不确定出了什么问题。(我认为这与范围(“B2:B2”)的原因相同。不能设置跨越同一单元格的范围)
您的
单元格(Rows.Count,“B”).End(xlUp)
返回最后一个单元格的值,我不确定它是如何工作的。但是,您可以更改代码,使其范围为lastrow。
但是如果最后一行是2,代码将失败,因此if转到else,它只更改单元格B2的Ucase
If Cells(Rows.Count, "B").End(xlUp).Row > 2 Then
' more than one row after B2
With Range("B2:B" & Cells(Rows.Count, "B").End(xlUp).Row)
.Value = Evaluate("INDEX(UPPER(" & .Address(external:=True) & "),)")
End With
Else
' no rows past B2
Range("B2").Value = UCase(Range("B2").Value)
End If
问题是
索引
。函数返回范围
或数组
中的位置,而不是单个值。如果你对公式进行评估,可以归结为:
=INDEX("VALUE",)
而不是正确的:
=INDEX({"VALUE1","VALUE2"},)
不向索引
提供范围或数组将返回错误
要更正代码,您需要确保始终存在大于一个单元格的范围对象,例如:
Sub CapitalLettersColumnB()
With Range("B1", Cells(Rows.Count, "B").End(xlUp))
.Value = Evaluate("IF(ROW(" & .Address & ")>1,INDEX(UPPER(" & .Address & "),)," & .Address & ")")
End With
End Sub
这将从B1
开始工作,但在IF
语句中通过ROW
测试将使该单元格保持完整
另一个小提示是,我肯定会使用一个明确的单元格引用(至少包括一个工作表)问题是
索引
。函数返回范围
或数组
中的位置,而不是单个值。如果你对公式进行评估,可以归结为:
=INDEX("VALUE",)
而不是正确的:
=INDEX({"VALUE1","VALUE2"},)
不向索引
提供范围或数组将返回错误
要更正代码,您需要确保始终存在大于一个单元格的范围对象,例如:
Sub CapitalLettersColumnB()
With Range("B1", Cells(Rows.Count, "B").End(xlUp))
.Value = Evaluate("IF(ROW(" & .Address & ")>1,INDEX(UPPER(" & .Address & "),)," & .Address & ")")
End With
End Sub
这将从B1
开始工作,但在IF
语句中通过ROW
测试将使该单元格保持完整
另一个小提示是,我肯定会使用一个明确的单元格引用(至少包括一个工作表)您的代码工作得非常好。非常感谢您的帮助。您的代码运行得非常好。非常感谢您的帮助。这段代码也非常有效。有点奢侈这一点,我收到了两个对我的要求的答复,他们都解决了我的问题!非常感谢您的帮助。这段代码也非常有效。有点奢侈这一点,我收到了两个对我的要求的答复,他们都解决了我的问题!非常感谢你的帮助。