Подтвердить что ты не робот

Выделить активную строку/столбец в Excel без использования VBA?

Чего я хочу добиться, так это выделить активную строку или столбец. Я использовал решения VBA, но каждый раз, когда используется событие Selection_change я теряю шанс отменить любые изменения в моей рабочей таблице.

Есть ли способ как-нибудь выделить активную строку/столбец без использования VBA?

4b9b3361

Ответ 1

Я не думаю, что это можно сделать без использования VBA, но это можно сделать, не теряя историю отмены:

В VBA добавьте следующее к своему рабочему объекту:

Public SelectedRow as Integer
Public SelectedCol as Integer

Private Sub Worksheet_SelectionChange(ByVal Target as Range)
    SelectedRow = Target.Row
    SelectedCol = Target.Column
    Application.CalculateFull ''// this forces all formulas to update
End Sub

Создайте новый модуль VBA и добавьте следующее:

Public function HighlightSelection(ByVal Target as Range) as Boolean
    HighlightSelection = (Target.Row = Sheet1.SelectedRow) Or _
        (Target.Column = Sheet1.SelectedCol)
End Function

Наконец, используйте условное форматирование, чтобы выделить ячейки на основе формулы "HighlightSelection":

screen capture of conditional formatting rules

Ответ 2

Лучшее, что вы можете получить, это использование условного форматирования.

Создайте два правила, основанные на формуле:

  • =ROW()=CELL("row")
  • =COLUMN()=CELL("col")

Как показано на рисунке:

enter image description here

Единственный недостаток заключается в том, что каждый раз, когда вы выбираете ячейку, вам нужно пересчитать ваш лист. (Вы можете нажать "F9" )

Ответ 3

Вы можете временно выделить текущую строку (без изменения выделения), нажав Shift+Space. Текущий столбец с Ctrl+Space.

Кажется, работает в Excel, Google Sheets, OpenOffice Calc и Gnumeric (все программы, в которых я пробовал). (Спасибо https://productforums.google.com/forum/#!topic/docs/gJh1rLU9IRA за указание на это)

К сожалению, это не так хорошо, как формулы и решения на основе макросов (которые помогли мне, кстати), потому что подсветка исчезает при перемещении курсора, но это также не требует хлопот, связанных с ее настройкой каждый раз или созданием шаблон с ним (который я не мог заставить работать).

Кроме того, я обнаружил, что вы можете упростить формулу условного форматирования (для Excel) из других решений в единую формулу для одного правила следующим образом:

=OR(CELL("col")=COLUMN(),CELL("row")=ROW())

Компромисс заключается в том, что, если бы вы сделали это таким образом, выделенный столбец и строка должны были бы использовать одинаковое форматирование, но это, вероятно, более чем достаточно для большинства случаев и является менее трудоемким. (спасибо https://trumpexcel.com/highlight-active-row-column-excel/ за сокращенную формулу)

Ответ 4

Прежде всего, спасибо! Я только что создал решение с подсветкой ячеек, используя Selection_Change и изменив содержимое ячеек. Я не знал, что это отключит Undo. Я нашел способ сделать это, используя комбинирование условного форматирования, Cell() и событие Selection_Change. Вот как я это сделал.

  • В ячейке A1 я ставлю формулу = ячейка ( "строка" )
  • Строка 2 полностью пуста
  • Строка 3 содержит заголовки
  • Строка 4 и вниз - это данные
  • Чтобы обновить формулу в A1, лист необходимо пересчитать. Я могу сделать это с помощью F9, но я создал событие Selection_Change с единственным кодом, который будет выполнен, Range("A1").Calculate. Таким образом, это делается каждый раз, когда пользователь перемещается, и поскольку Selection_Change НЕ меняет никаких значений/форматов и т.д. На листе, Undo не отключается.
  • Теперь просто введите условное форматирование, чтобы выделить ячейки, которые имеют ту же строку, что и ячейка A1.
    • Выберите весь столбец B
    • Условное форматирование, управление правилами, новое правило, использование формулы для определения, какие ячейки следует форматировать
    • Введите эту формулу: = строка (B1) = $A $1
    • Нажмите "Формат" и выберите способ выделения.
    • Готов. Нажмите ОК во всплывающих окнах.

Это работает для меня.

Ответ 5

Альтернативой Range.Calculate является использование ActiveWindow.SmallScroll. Единственным недостатком является то, что экран мигает в течение доли секунды после нового выбора. При прокрутке вручную необходимо убедиться, что новый выбор полностью выходит за пределы экрана (окна), чтобы он работал. Вот почему в приведенном ниже коде нам нужно прокрутить достаточно, чтобы вывести все видимые строки из вида экрана, а затем прокрутить обратно в ту же позицию -to, чтобы принудительно обновить экран для условного форматирования.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ScreenUpdating = False
ActiveWindow.SmallScroll Down:=150 'change these values to total rows displayed on screen
ActiveWindow.SmallScroll Down:=-150 'change these values to total rows displayed on screen
'DoEvents 'unable to use this to remove the screen flicker
ScreenUpdating = True
End Sub

Кредиты: Рори Арчибальд https://www.experts-exchange.com/questions/28275889/When-is-excel-conditional-formatting-refreshed.html

Ответ 6

Используя условное форматирование, вместо выделения всей строки и столбца можно выделить строку слева от ячейки и столбец над ячейкой с помощью кода ниже:

=OR(AND(CELL("col")=COLUMN();(CELL("row")-1)>=ROW());AND(CELL("col")>=COLUMN();(CELL("row")-1)=ROW()))

Ответ 7

На листе события Selection_change вызывают следующее:

Function highlight_Row(rngTarget As Range)
    Dim strRangeRow As String
    strRangeRow = rngTarget.Row
    strRangeRow = strRangeRow & ":" & strRangeRow
    Rows(strRangeRow).Select
    rngTarget.Activate
End Function

Это длинный формат для ясности!