Board logo

標題: [發問] 指定2列或3列的同欄同時都有數字時,則標示底色的語法 [打印本頁]

作者: ziv976688    時間: 2019-4-5 03:47     標題: 指定2列或3列的同欄同時都有數字時,則標示底色的語法

[attach]30346[/attach]
(最後有數字的列 - 2)和(最後有數字的列 - 3)的二列之同欄都<>""時,則標示淡紫底色。

(最後有數字的列 - 2)和(最後有數字的列 - 3)和(最後有數字的列 - 4)的三列之同欄都<>""時,則標示玫瑰紅底色。

請問︰VBA語法要如何編寫?
謝謝幫忙!
測試檔︰
[attach]30347[/attach]
作者: 准提部林    時間: 2019-4-5 13:41

本帖最後由 准提部林 於 2019-4-6 10:31 編輯

Sub 標示底色()
Dim r&, c&, k%, Km, xE As Range
r = [a1].End(xlDown).Row
c = [a1].End(xlToRight).Column
Km = Array("", 40, 39, 38)
Range([B2], Cells(r, c)).Interior.ColorIndex = 0
For i = 2 To c
    k = 0: Set xE = Cells(r, i)
For j = r To r - 2 Step -1
    If Cells(j, i) = "" Then Exit For Else k = k + 1
Next
    If k > 0 Then xE(-k + 2).Resize(k).Interior.ColorIndex = Km(k)
Next
End Sub
作者: hcm19522    時間: 2019-4-5 16:23

https://blog.xuite.net/hcm19522/twblog/587262551
作者: ziv976688    時間: 2019-4-5 20:30

回復 2# 准提部林

感謝版主的幫忙。
問題解決了!感恩!
作者: ziv976688    時間: 2019-4-5 20:31

回復 3# hcm19522


    h大大:
謝謝您的函數解~感恩!
作者: 准提部林    時間: 2019-4-6 10:33

回復 4# ziv976688

昨天匆匆做, 未再審察, 修正一下:
For j = r To r - 3 Step -1  >>> 3 改成 2 才對
作者: ziv976688    時間: 2019-4-7 00:18

回復 6# 准提部林
版主:您好!
For j = r To r - 3 Step -1
測試過近100個範例,答案都正確,所以沒有發現錯誤^^"

For j = r To r - 2 Step -1
感謝您的修正^^
作者: ziv976688    時間: 2019-4-7 16:12

本帖最後由 ziv976688 於 2019-4-7 16:14 編輯

回復 6# 准提部林

版主大大:您好!
結論出來了~
For j = r To r - 3 Step -1
當最後4期都有數字時,就會有Bug了~產生偵錯。

For j = r To r - 2 Step -1
當最後4期都有數字時,會如需求將最後3期的數字標示指定的底色。

謝謝您的耐心指導和幫忙!感恩
作者: ziv976688    時間: 2019-4-16 09:12

本帖最後由 ziv976688 於 2019-4-16 09:16 編輯

回復 6# 准提部林
[attach]30407[/attach]
不好意思,因為工作表的列數不盡相同,所以程式執行後,有產生一些Bug(詳如圖片)。
敬請您賜正!謝謝您!
T_1[attach]30408[/attach]      
T_2[attach]30409[/attach]      
T_3[attach]30410[/attach]      
[attach]30411[/attach]
作者: 准提部林    時間: 2019-4-19 12:45

回復 9# ziv976688

Sub 標示底色()
Dim r&, c&, k%, Km, U&, xE As Range
If IsDate([A2]) = False Then Exit Sub
r = [A1].End(xlDown).Row
c = [A1].End(xlToRight).Column
Km = Array("", 40, 39, 38)
Range([B2], Cells(r, c)).Interior.ColorIndex = 0
U = r - 2: If U > 2 Then U = 2
For i = 2 To c
    k = 0: Set xE = Cells(r, i)
For j = r To r - U Step -1
    If Cells(j, i) = "" Then Exit For Else k = k + 1
Next
    If k > 0 Then xE(-k + 2).Resize(k).Interior.ColorIndex = Km(k)
Next
End Sub
作者: ziv976688    時間: 2019-4-19 15:19

回復 10# 准提部林
准提版大:
Bug已完全消除了。
謝謝您的幫忙!感恩!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)