因欄位中的每格儲存格都要設定條件規則,所以用for迴圈跑,但若是10行還可以,400行時間就開始拉長,5000行就…,請問有什麼方式可以讓它不要一行一行的設定條件規則,而是一次跑完。有用application.screenupdating false不顯示更新畫面,但還是跑很慢。麻煩各位大大,謝謝!
試試看「不要select,直接設值」
以下範例的時間差是43秒和29秒
會用到選擇是因為不同段的選擇後加入規則,以上圖1及2是全部的規則,目前加上了判斷沒量產就不執行,暫時有快點,但量只要到72就又跑很慢,治標不治本。
感謝大大提供調用的例子,大概有思路,但我的規則不太一樣的選擇法,有點頭疼。
我不確定你有了解我寫的內容
我寫的只有一點不要寫 Range("xxx").Select
直接對Range設定屬性
若是單跑單一規則的話,真的挺快的,有測試過,下面這是參考Johnstudy所改良的,但還是要些運作時間,可能是因為我的規則很多格,有交替,以及自身的重複還有唯一值,所以整體下來還是得跑一段時間,因此後面我想到另一個解決方式,就是用程式跑完就不要改了,寫死,然後有覆蓋到規則的,就改版面避開被覆蓋規則而要重新跑一次規則,感謝提供思路。
chatgpt 給的答案,vba執行程式真的很慢,樓上有建議使用C#或python真的是很好的選擇
像這種程式我都直接叫chatgpt直接寫出來,還比一個一個打還來的快
當然前提是對程式的敘述及條件要說得很清楚
我建議是更改儲存格條件可以用巨集的方式,當VBA程式觸發再去執行巨集
應該可以避免用VBA去逐條執行來的快
可以將For資料存入陣列, 然後一次輸出
Sub aaa()
Dim arr() As Variant
arr = Range(Cells(3, 1), Cells(6, 10))
arr(1, 1) = 1
arr(1, 2) = 2
arr(1, 3) = 3
arr(2, 1) = 11
arr(2, 2) = 22
arr(2, 3) = 33
arr(4, 10) = 49
'一次輸出在原本的工作表
Range(Cells(3, 1), Cells(6, 10)) = arr
End Sub
VBA 用 For 迴圈的速度問題無解,所以我提供一個不需要 For 迴圈,也不用 VBA 的解法。
您的需求應該是從 F 欄 到 L 欄,如果儲存格的值在該列出現過兩次以上,格式化條件上色。
在 M 欄到 S 欄增加公式的輔助,判斷 F 欄 到 L 欄的格子是否要上色。
M1 下公式 =COUNTIF($F1:$L1,F1)
如果 M1 > 1 代表 F1 的值在 F1 到 L1 出現超過一次,需要上色。
將 M1 到 S5000 都複製貼上此公式。
接下來,設定格式化條件:使用公式決定是否套用格式
公式為 =M1>1
這裡請注意如果您是用點選 M1 儲存格的方式設定公式,必須移除 $
符號,這樣套用在其他儲存格時,才會使用相對範圍。
這個格式化條件可以一次套用到整個範圍 =$F$1:$L$5000
您可以驗證一下結果是否正確。
這個方法不算很漂亮,因為要設定多餘的公式,但應該可以達到你的的需求,速度也沒問題。