VBA:基于无循环的相邻单元编辑单元值
目前,我有一个代码,如果同一行的不同列中的单元格不是空的,则在单元格中放置一个x。大概是这样的:VBA:基于无循环的相邻单元编辑单元值,vba,excel,performance,Vba,Excel,Performance,目前,我有一个代码,如果同一行的不同列中的单元格不是空的,则在单元格中放置一个x。大概是这样的: for i = 2 to lLastRow if Cells(i,1) <> "" then cells(i,2) = "x" next i i=2至lLastRow的 如果单元格(i,1)”,则单元格(i,2)=“x” 接下来我 但我有一个例子,我的数据集有上万行,而这个循环占用了很多时间。有没有一种不循环的方法可以做到这一点?试一试…………它不需要循环: Sub Kill
for i = 2 to lLastRow
if Cells(i,1) <> "" then cells(i,2) = "x"
next i
i=2至lLastRow的
如果单元格(i,1)”,则单元格(i,2)=“x”
接下来我
但我有一个例子,我的数据集有上万行,而这个循环占用了很多时间。有没有一种不循环的方法可以做到这一点?试一试…………它不需要循环:
Sub Killer_V2()
Dim rng2 As Range, rng As Range
Dim N As Long, s As String
Dim critCol As String, helpCol As String
critCol = "A"
helpCol = "B"
N = Cells(Rows.Count, critCol).End(xlUp).Row
Set rng = Range(Cells(1, critCol), Cells(N, critCol))
s = "=IF(" & rng.Address & "<>"""",""x"","""")"
Set rng2 = Range(Cells(1, helpCol), Cells(N, helpCol))
rng2.Value = Evaluate(s)
End Sub
Sub Killer_V2()
变暗rng2作为范围,rng作为范围
尺寸N和长度一样,s和字符串一样
Dim critCol作为字符串,helpCol作为字符串
critCol=“A”
helpCol=“B”
N=单元格(Rows.Count,critCol).End(xlUp).Row
设置rng=范围(单元格(1,critCol),单元格(N,critCol))
s=“=如果(&rng.Address&>,“x”)
设置rng2=范围(单元格(1,helpCol),单元格(N,helpCol))
rng2.值=评估
端接头
使用自动筛选
阵列方法最有可能提供最快的解决方案:
Option Explicit
Sub main()
Dim i As Long
Dim vals As Variant
With Range("A2", Cells(Rows.Count, 1).End(xlUp))
vals = .Value
For i = 1 To UBound(vals)
If Not IsEmpty(vals(i, 1)) Then vals(i, 1) = "x"
Next
.Offset(, 1).Value = vals
End With
End Sub
而无回路解决方案可以是:
Range("A2", Cells(lLastRow,1)).SpecialCells(xlCellTypeConstants).Offset(,1) = "x"
虽然很可能是慢的有很多好的答案,但这一个对我来说是最简单/最快的。我做的一个更改是为输出列创建第二个变量。该列中已经有数据,当我尝试按原样实现此代码时,输出中的数据被输入中的数据覆盖。因此for循环中的条件变为:
如果不是isempty(vals(i,1),那么outputVals(i,1)=“x”
供其他人参考,工作超过35000行,此操作花费了我约0.75秒。
Option Explicit
Sub main()
Dim i As Long
Dim vals As Variant
With Range("A2", Cells(Rows.Count, 1).End(xlUp))
vals = .Value
For i = 1 To UBound(vals)
If Not IsEmpty(vals(i, 1)) Then vals(i, 1) = "x"
Next
.Offset(, 1).Value = vals
End With
End Sub
Range("A2", Cells(lLastRow,1)).SpecialCells(xlCellTypeConstants).Offset(,1) = "x"