本文原創,轉載請註明出處:https://www.cnblogs.com/wotent/p/15348891.html

TLDR

下載檔案 高亮.zip ,將解壓後的“高亮.xlam”儲存在 C:\Users\使用者名稱\AppData\Roaming\Microsoft\AddIns 中。

按照本文最後的步驟5和步驟6設定即可。

介紹

在 Excel 的日常操作中,經常需要用到高亮當前行或當前列的功能,如 WPS 的“閱讀模式”和易用寶的“聚光燈”功能。

但無論 WPS 還是 易用寶,都缺少我自己需要的另外一個功能:高亮重複值。

我需要的“高亮重複值”功能,並不是條件格式中的“重複值”,而是高亮顯示與活動單元格具有相同值的單元格。

第一階:高亮當前行(條件格式)

此方法用到的公式:

=ROW()=CELL("row")

此方法網路上有很多教程,簡述如下:

  1. 選擇全部單元格
  2. “開始” => “條件格式” => “管理規則”
  3. 新建規則
  4. 使用公式確定要設定格式的單元格
  5. 填入上述公式
  6. 點選“格式按鈕” => “填充”選項卡,選擇喜歡的高亮當前行的顏色
  7. 一路確定

這便用條件格式實現了高亮當前行的功能。

但是,此時的高亮不會隨著活動單元格的改變自動重新整理,按 F9(重新計算) 可手動重新整理高亮行的位置。

第二階:新增高亮重複值的功能

此方法用到的公式:

=IF(CELL("type") = "b",FALSE,CELL("contents")=CELL("contents", INDIRECT(ADDRESS(ROW(), COLUMN()))))

受高亮當前行方式的啟發,找到了高亮重複值的方法:

再新增一項條件格式,填入上述公式,將兩條規則的關係按下圖設定,並注意兩點:

  1. 高亮重複值的規則在上,高亮當前行的規則在下
  2. “如果為真則停止”全部勾選

第三階:VBA 實現自動重新整理

此方法從網路獲得,具體連結現在搜尋不到了。

  1. 右鍵單擊底部的工作表名稱,選擇“檢視程式碼”命令
  2. 在程式碼框輸入以下程式碼並退出 VBA 編輯器
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = True
End Sub

這便實現了高亮行的自動重新整理,高亮行始終顯示在活動單元格的那一行上,不用再手動點選 F9 了。

但是,添加了 VBA 程式碼後,不能儲存為 xlsx,需要儲存為 xlsm。

我按照上述的方法制作了一個空的 excel 檔案,在此後的相當長一段時間內,我都複製這個“模板”來處理 Excel 文件。

第四階:

第三階的方法,使用了很長時間,但有兩個很致使的問題:一是將檔案發給他人的時候,會帶著 VBA 程式碼和條件格式,以 xlsm 的格式發出去,造成他人的不便;二是處理普通 Excel 檔案時,不能很方便的應用高亮功能(需要手動新增條件格式和 VBA 程式碼)。

前幾天看到一篇文章(Excel 高亮顯示選擇行列【不影響格式】https://club.excelhome.net/thread-1372036-1-1.html),受其中註冊事件用法的啟發,決定將 VBA 程式碼做成共享的,使 Excel 啟動時自動載入,並用 VBA 實現新增條件格式,這樣,對於任何 Excel 檔案,只需點幾下按鈕即可實現高亮功能,且儲存後的檔案不帶有任何 VBA 程式碼。

步驟1:

開啟 Excel 程式,直接另存為 高亮.xlam 檔案,儲存至 C:\Users\使用者名稱\AppData\Roaming\Microsoft\AddIns 資料夾中。

步驟2:

開啟此 高亮.xlam 檔案,點選“開發工具”選項卡中的“Visual Basic”開啟“Microsoft Visual Basic for Applications”。(沒有“開發工具”選項卡的自行搜尋新增“開發工具”選項卡的方法)

步驟3:

選單“插入” => “模組”

在對應的程式碼視窗輸入以下程式碼:

 1 Option Explicit
2 Public HL
3 Sub 自動重新整理開啟()
4 Set HL = New SheetSelectionChangeHandler
5 Set HL.handler = Application
6 End Sub
7
8 Sub 自動重新整理關閉()
9 HL = Null
10 End Sub
11 Sub 條件格式高亮新增()
12 Dim selectedRange As Range
13 Set selectedRange = Selection
14
15 Cells.Select
16 Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=ROW()=CELL(""row"")"
17 Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
18 With Selection.FormatConditions(1).Interior
19 .Color = RGB(146, 205, 220)
20 End With
21 Selection.FormatConditions(1).StopIfTrue = True
22
23 Cells.Select
24 Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=IF(CELL(""type"") = ""b"",FALSE,CELL(""contents"")=CELL(""contents"", INDIRECT(ADDRESS(ROW(), COLUMN()))))"
25 Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
26 With Selection.FormatConditions(1).Interior
27 .Color = RGB(0, 176, 90)
28 End With
29 Selection.FormatConditions(1).StopIfTrue = True
30 selectedRange.Select
31 End Sub

步驟4:

選單“插入” => “類模組”

在屬性視窗(如沒有,按 F4 開啟屬性視窗)中將類模組名稱改為SheetSelectionChangeHandler

在對應的程式碼視窗中輸入以下程式碼:

1 Option Explicit
2
3 Public WithEvents handler As Application
4
5 Private Sub handler_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
6 Application.ScreenUpdating = True
7 End Sub

一定要在“Microsoft Visual Basic for Applications”視窗中點選儲存按鈕,如果直接關掉該視窗,預設是不儲存的。

步驟5:

開啟“檔案” => “選項” => “自定義功能區”,“從下列位置選擇命令”設定為“巨集”,設定為如下圖所示結構:

大功造成,現在,可以在“我的工具”選項卡中,點選“條件格式高亮新增”按鈕來新增高亮相關的條件格式,點選“自動重新整理開啟按鈕”使高亮區域根據活動單元格自動重新整理。

步驟6:

點選“開發工具”選項卡的“Excel 載入項”命令,選中“高亮”(高亮.xlam的名稱)並點選確定,這樣,就不會每次都出現“啟用巨集”的提示了。