坐標選擇

你有一個大顯示器,但你使用的桌子更大。 而且,在屏幕上尋找必要的信息時,總是有機會“滑”到下一行並看向錯誤的方向。 我什至認識一些人,在這種情況下,他們總是在他們身邊放一把木尺,以將其連接到顯示器上的線路上。 未來的技術! 

如果活動單元格在工作表上移動時突出顯示當前行和列? 一種像這樣的坐標選擇:

比尺子好,對吧?

有幾種不同複雜度的方法來實現這一點。 每種方法都有其優點和缺點。 讓我們詳細看看它們。

方法1.顯而易見。 突出顯示當前行和列的宏

解決“前額”問題的最明顯方法——我們需要一個宏來跟踪工作表上選擇的變化,並為當前單元格選擇整行和整列。 如果需要,還希望能夠啟用和禁用此功能,以便這樣的十字形選擇不會阻止我們輸入例如公式,而僅在我們查看列表以搜索必要的內容時才起作用信息。 這將我們帶到需要添加到工作表模塊的三個宏(選擇、啟用和禁用)。

打開一個包含要在其中獲得此類坐標選擇的表格的工作表。 右鍵單擊工作表選項卡並從上下文菜單中選擇命令 源文字 (源代碼)。Visual Basic 編輯器窗口應打開。 將這三個宏的文本複製到其中:

Dim Coord_Selection As Boolean '用於選擇開/關的全局變量 Sub Selection_On() '宏選擇 Coord_Selection = True End Sub Selection_Off() '宏關選擇 Coord_Selection = False End Sub '執行選擇的主程序 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim WorkRange As Range If Target.Cells.Count > 1 Then Exit Sub '如果選擇了超過 1 個單元格,則退出 If Coord_Selection = False Then Exit Sub '如果選擇關閉,則退出 Application.ScreenUpdating = False Set WorkRange = Range ("A6:N300") '選擇可見的工作範圍的地址  

將工作範圍的地址更改為您自己的地址——我們的選擇將在此範圍內起作用。 然後關閉 Visual Basic 編輯器並返回 Excel。

按鍵盤快捷鍵 ALT + F8打開一個包含可用宏列表的窗口。 宏 選擇_開啟,正如您可能猜到的那樣,包括當前工作表上的坐標選擇,以及宏 選擇_關閉 – 將其關閉。 在同一窗口中,通過單擊按鈕 參數 (選項) 您可以為這些宏分配鍵盤快捷鍵以便於啟動。

這種方法的優點:

  • 相對容易實施
  • 選擇 - 該操作是無害的,不會以任何方式更改工作表單元格的內容或格式,一切都保持原樣

這種方法的缺點:

  • 如果工作表上有合併的單元格,則此類選擇無法正常工作 - 並集中包含的所有行和列都被立即選擇
  • 如果不小心按了 Delete 鍵,那麼不僅活動單元格會被清除,而且整個選定區域都會被清除,即從整個行和列中刪除數據

方法 2. 原創。 CELL + 條件格式化功能

這種方法雖然有一些缺點,但在我看來非常優雅。 要僅使用內置的 Excel 工具來實現某些東西,在 VBA 中進行編程的最低限度是特技飛行😉

該方法基於使用 CELL 函數,它可以提供給定單元格的許多不同信息——高度、寬度、行列數、數字格式等。該函數有兩個參數:

  • 參數的代碼字,例如“列”或“行”
  • 我們要確定此參數值的單元格的地址

訣竅是第二個參數是可選的。 如果未指定,則採用當前活動單元格。

此方法的第二個組成部分是條件格式。 這個非常有用的 Excel 功能允許您在滿足指定條件時自動設置單元格格式。 如果我們將這兩個想法合二為一,我們會得到以下算法,通過條件格式化來實現我們的坐標選擇:

  1. 我們選擇我們的表格,即將來應該在其中顯示坐標選擇的那些單元格。
  2. 在 Excel 2003 及更早版本中,打開菜單 格式——條件格式——公式 (格式——條件格式——公式). 在 Excel 2007 及更高版本中 - 單擊選項卡 首頁 (家)按鍵 條件格式 - 創建規則 (條件格式 - 創建規則) 並選擇規則類型 使用公式來確定要格式化的單元格 (使用公式)
  3. 輸入我們的坐標選擇公式:

    =OR(CELL(“行”)=ROW(A2),CELL(“列”)=COLUMN(A2))

    =OR(單元格(«行»)=行(A1),單元格(«列»)=列(A1))

    此公式檢查表格中每個單元格的列號是否與當前單元格的列號相同。 列也是如此。 因此,只有那些列號或行號與當前單元格匹配的單元格才會被填充。這就是我們想要實現的十字形坐標選擇。

  4. 框架 (格式) 並設置填充顏色。

