Board logo

標題: [發問] (已解決)可以針對格式化條件的顏色做判斷嗎? [打印本頁]

作者: freeffly    時間: 2011-5-5 17:57     標題: (已解決)可以針對格式化條件的顏色做判斷嗎?

本帖最後由 freeffly 於 2012-2-22 17:03 編輯

我想對格式化條件下的儲存格去做判斷
對於沒由格式化上顏色的列隱藏
本來我想用下面的程式碼處理
發現格式化的部份不符合
請各位大大幫我看一下要怎麼改
我的寫法可能也不是很正確請幫忙修正




Sub 隱藏行列()
    Application.ScreenUpdating = False
    For i = 5 To Range("B65536").End(xlUp).Row
    Do While Cells(i, 2).Interior.ColorIndex = xlNone
    Cells(i, 2).EntireRow.Hidden = True
    i = i + 1
    Loop
    Next
End Sub
作者: Hsieh    時間: 2011-5-5 18:01

要以其格式化條件的運算式判斷
作者: freeffly    時間: 2011-5-6 12:36

回復 2# Hsieh
       請問如果我的條件是這樣 我應該如何寫才能達到我要的結果?

     Columns("B:B").Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=VLOOKUP($B1,$M$548:$M$556,1,0)=$B1"
    With Selection.FormatConditions(1).Font
        .Bold = False
        .Italic = False
        .ColorIndex = 4
    End With
    Selection.FormatConditions(1).Interior.Pattern = xlNone
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=FIND(""高雄"",$B1,1)"
    With Selection.FormatConditions(2).Font
        .Bold = True
        .Italic = False
    End With
    Selection.FormatConditions(2).Interior.Pattern = xlNone
作者: Hsieh    時間: 2011-5-6 23:17

回復 3# freeffly
格式化條件不要這樣下公式,這樣得到錯誤值時,雖然格式化條件會視為不成立條件
但實際上它不是傳回邏輯值,會造成處理上的困擾
修改一下公式,如圖
[attach]6021[/attach]
  1. Sub yy()
  2. Dim A As Range
  3. For Each A In Range("B:B").SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeAllFormatConditions)
  4.    A.Select
  5.    k = 0
  6.    For Each c In A.FormatConditions
  7.       s = c.Formula1
  8.    If Application.Evaluate(s) = True Then k = k + 1
  9.    Next
  10.    If k = 0 Then A.EntireRow.Hidden = True
  11. Next
  12. End Sub
複製代碼

作者: GBKEE    時間: 2011-5-7 08:34

本帖最後由 GBKEE 於 2011-5-7 08:37 編輯

格式化條件有   公式  及  儲存格的值 兩種
  1. Sub Ex()
  2. Dim A As Range, k%, C As Object, F%(1)
  3. For Each A In Range("b:b").SpecialCells(xlCellTypeConstants).SpecialCells(xlCellTypeAllFormatConditions)
  4.    k = 0
  5.    A.Select
  6.    For Each C In A.FormatConditions
  7.         If C.Type = 1 Then   '格式化條件 1儲存格的值
  8.             F(0) = C.Formula1
  9.             Select Case C.Operator
  10.                 Case 1  '>= AND <=
  11.                     F(1) = C.Formula2
  12.                     If A.Value >= F(0) And A.Value <= F(1) Then k = 1
  13.                 Case 2  '< or >
  14.                     F(1) = C.Formula2
  15.                     If A.Value < F(0) Or A.Value > F(1) Then k = 1
  16.                 Case 3  '=
  17.                     If A.Value = F(0) Then k = 1
  18.                 Case 4  '<>
  19.                     If A.Value <> F(0) Then k = 1
  20.                 Case 5  '>
  21.                     If A.Value > F(0) Then k = 1
  22.                 Case 6  '<
  23.                     If A.Value < F(0) Then k = 1
  24.                 Case 7  '>=
  25.                     If A.Value >= F(0) Then k = 1
  26.                 Case 8  '<=
  27.                     If A.Value <= F(0) Then k = 1
  28.             End Select
  29.         Else    '格式化條件 公式
  30.             If Application.Evaluate(C.Formula1) = True Then k = 1
  31.         End If
  32.    Next
  33.    If k = 0 Then A.EntireRow.Hidden = True
  34. Next
  35. End Sub
複製代碼

作者: freeffly    時間: 2011-5-8 18:18

回復 4# Hsieh


    大大確認一下
  格式化條件我裡面的公式這樣是不ok的嗎? 要改成像你那樣嗎?
作者: freeffly    時間: 2011-5-8 18:25

回復 5# GBKEE

   
大大你的方式對我目前的功力有點難理解

如果有時間可以說明一下嗎?
有些使用方是我沒看過

k%  F%(1)  作用?  ()裡面有什麼妙處嗎?
後面case裡面我已經亂掉了
作者: GBKEE    時間: 2011-5-8 20:51

本帖最後由 GBKEE 於 2011-5-8 20:54 編輯

回復 7# freeffly
k%  F%(1)  作用?  ()裡面有什麼妙處嗎?
Dim  k% -> k As Integer                  '宣告 變數 k 為 Integer 資料型態 宣告字元是百分比符號(%)。
Dim F%(1)-> F(0 To 1) As Integer    '宣告 變數  F 是(一維陣列,為 0 到 1個元素),    為 Integer 資料型態

For Each C In A.FormatConditions   A.儲存格的格式化條件 (最多可以有三個) ,C 為依序所設的 1-3 的條件
圖解
[attach]6062[/attach]

[attach]6063[/attach]

[attach]6064[/attach]

Select Case C.Operator -> 依C.Operator 的運算子 來執行程式碼
可察看 VBA 的說明
作者: Hsieh    時間: 2011-5-8 22:27

回復 6# freeffly

你的公式在格式化條件中可以達到你的目的沒錯
不過,你的公式在條件不成立的情形下
該公式傳回值不一定是FLASE,有可能是錯誤值
當然錯誤值他不是TRUE所以儲存格不會變色
但是,這個公式在VBA中利用Evaluate方法來求值時,由於產生錯誤值的關係,程式就會出錯
所以建議你將公式修改成確定傳回是邏輯值TRUE或FALSE
這樣就可省去用程式忽略錯誤的程序
建議公式改為
=COUNTIF($M$548:$M$556,$B1)>0
=ISNUMBER(FIND("高雄",$B1,1)
這會比我上一個回復的公式簡單
作者: freeffly    時間: 2011-5-9 12:22

回復 9# Hsieh


    謝謝大大解說
      有種豁然開朗的感覺
作者: freeffly    時間: 2011-5-9 12:26

回復 8# GBKEE


    我在研究一下目前看還有點沒那麼清楚
      謝謝 大大解說




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