Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 是否有更好的方法,从性能角度来看,做到这一点?_Excel_Vba_Performance_Conditional Formatting - Fatal编程技术网

Excel 是否有更好的方法,从性能角度来看,做到这一点?

Excel 是否有更好的方法,从性能角度来看,做到这一点?,excel,vba,performance,conditional-formatting,Excel,Vba,Performance,Conditional Formatting,是否有一种更快的条件格式单元格引用方法 代码示例: For Each cell In irow For i = 1 To arr_size If cell > start(i) - arr1(i) And start(i) > Var1 And cell <= Var2 Then cell.Interior.ColorIndex = 22 Exit For End If Next i

是否有一种更快的条件格式单元格引用方法

代码示例:

For Each cell In irow
    For i = 1 To arr_size
        If cell > start(i) - arr1(i) And start(i) > Var1 And cell <= Var2 Then
            cell.Interior.ColorIndex = 22
            Exit For
        End If
    Next i
Next cell

应该稍微快一点:

Dim v, rng As Range

For Each cell In irow
    For i = 1 To arr_size
        If start(i) > Var1 Then
            v = cell.Value
            If v > start(i) - arr1(i) Then 
                If v <= Var2 Then
                    If rng Is Nothing then
                        Set rng = cell
                    Else
                        Set rng = aplication.union(rng, cell)
                    End If
                    Exit For
                End If
            End If
        End If
    Next i
Next cell

If Not rng Is Nothing then rng.Interior.ColorIndex = 22

这特别慢吗?需要多长时间?超过多少个单元和多大的阵列?“你要关闭屏幕更新吗?”Tim Williams问得好,如果条件满足,它将在160个单元上运行两次,阵列的大小将小到25个。问题是我必须一次运行多达40个这样的宏。是的,我正在关闭所有这些…我唯一能想到的是如何加快速度,将所有需要颜色的细胞加入到一个数组中,并在循环结束时立即在该数组上进行cokouring。通常情况下,与单元格的交互占用的时间最多,因此将其从40减少到1可能会节省一些时间。也可以尝试嵌套if测试,而不是使用And。这样他们会在第一个错误上停止,如果你像那样给一个连续的块上色,你可以试着记下开始和结束单元格,然后一次给块上色。这似乎有点复杂,虽然有点改进,但你能详细说明一下“一次给块上色”的解决方案吗,因为我有连续的单元格上色。另外,我希望我能提供更多的代码,但这里的格式限制了我们,谢谢你提供的信息,你只会看到轻微的改进。我所说的一次着色不是指一个细胞一个细胞的着色:我已经在上面做了调整,所以我不确定你能在这个方向上走多远。也许你可以做一些小的改变,但是如果没有剩下的代码和更多的上下文信息,你很难提出建议。我几乎按照你的公式重写了代码,它真的很有效,任何改进都会很好,但这确实是显而易见的!在excel 2016上,它现在几乎可以正常工作。仅仅说声谢谢是不够的!