Vba 将整个范围转换为小写,而不在单元格中循环
我正在研究VBA代码,它接受整个范围的单元格并将它们转换为小写。我发现:Vba 将整个范围转换为小写,而不在单元格中循环,vba,excel,range,lowercase,Vba,Excel,Range,Lowercase,我正在研究VBA代码,它接受整个范围的单元格并将它们转换为小写。我发现: [A1:A20] = [index(lower(A1:A20),)] 这在固定范围内可以正常工作(不完全理解语法,但发现以下帖子:) 我的问题是: 我希望能够设置动态范围,因为我正在处理不断变化的范围大小。但是,下面的方法不起作用,我似乎也不能在VBA中使用INDIRECT() Range("A1:A" & n) = [index(lower(Range("A1:A" & n)),)] 有没有办法让这
[A1:A20] = [index(lower(A1:A20),)]
这在固定范围内可以正常工作(不完全理解语法,但发现以下帖子:)
我的问题是:
我希望能够设置动态范围,因为我正在处理不断变化的范围大小。但是,下面的方法不起作用,我似乎也不能在VBA中使用INDIRECT()
Range("A1:A" & n) = [index(lower(Range("A1:A" & n)),)]
有没有办法让这一切顺利进行?
我真的希望避免使用for循环,因为我认为这应该快得多。试试这个:
Range("A1:A" & n) = Application.Evaluate("index(lower(A1:A" & n & "),)")
在工作表的单元格中循环将减慢速度。获取所有单元格数据,在内存中进行处理,然后将结果转储回工作表
Sub makeLower()
Dim v As Long, vLWRs As Variant
With Worksheets("Sheet1")
With .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))
vLWRs = .Value2
For v = LBound(vLWRs, 1) To UBound(vLWRs, 1)
vLWRs(v, 1) = LCase(vLWRs(v, 1))
Next v
.Cells = vLWRs
End With
End With
End Sub
0.3秒在50K电池上测试,6.78秒在1M电池上测试。在
&
和n
之间留一个空格,如下所示:范围(“A1:a”&n)
VBA自动以正确的方式格式化它-我再次尝试使用空格以防万一,但问题相同。我的工作表中出现了#值错误。这是基于问题的正确答案-方括号是VBA中Evaluate
的简写符号,但只取字符串文字,然而,Evaluate
将接受一个连接的字符串。有很多关于和函数的玩笑,这些函数实际上与VBA的和函数并行。没有提到的是,VBA与工作表的本机函数没有等价物,这是一个很好的应用实例。