簡體   English   中英

整個行具有多個公式的Excel條件格式

[英]Excel conditional formatting for the entire row with more than one formula

經過3個小時的搜索,我仍然找不到答案,這是我想要做的事情:

我正在嘗試用綠色填充任何包含WBS的行,用紅色填充任何包含ACT的行,以及藍色任何包含EPR的行。 它適用於第一個公式,然后當我嘗試添加第二個公式時,所有事情都弄糟了。

我了解的是,您需要在一行中搜索一個關鍵字,如果在該行的任何單元格中找到它,然后為其上色。

也許我們可以使用條件格式來做到這一點,但我有另一個想法。 我們可以在Excel VBA中創建一個簡單的搜索功能。 像這樣:

= search_row(A1:F1,“ EPR”)

如果在指定行的任何單元格中找到EPR,該函數將返回1。 現在,如果您在數據列的末尾創建兩個不同的列,請首先使用WPS命名,然后使用EPR命名,然后在其中寫入此函數。 喜歡

G1 = search_row(A1:F1,“ WPS”)

H1 = search_row(A1:F1,“ EPR”)

拖到結束。 現在對列進行排序。 WPS首先從高到低。 然后在單個選擇中為所有具有1的行上色。 類似地,對EPR(H1)列執行相同的操作。

要使用此功能,您可以從以下URL下載宏文件:

http://asimishaq.com/myfiles/SearchHighlight.xlsm

現在要首先運行它,然后啟用宏,然后重新打開數據文件,然后打開此宏文件。 只要打開此宏文件,就可以使用此功能。 如果您要自己創建宏,則下面是VBA代碼:

Function search_row(sRow As Range, Keyword As String)
    Dim i As Integer
    Dim Found As Integer

    For i = 1 To sRow.Columns.Count
        If InStr(1, LCase(sRow.Cells(1, i)), LCase(Keyword)) > 0 Then
          search_row = 1
        End If
    Next
End Function

我試着制作一個類似於asim-ishaq的函數來確定您的搜索詞是否存在於行中,以供您娛樂:)然后嘗試將其應用於突出顯示的行,結果我不知道如何很好地使用條件格式! 最后弄清楚了,希望我已經解釋得足夠好了。

這樣一來,您必須在數據末尾增加一(一)列才能包含結果。

通過將函數放入條件格式中,可能不需要多余的列,但是我無法使其正常工作(並沒有非常努力)。 這並不是很大的損失,因為如果公式在工作簿上進行編輯,則要簡單得多,而不是必須經過每個條件規則來對其進行編輯(如果將來需要對其進行編輯)。

要使格式生效,您需要創建一些規則(每個關鍵字一個)

3個關鍵字的格式示例

您要創建以下所示類型的規則,在公式框中,您需要遵循以下內容: =INDIRECT("D" & ROW())=0 ,其中D是包含以下函數結果的列,並且0是要突出顯示的關鍵字的索引。

在我的示例中,“ D列”中的公式為: =SearchRow(An:Cn,"ABS","KBS","JBS") (其中n是公式所在的行)

根據需要設置格式,然后按OK,當您返回到規則管理器時,您將需要更新“ Applies to值,該值應覆蓋所有要突出顯示的數據。 在我的示例中為$A$1:$C$3

要添加的規則類型

我下面的函數需要2個以上的參數,第一個是要搜索的范圍。 第二個(及其后的任何一個)是搜索詞。

該函數將返回一個數字。 -1(表示不匹配),0 +(表示找到的搜索詞)。 該數字取決於參數中的位置。

A1 = "ABS"
B1 = "SBA"

A2 = "SBA"
B2 = "ABS"

A3 = ""
B3 = ""

C1 = "=SearchRow(A1:B1, "ABS", "SBA")"
C2 = "=SearchRow(A2:B2, "ABS", "SBA")"
C3 = "=SearchRow(A3:B3, "ABS", "SBA")"

C1 > 0
C2 > 1
C3 > -1

該函數將始終返回第一個結果,從左到右搜索,依次比較每個單元格和“關鍵字”。 在我的示例中,如果一個單元格包含“ SBA ABS”,則結果將為0(對於ABS)。 我猜您的單元格可能只包含一個關鍵字,所以這應該不是問題嗎?

Public Function SearchRow(ByVal Row As Range, ParamArray Keyword() As Variant) As Integer
Dim Column As Integer
Dim Value As String
Dim Index As Integer
Dim Result As Integer
For Column = 1 To Row.Columns.Count
    Value = LCase(Row.Cells(1, Column))
    Result = -1
    For Index = LBound(Keyword) To UBound(Keyword)
        If InStr(1, Value, LCase(Keyword(Index))) > 0 Then
            Result = Index
            Exit For
        End If
    Next Index
    If Result > -1 Then
        Exit For
    End If
Next Column
SearchRow = Result
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM