将整个范围转换为小写,而不通过单元格间接循环
我正在寻找VBA代码,它将整个单元格范围并将其转换为小写字母。 我发现以下内容:
[A1:A20] = [index(lower(A1:A20),)]
这对一个固定的范围工作正常(不完全理解语法,但发现以下post:)
详细介绍上面的代码
我的问题是这样的:
我希望能够dynamic设置范围,因为我正在处理更改范围大小。 但是,以下不起作用,我似乎无法在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秒内testing50K细胞,在6.78秒内testing1M个细胞。