Как сделать инверсию в эксель

Добавил пользователь Валентин П.
Обновлено: 04.10.2024

Чтобы успешно работать с таблицей надо научиться выделять ячейки в Excel, то есть сказать программе Excel, какие ячейки будут изменяться. Выделить одну ячейку просто: достаточно щёлкнуть по ней курсором. Но часто надо выделить несколько ячеек.

Диапазон может содержать:

2. Способы выделения смежных ячеек

1 способ (мышка):

2 способ (клавиатура и мышка):

  1. Щёлкните ЛМ на первой выделяемой ячейке.
  2. Нажмите клавишу Shift и не отпускайте ее.
  3. Щёлкните мышкой на последней ячейке выделяемого диапазона.
  4. Отпустите клавишу Shift,

3 способ (клавиатура и мышка):

4 способ (клавиатура и мышка) – мой любимый:

Запомните эту подсказку:

Shift + Ctrl + ↓Выделение всех данных в столбце, начиная от текущей ячейки
Shift + Ctrl + →Выделение всех данных в строчке, начиная от текущей ячейки
ЗамечаниеЯ ещё не встречала человека, который бы использовал этот замечательный способ выделения диапазона ячеек. Обычно выделяют перетаскиванием мыши. Хорошо, если таблица маленькая. А если на пару сотен строк?

5 способ (Меню ленты Главная):

выделить группу ячеек

выделение ячеек в excel

Выделение строки – на заголовке строки (курсор в виде черной жирной стрелки находится на имени строки).

выделение ячеек в excel

Выделение столбца – на заголовке столбца (курсор в виде черной жирной стрелки находится на имени столбца).

Выделение ячеек всего листа – на кнопке, находящейся на пересечении заголовков столбцов и строк.

выделение ячеек в excel

3. Выделение несмежных ячеек

  1. Щелкните ЛМ на первой выделяемой ячейке.
  2. Нажмите клавишу Ctrl и не отпускайте ее.
  3. Щелкайте мышкой на тех ячейках, которые нужно выделить.
  4. Отпустите клавишу Ctrl.

4. Перемещение данных

Шаг 1. Выделить данные, которые перемещаются

Шаг 2. Навести указатель мыши на границу выделенного, чтобы указатель мыши превратился в четырехстороннюю стрелку

Шаг 3. Нажать левую клавишу мыши и, не отпуская ее, переместить выделенные ячейки в новое место.

перемещение данных в excel

5. Копирование данных

Шаг 1. Выделить ячейки, которые копируются

Шаг 2. Навести указатель мыши на границу выделенного, чтобы указатель мыши превратился в четырехстороннюю стрелку

Шаг 3. Нажать на клавиатуре клавишу Ctrl и не отпускать ее

Шаг 4. Нажать ЛМ мыши и, не отпуская ее, переместить выделенный текст в новое место.

Шаг 5. Отпустить клавишу Ctrl.

6. Удаление данных

Чтобы удалить данные из ячейки (ячеек) надо выделить ячейку (ячейки) и нажать клавишу или Backspace:

удаление данных в excel

При редактировании текста в предусмотрено средство для возврата текста в то состояние, в каком он был до внесения изменений. Если отменить последнее действие или набор действий, то можно повторно выполнить эти отмененные операции. За данные действия отвечают команды Отменитьи Вернуть. Они находятся на Панели быстрого доступа.

Напишите пожалуйста инструкцию, как в excel выделить противоположные ячейки уже выделенным ячейкам?

Как это можно сделать, с помощью функционала excel?

Как выделить цветом зависимые ячейки?
Помогите, пожалуйста, имеется формула, которая содержит в себе ссылки на множество ячеек.

Как выделить английское слово из ячейки?
Помогите, пожалуйста решить проблему. Есть столбец данных со значениями типа: example пример.

Как из одной ячейки выделить цифры
Северная ТПА 3056 СЕВЕРНАЯ ТП-771 гр.9.гр. 12 как сделать так чтобы в соседней колонке.


Как в Excel выделить ячейки с нужным слово и скопировать
Есть список словосочетаний. Допустим 1000. Как сделать чтобы можно было задать определенное слово и.

