我已经在这几天了。我尝试了从将公式串联到使用FormulaR1C1并进行评估的所有内容。
我有接近35000 +行的数据,并希望限制计算所需的时间以及过滤颜色等所需的时间。(条件格式化)
我希望有一个代码可以让我“更新(按钮)”并只填充结果而不是所有行的公式。
请参阅我的excel公式:
=IF(D2>0,1,0)+IF(E2>0,1,0)+IF(F2>0,1,0)+IF(G2>0,1,0)
=IF(SUMIF(B:B,B2,D:D)>0,1,0)+IF(SUMIF(B:B,B2,E:E)>0,1,0)+IF(SUMIF(B:B,B2,F:F)>0,1,0)+IF(SUMIF(B:B,B2,G:G)>0,1,0)+IF(SUMIF(B:B,B2,H:H)>0,1,0)
=IF(B2=B1,C2-C1,0)
我尝试了以下内容 -
Sub COLUMNS2stringg()
Dim strFormulas(1 To 3) As Variant
With ThisWorkbook.Sheets("working")
strFormulas(1) = "=IF(RC[-5]>0,1,0)+IF(RC[-4]>0,1,0)+IF(RC[-3]>0,1,0)+IF(RC[-2]>0,1,0)"
strFormulas(2) = "=IF(SUMIF(C[-8],RC[-8],C[-6])>0,1,0)+IF(SUMIF(C[-8],RC[-8],C[-5])>0,1,0)+IF(SUMIF(C[-8],RC[-8],C[-4])>0,1,0)+IF(SUMIF(C[-8],RC[-8],C[-3])>0,1,0)+IF(SUMIF(C[-8],RC[-8],C[-2])>0,1,0)"
strFormulas(3) = "=IF(RC[-9]=R[-1]C[-9],RC[-8]-R[-1]C[-8],0)"
.Range("i3:k3").Formula = strFormulas
.Range("i3:k35000").FillDown
End With
End Sub
我也尝试了以下内容 -
Sub COLUMNS2()
Range("I3").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-5]>0,1,0)+IF(RC[-4]>0,1,0)+IF(RC[-3]>0,1,0)+IF(RC[-2]>0,1,0)"
Range("i3:i35000" & lrow).FillDown
Range("J3").Select
ActiveCell.FormulaR1C1 = "=IF(SUMIF(C[-8],RC[-8],C[-6])>0,1,0)+IF(SUMIF(C[-8],RC[-8],C[-5])>0,1,0)+IF(SUMIF(C[-8],RC[-8],C[-4])>0,1,0)+IF(SUMIF(C[-8],RC[-8],C[-3])>0,1,0)+IF(SUMIF(C[-8],RC[-8],C[-2])>0,1,0)"
Range("j3:j35000" & lrow).FillDown
Range("K3").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-9]=R[-1]C[-9],RC[-8]-R[-1]C[-8],0)"
Range("k3:k35000" & lrow).FillDown
End Sub
我也试过了 -
Sub overit2()
Dim strFormulas(1 To 3) As Variant
With ThisWorkbook.Sheets("working")
strFormulas(1) = "=IF("$D3">0,1,0)+IF("$E3">0,1,0)+IF($F3>0,1,0)+IF($G3>0,1,0)"
strFormulas(2) = "=IF(SUMIF(B:B,$B3,D:D)>0,1,0)+IF(SUMIF(B:B,$B3,E:E)>0,1,0)+IF(SUMIF(B:B,$B3,F:F)>0,1,0)+IF(SUMIF(B:B,$B3,G:G)>0,1,0)+IF(SUMIF(B:B,$B3,H:H)>0,1,0)"
strFormulas(3) = "=IF($B3=$B2,$C3-$C2,0)"
.Range("j3").Formula = strFormulas(1)
.Range("j3:j35000" & lrow).FillDown
.Range("k3").Formula = strFormulas(2)
.Range("k3:k35000" & lrow).FillDown
.Range("l3").Formula = strFormulas(3)
.Range("l3:l35000" & lrow).FillDown
End With
End Sub
我哪里错了?我尝试过各种变化:(请帮助
答案 0 :(得分:0)
所以问题是它非常慢,你需要让它更快地工作吗?
35000行并不多。大多数这些应用公式的方法都不应该太慢,但这里有一些技巧我可以在不知道任何关于你的excel文件的情况下给出。
1)使用这些来减少计算时间
Application.Calculation = xlManual 'In the beginning of the code
Application.Calculation = xlAutomatic 'In the end of the code
每次进行微小修改时都不会计算所有公式,只会计算一次
2)确保您的文件大小尽可能小。看看你的滚动条很小,它滚动到500000行/列,但你不会有超过35000的数据然后excel创建了很多空白行占用空间。删除它们并保存文件,滚动条应该更大
3)改进公式。例如,当你执行B:B时,你所拥有的第二个公式是查看B的所有行,这是大约一百万行,而你的数据只有35,000行!使用B1:B35000代替。事实上,我认为应该有更好的方法来编写第二个公式。也许获得B2的所有不同值,可能是100行,然后在计算标志后,仅使用B2执行35000行的VLOOKUP
4)如果您还有其他VBA代码,请添加
Application.ScreenUpdating = False 'in the beginning of the code
Application.ScreenUpdating = False 'In the end of the code