将整个范围转换为小写而不循环遍历单元格间接
Convert entire range to lowercase without looping through cells Indirect
我正在查看 VBA 代码,该代码采用整个单元格范围并将它们转换为小写。我发现了以下内容:
[A1:A20] = [index(lower(A1:A20),)]
这在固定范围内工作正常(不完全理解语法,但发现以下 post:)
Post detailing code above
我的问题是:
我希望能够在处理不断变化的范围大小时动态设置范围。但是,以下内容不起作用,我似乎无法在 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 电池进行测试。
我正在查看 VBA 代码,该代码采用整个单元格范围并将它们转换为小写。我发现了以下内容:
[A1:A20] = [index(lower(A1:A20),)]
这在固定范围内工作正常(不完全理解语法,但发现以下 post:)
Post detailing code above
我的问题是:
我希望能够在处理不断变化的范围大小时动态设置范围。但是,以下内容不起作用,我似乎无法在 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 电池进行测试。