Согласен, название статьи звучит страшно и не совсем понятно. Поэтому явно надо разъяснить поподробнее. Начну с предыстории. На одном форуме форумчанин задал вопрос - "Как инвертировать Selection?"(к слову ник форумчанина - Alex_ST). Т.е. если у Вас на листе выделена ячейка А1, то после работы кода будут выделены все ячейки на листе, кроме этой ячейки. Были предложены варианты, но. Каждый из них имел недостаток: либо для корректной работы требовалось создавать новую книгу или лист, либо не со всеми условиями работал корректно(например, выделение несмежных диапазонов), либо работал так долго, что можно было кофе сварить и выпить пока он работал. И вот на днях выдались пара свободных минут и решил я "добить" ту тему и создать-таки код, который будет работать без создания лишних листов и книг и довольно быстро. Сразу скажу, что довольно быстро понятие относительное. Все зависит от того, где и как выделен диапазон. Если изначально диапазон выделен как один неразрывный или как несколько несвязанных, но расположенных рядом друг с другом, то код отработает так же почти мгновенно. А вот если выделенная область расположена в конце листа(для Excel 2003 - 65536, Excel 2007 - 1048576) и в начале(первые строки и столбцы), то код может работать довольно долго. Но что-то я сомневаюсь, что многие будут выделять одновременно последнюю и первую ячейку на листе.

Option Explicit Dim alArrBegRows(), alArrEndRows(), alArrBegCols(), alArrEndCols() Dim lMinRow As Long, lMaxRow As Long, lMinCol As Long, lMaxCol As Long Sub Invert_Selection() Dim rArea As Range, rInvertRange As Range, rTmpRng As Range, rRng As Range Dim lr As Long, lc As Long, li As Long Dim lEndRow As Long, lEndCol As Long Dim bEqualRows As Boolean, bEqualCols As Boolean If TypeName(Selection) <> "Range" Then Exit Sub For Each rArea In Selection.Areas ReDim Preserve alArrBegRows(li), alArrEndRows(li), alArrBegCols(li), alArrEndCols(li) alArrBegRows(li) = rArea.Row: alArrEndRows(li) = rArea.Row + rArea.Rows.Count - 1 alArrBegCols(li) = rArea.Column: alArrEndCols(li) = rArea.Column + rArea.Columns.Count - 1 li = li + 1 Next rArea lMinRow = alArrBegRows(0): lMaxRow = 0: lMinCol = alArrBegCols(0): lMaxCol = 0 For li = 0 To UBound(alArrBegRows) If alArrBegRows(li) lMaxRow Then lMaxRow = alArrEndRows(li) If alArrBegCols(li) lMaxCol Then lMaxCol = alArrEndCols(li) Next li lEndRow = ActiveSheet.Rows.Count lEndCol = ActiveSheet.Columns.Count 'максимальные пороги If lMaxRow <> lEndRow Then Set rInvertRange = Rows(lMaxRow + 1 & ":" & lEndRow) End If If lMaxCol <> lEndCol Then If Not rInvertRange Is Nothing Then Set rInvertRange = Union(rInvertRange, Range(Cells(1, lMaxCol + 1), Cells(1, lEndCol)).EntireColumn) Else Set rInvertRange = Range(Cells(1, lMaxCol + 1), Cells(1, lEndCol)).EntireColumn End If End If 'минимальные пороги If lMinRow <> 1 Then If Not rInvertRange Is Nothing Then Set rInvertRange = Union(rInvertRange, Rows(1 & ":" & lMinRow - 1)) Else Set rInvertRange = Rows(1 & ":" & lMinRow - 1) End If End If If lMinCol <> 1 Then If Not rInvertRange Is Nothing Then Set rInvertRange = Union(rInvertRange, Range(Cells(1, 1), Cells(1, lMinCol - 1)).EntireColumn) Else Set rInvertRange = Range(Cells(1, 1), Cells(1, lMinCol - 1)).EntireColumn End If End If For li = 0 To UBound(alArrBegRows) 'Если выделен целый столбец/столбцы If alArrEndRows(li) = lEndRow And alArrBegRows(li) = 1 Then bEqualRows = 1 Else bEqualRows = 0 End If 'Если выделена целая строка/строки If alArrEndCols(li) = lEndCol And alArrBegCols(li) = 1 Then bEqualCols = 1 Else bEqualCols = 0 End If Next li 'Если выделены даже несвязанные строки/столбцы целиком If bEqualRows Then lMinRow = lMaxRow If bEqualCols Then lMinCol = lMaxCol 'ячейки "внутри" For lr = lMinRow To lMaxRow For lc = lMinCol To lMaxCol If Intersect_Nums(lr, lc) = False Then If rRng Is Nothing Then If lMinRow = lMaxRow Then Set rRng = Cells(lr, lc).EntireColumn Else If lMinCol = lMaxCol Then Set rRng = Cells(lr, lc).EntireRow Else Set rRng = Cells(lr, lc) End If End If Else If lMinRow = lMaxRow Then Set rRng = Union(rRng, Cells(lr, lc).EntireColumn) Else If lMinCol = lMaxCol Then Set rRng = Union(rRng, Cells(lr, lc).EntireRow) Else Set rRng = Union(rRng, Cells(lr, lc)) End If End If End If End If Next lc Next lr If Not rInvertRange Is Nothing Then If Not rRng Is Nothing Then Set rInvertRange = Union(rRng, rInvertRange) End If Else If Not rRng Is Nothing Then Set rInvertRange = rRng End If End If 'Действия над инвертированным диапазоном If Not rInvertRange Is Nothing Then rInvertRange.Select End If End Sub '--------------------------------------------------------------------------------------- ' Procedure : Intersect_Nums ' Purpose : Функция определения вхождения в диапазон '--------------------------------------------------------------------------------------- Function Intersect_Nums(lr As Long, lc As Long) As Boolean Dim lCntR As Long, lCntC As Long, li As Long For li = LBound(alArrBegRows) To UBound(alArrBegRows) For lCntR = alArrBegRows(li) To alArrEndRows(li) For lCntC = alArrBegCols(li) To alArrEndCols(li) If lr = lCntR Then If lc = lCntC Then Intersect_Nums = True: Exit Function End If Next lCntC Next lCntR Next li End Function

