我正在查看VBA代码,它接受整个范围的单元格并将它们转换为小写。我找到了以下内容:
[A1:A20] = [index(lower(A1:A20),)]
这适用于固定范围(不完全理解语法,但发现以下帖子:)
我的问题是:
我希望能够动态设置范围,因为我正在处理不断变化的范围大小。但是,以下操作无效,我似乎无法在VBA中使用INDIRECT()。
Range("A1:A" & n) = [index(lower(Range("A1:A" & n)),)]
有没有办法让这项工作? 我真的想避免使用for循环,因为我怀疑这应该快得多..
答案 0 :(得分:10)
试试这个:
Range("A1:A" & n) = Application.Evaluate("index(lower(A1:A" & n & "),)")
答案 1 :(得分:7)
循环浏览工作表的单元格会降低速度。获取所有单元格数据,在内存中处理它,然后将结果转储回工作表。
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细胞。