一切都準備好了,但有一個細微差別。 事實上,Excel 不會將選擇的更改視為工作表上數據的更改。 因此,僅當活動單元格的位置發生變化時,它才不會觸發公式的重新計算和條件格式的重新著色。 因此,讓我們向工作表模塊添加一個簡單的宏來執行此操作。 右鍵單擊工作表選項卡並從上下文菜單中選擇命令 源文字 (源代碼)。Visual Basic 編輯器窗口應打開。 將此簡單宏的文本複製到其中:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveCell.Calculate End Sub  

現在,當選擇更改時,將啟動使用函數重新計算公式的過程 CELL 在條件格式中並淹沒當前行和列。

這種方法的優點:

  • 條件格式不會破壞自定義表格格式
  • 此選擇選項適用於合併的單元格。
  • 不存在意外點擊刪除整行和整列數據的風險 刪除.
  • 最少使用宏

這種方法的缺點:

  • 條件格式的公式必須手動輸入。
  • 沒有快速啟用/禁用此類格式的方法 - 在刪除規則之前始終啟用它。

方法 3. 最佳。 條件格式 + 宏

中庸之道。 我們使用方法 1 中的宏跟踪工作表上的選擇的機制,並使用方法 2 中的條件格式為其添加安全突出顯示。

打開一個包含要在其中獲得此類坐標選擇的表格的工作表。 右鍵單擊工作表選項卡並從上下文菜單中選擇命令 源文字 (源代碼)。Visual Basic 編輯器窗口應打開。 將這三個宏的文本複製到其中:

Dim Coord_Selection As Boolean Sub Selection_On() Coord_Selection = True End Sub Sub Selection_Off() Coord_Selection = False End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim WorkRange As Range, CrossRange As Range Set WorkRange = Range("A7:N300") 'адрес рабочего диапазона с таблицей If Target.Count > 1 Then Exit Sub If Coord_Selection = False Then WorkRange.FormatConditions.Delete Exit Sub End If Application.ScreenUpdating = False If Not Intersect(Target, WorkRange) 什麼都沒有然後設置 CrossRange = Intersect( WorkRange, Union(Target.EntireRow, Target.EntireColumn)) WorkRange.FormatConditions.Delete CrossRange.FormatConditions.Add Type:=xlExpression, Formula1:="=1" CrossRange.FormatConditions(1).Interior.ColorIndex = 33 Target.FormatConditions .Delete End If End Sub  

不要忘記將工作範圍地址更改為您的表格地址。 關閉 Visual Basic 編輯器並返回 Excel。 要使用添加的宏,請按鍵盤快捷鍵 ALT + F8  並以與方法1相同的方式進行。 

方法 4. 美麗。 FollowCellPointer 插件

來自荷蘭的 Excel MVP Jan Karel Pieterse 在他的網站上贈送了一個免費插件 跟隨單元指針(36Kb),它通過使用宏繪製圖形箭頭線來突出顯示當前行和列來解決相同的問題:

 

很好的解決方案。 在某些地方並非沒有故障,但絕對值得一試。 下載存檔,將其解壓縮到磁盤並安裝附加組件:

  • 在 Excel 2003 及更早版本中 - 通過菜單 服務 – 附加組件 – 概覽 (工具——加載項——瀏覽)
  • 在 Excel 2007 及更高版本中,通過 文件 - 選項 - 附加組件 - 前往 - 瀏覽 (文件——Excel選項——加載項——轉到——瀏覽)

  • 什麼是宏,在 Visual Basic 中插入宏代碼的位置

 

發表評論