В приложенном файле примере код усложнен пользовательской формой(UserForm), при помощи которой можно выбрать действие с инвертированным диапазоном: Выделить, Очистит все, Очистить форматы, Очистить значения. Немного поменяв код Вы сможете легко добавить другие действия над диапазоном.

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

У меня часто возникает проблема в Excel, когда я использую фильтры, а затем хочу инвертировать выделение, т.е. снять все выбранные элементы и выбрать все элементы, которые в настоящее время не выбраны. Например, см. Скриншоты ниже:

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

Начальный выбор

Перевернутый выбор

Я написал немного VBA, которая расширяет Excel и обеспечивает эту функциональность. Он добавляет новое контекстное меню (контекстное меню) из подменю "Фильтр" (см. Скриншот).

Вам нужно позвонить AddToCellMenu подпрограмма для отображения пункта меню. Если вы хотите использовать этот параметр для всех сеансов Excel, вам нужно поместить этот код в личную рабочую книгу или надстройку, которую вы используете, а затем вызвать AddToCellMenu на Workbook_Open событие или что-то подобное.


В любом случае вот код:

Я отключил обновление экрана, чтобы ускорить это. Также удалил избыточный аргумент из AddToCellMenu, так как он вызывал ошибки при вызове из моего Personal.xlsb.

Быстрая полная инструкция для постоянного добавления опции обратного фильтра в ваш Excel:

Вставьте этот код в объект ThisWorkbook вашего Personal (Разработчик -> Visual Basic -> дважды щелкните ThisWorkbook):

Вставьте обновленный код Джеймса в новый модуль внутри вашего Personal.xlsb:

Все еще в вашем Personal.xslb, перейдите на вкладку View, затем нажмите "hide", и это больше не будет вас беспокоить, никогда.:)

Сохраните файл и перезапустите ваш Excel. Параметр обратного фильтра будет добавляться автоматически каждый раз, когда вы открываете любой файл Excel.

Читайте также: