Перемещение ячеек в excel по условию

MulTEx »

17 Февраль 2014              19120 просмотров

Работа со строками/столбцами по условию

Данная функция является частью надстройки MulTEx


 
Вызов команды:
MulTEx -группа Ячейки/ДиапазоныРабота со строками/СтолбцамиРабота со строками/столбцами по условию


Данная команда позволяет удалить, переместить или скопировать строки/столбцы по различным условиям:
Работа со строками/столбцами
Операция — выбор действия над строками/столбцами. Возможно Удаление, Перемещение и Копирование. Перемещение и Копирование возможно на новый лист или в указанный диапазон того же листа.
Удалить/Переместить/Скопировать — в данном разделе можно выбрать над чем производить Удаление/Копирование/Перемещение: над строками или столбцами, а так же выбрать диапазон для выполнения действий.

Строки — действия будут произведены со строками
Столбцы — действия будут произведены со столбцами
На всем листе — действия над строками/столбцами будут произведены на всем листе
В диапазоне — действия над строками/столбцами будут произведены только внутри указанного диапазона. На картинке выше указан диапазон Лист1!$A$1:$E$25. Это значит, что если выбрано Удаление Строк, то строки будут удалены только в этом диапазоне. Даже если строка 27 листа будет удовлетворять условиям, она не будет удалена, т.к. выходит за пределены указанного диапазона.

Переместить — указывается место назначения для копируемых или перемещаемых строк/столбцов.

На новый лист — в данном случае строки/столбцы будут вставлены на новый лист, который будут создан в ходе выполнения команды. Вставка отобранных строк/столбцов начинается с ячейки А1 нового листа.
Начиная с указанной ячейки — в данном случае строки/столбцы будут вставлены на тот же лист, в котором производится Копирование/Перемещение. Вставка отобранных строк/столбцов начинается именно с указанной ячейки. Примечание: Если указать диапазон для вывода результата внутри диапазона с данными для отбора строк/столбцов, то появится сообщение:
Сообщение
После этого лучше проверить заданные параметры и убедиться в том, что перемещение или копирование строк/столбцов не будет произведено в имеющиеся данные. Это сообщение может появиться даже в том случае, если в ячейках для вывода результата нет данных и в качестве исходных данных указано На всем листе. Что вполне логично, т.к. ячейка для вывода в любом случае расположена на этом листе.

Наименование данного раздела меняется в зависимости от выбранного действия и принимает три значения: Переместить, Скопировать и Не доступно. Не доступно появляется при выборе действия Удалить, т.к. в данном случае определение диапазона для вывода результата не требуется.

Переместить строки — указываются критерии для отбора строк/столбцов к удалению/перемещению/копированию.

  • Все пустые — будут удалены все пустые строки/столбцы в указанном диапазоне.
  • Если значение ячейки:Ниже в примерах применения данных параметров описаны операции по удалению строк, но все это применимо для любой выбранной операции.
    • Равно — будут удалены те строки в ячейках которых есть значение, равное указанному. В критериях можно применять символы подстановки(звездочка(*), вопр.знак(?) ). Например на картинке указан критерий: «*С.Петербург*». Это означает, что если в ячейке будет записано «Произведено в г. С.Петербург 12.03.2008», то данная строка будет удалена. Если же указать «С?Петербург», то будут удалены строки, значение в которых равно либо «С.Петербург», либо «С-Петербург», либо «С Петербург» и т.п. Если же указать «С.Петербург», то будут удалены только те строки, значение которых в точности совпадает с «С.Петербург».
    • Не равно — будут удалены те строки в ячейках которых нет значения, равного указанному. Все работает так же, как и при выборе Равно, но в обратном направлении. Т.е. если указать «С.Петербург», то будут удалены все строки, значение которых не равно «С.Петербург».
    • Учитывать регистр — при отборе значений будет учитываться регистр критерия или нет. Если не установлено, то при указании равно «С.Петербург» будут удалены строки равные и значению «С.Петербург» и значению «с.петербург».
    • В поле ниже указывается номер столбца, в котором просматривать эти критерии. Например, если в этом поле указать 2 и На всем листе, то критерии будут просматриваться во втором столбце листа — $B. Если указать 2 и диапазон $B$1:$E$25, то критерии будут просматриваться во втором столбце указанного диапазона, т.е. в третьем столбце листа — $C. Если данное поле оставить пустым, то значения будут просматриваться во всех столбцах диапазона.

Закрыть форму после выполнения операции — по умолчанию включен. Если снять, то после Удаления/Перемещения/Копирования строк/столбцов форма не закроется и можно будет указать следующий критерий.


Расскажи друзьям, если статья оказалась полезной:

  Плейлист   Видеоинструкции по использованию надстройки MulTEx

«. Если бы мы вводили обычную формулу в Excel, то закончили бы ввод нажатием клавиши Enter. Но поскольку это формула массива, то нужно нажать комбинацию клавиш Ctrl+Shift+Enter. Этим мы укажем Excel, что это не обычная формула, а формула массива, и он автоматически заключит ее в фигурные скобки..»

Часть решения для меня была здесь.

«. Если бы мы вводили обычную формулу в Excel, то закончили бы ввод нажатием клавиши Enter. Но поскольку это формула массива, то нужно нажать комбинацию клавиш Ctrl+Shift+Enter. Этим мы укажем Excel, что это не обычная формула, а формула массива, и он автоматически заключит ее в фигурные скобки..»

Часть решения для меня была здесь.

Arndt

Сообщение «. Если бы мы вводили обычную формулу в Excel, то закончили бы ввод нажатием клавиши Enter. Но поскольку это формула массива, то нужно нажать комбинацию клавиш Ctrl+Shift+Enter. Этим мы укажем Excel, что это не обычная формула, а формула массива, и он автоматически заключит ее в фигурные скобки..»

Часть решения для меня была здесь.

Автор — Arndt
Дата добавления — 04.01.2018 в 16:29

Источник

Как переместить строки в Excel? Выборочное перемещение строк по условию

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

Как переместить строку в Excel?

Для перемещения строки в Excel, можно подвести курсор мыши к границе маркера выделения до появления маленьких стрелок в четыре разные стороны, нажать левую кнопку мыши и удерживая её переместить строку вверх либо вниз. В этом случае содержимое конечных ячеек будет заменено. Осуществить такое перемещение можно только в пределах активного листа.

В общем же случае, чтобы переместить строку, необходимо её вырезать и вставить уже в нужном месте. Для этого необходимо:

1) выделить перемещаемую строку (подвести курсор мыши к номеру строки и кликнуть на нем левой кнопкой);

2) вырезать выделенную строку любым удобным способом (через главное меню, через контекстное меню, горячими клавишами Ctrl+X)

3) на нужном листе выделить строку, либо самую левую ячейку строки, в которую будет произведена вставка;

4) вставить вырезанные ячейки.

Здесь следует заметить, что в контекстном меню (по нажатию правой кнопки мыши) доступны два пункта, связанные со вставкой — «Вставить» и «Вставить вырезанные ячейки».

При выборе первого из этих пунктов вырезанная строка будет помещена поверх строки, выбранной для вставки, а при выборе пункта второго, строка будет помещена между строк, то есть без потери каких-либо данных.

В случае, если выделено несколько несмежных между собой строк, то граница маркера выделения исчезает и такой набор строк переместить уже не удастся. Кроме того, при попытке вырезать несколько несмежных строк одновременно, приложение выдает сообщение «Данная команда неприменима для несвязных диапазонов. Выберите один диапазон и снова выберите команду.»

Аналогичное сообщение появляется при попытке одновременно вырезать группу ячеек, не входящих в один диапазон.

После получения такого сообщения остается либо таскать строки по одной, либо искать другие инструменты.

Как быстро переместить строки на новый лист Excel?

Одним из таких инструментов является надстройка для Excel на основе Visual Basic for Application.

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

С этой надстройкой Вы сможете:

1. Одним кликом мыши вызывать диалоговое окно макроса прямо из панели инструментов Excel;

2. Задавать значение для поиска;

3. Задавать несколько значений для поиска через символ-разделитель «;» точку с запятой;

4. Учитывать либо не учитывать регистр при поиске заданных значений;

5. Выбирать диапазон ячеек для поиска заданных значений;

6. Выбирать одно из восьми условий для выбранных ячеек:

а) совпадает с искомым значением;

б) не совпадает с искомым значением;

в) содержит искомое значение;

г) не содержит искомое значение;

д) начинается с искомого значения;

е) не начинается с искомого значения;

ж) заканчивается искомым значением;

з) не заканчивается искомым значением.

7. Устанавливать дополнительные ограничения для выбранного диапазона.

Источник

Adblock
detector

 

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

мне кажется удобно так:

Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub

c = Target.Column
If c Mod 2 = 0 Then
c = c - 1
lLastRow = Cells(Rows.Count, c).End(xlUp).Row
Else:
c = c
lLastRow = Cells(Rows.Count, c).End(xlUp).Row
End If

If Cells(Target.Row, c + 1) <> "" Then
Range(Cells(Target.Row, c), Cells(Target.Row, c + 1)).Cut Cells(lLastRow + 1, c)
For n = 5 To lLastRow
If IsEmpty(Cells(n, c)) = True And IsEmpty(Cells(n, c + 1)) = True Then
Range(Cells(n, c), Cells(n, c + 1)).Delete Shift:=xlUp
End If
Next

ElseIf Cells(Target.Row, c + 1) = "" And Target.Row > lLastRow - 1 Then
Range(Cells(5, c), Cells(lLastRow, c + 1)).Copy Cells(6, c)
Range(Cells(Target.Row + 1, c), Cells(Target.Row + 1, c + 1)).Cut Cells(5, c)
End If
End Sub

Изменено: evgeniygeo19.07.2022 06:55:16

Перенос значения ячейки по условию со смещением

JimDG

Дата: Понедельник, 28.11.2022, 14:23 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Здравствуйте! Помогите, пожалуйста, написать макрос. Имеется таблица, формата:
<2022-11-28> дата
<…> произвольная запись
<…>
<…>
<2022-11-28>
<…>
<…>
<…>
Всё расположено в столбце B
Нужно: если в ячейке В — дата, то перенести в ячейку J со смещением на одну строку вниз. Например B2 -> J3, B10 -> J11.
В таблице длина столбца В нерегулярная, от 20 000 до 140 000.

Как я вижу алгоритм:
Если в В i есть данные, то (Если в В i «Дата», то перенести в J i+1, иначе перейти к B i+1), иначе завершить.

 

Ответить

_Boroda_

Дата: Понедельник, 28.11.2022, 14:40 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

1. Прочитайте Правила форума
2. Приложите файл-пример
3. Обязательно макросом нужно?


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

JimDG

Дата: Понедельник, 28.11.2022, 20:32 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


1. Прочитайте Правила форума

Исправился)

Приложил

3. Обязательно макросом нужно?

Если честно, не совсем представляю, как это сделать без макроса

К сообщению приложен файл:

8475227.xls
(36.5 Kb)

 

Ответить

_Boroda_

Дата: Вторник, 29.11.2022, 09:12 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

А можете файл без макросов приложить? У меня на работе блокировка безопасности стоит, не могу скачивать. Ну, или подождите того, у кого нормально с этим


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Serge_007

Дата: Вторник, 29.11.2022, 09:25 |
Сообщение № 5

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

если в ячейке В — дата, то перенести в ячейку J со смещением на одну строку вниз. Например B2 -> J3, B10 -> J11

Задача в такой формулировке решается простой формулой типа

Код

=ЕСЛИОШИБКА(ЕЧИСЛО(B1)*B1;»»)

в ячейке J2 и копируем вниз
Подозреваю что надо не это :)

файл без макросов приложить

Во вложении


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

_Boroda_

Дата: Вторник, 29.11.2022, 09:31 |
Сообщение № 6

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Сергей, спасибо.
Да, явно пример слишком упрощен.


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

JimDG

Дата: Вторник, 29.11.2022, 09:47 |
Сообщение № 7

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Сделал вот так(для примера взял 63 строки в обработку. В рабочем файле количество строк будет варьироваться, потому условие наличия данных в ячейке нужно для завершения цикла):
[vba]

Код

Dim i As Long
    For i = 1 To 63
    If IsEmpty(Cells(i, 2)) = False Then
        If IsDate(Cells(i, 2)) = True Then
            Selection.Copy Cells(i + 1, 10)
            Selection.ClearContents
        Else
        End If
    Else
    End If
    Next i
End Sub

[/vba]

Но он отрабатывает только если я конкретно выделил ячейку с датой, и каждый раз вручную активирую макрос, переносит. То есть, в данном случае срабатывает только конструкция
[vba]

Код

Selection.Copy Cells(i + 1, 10)
Selection.ClearContents

[/vba]

В рабочем файле порядка 50 000 строк, из них с датами только около 700-800.
Нужно чтоб он последовательно обработал каждую строку и перенес даты в другую колонку.

Надеюсь, я правильно составил алгоритм, чтоб разбить задачу на более мелкие:
1. Объявляем переменную i=1
2. Проверяем Cells(i, 2): пустая?
2.1 Если да: завешаем работу макроса
2.1 Если нет:
3. Проверяем формат данных в ячейке
3.1 Если да: копируем из ячейки Cells(i, 2) в ячейку Cells(i+1, 10), переходим к пункту 2.
3.2. Если нет: переходим в ячейку Cells(i+1, 2)переходим к пункту 2.

Как-то так

Сообщение отредактировал JimDGВторник, 29.11.2022, 10:35

 

Ответить

_Boroda_

Дата: Вторник, 29.11.2022, 10:32 |
Сообщение № 8

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

[vba]

Код

Sub tt()
    c0_ = 2 ‘столбец откуда
    c1_ = 10 ‘столбец куда
    r0_ = 1 ‘первая строка
    nr_ = Cells(Rows.Count, c0_).End(3).Row — r0_ + 1 ‘кол-во строк в столбце Откуда
    Cells(r0_, c1_).Resize(Cells(Rows.Count, c1_).End(3).Row).ClearContents ‘очищаем Куда
    ar0_ = Cells(r0_, c0_).Resize(nr_).Value ‘массив Откуда
    ar1_ = Cells(r0_, c1_).Resize(nr_).Value ‘массив Куда (сейчас пустой)
    For i = 1 To nr_’цикл по строкам (в массиве, не на листе!!!. Так намного быстрее)
        If IsDate(ar0_(i, 1)) Then’ если дата
            ar1_(i, 1) = ar0_(i, 1)’ Присваиваем второму массиву значение первого (в строке i)
        End If
    Next i
    Cells(r0_ + 1, c1_).Resize(nr_).Value = ar1_’ Выгружаем второй массив на лист. Со строки на одну ниже
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

JimDG

Дата: Вторник, 29.11.2022, 11:47 |
Сообщение № 9

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Ругается на :(
[vba][/vba]
И пишет, что функция Cells не объявлена %)

Сообщение отредактировал JimDGВторник, 29.11.2022, 11:48

 

Ответить

_Boroda_

Дата: Вторник, 29.11.2022, 11:56 |
Сообщение № 10

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

И как Вы думаете, что нужно сделать?
Или объявите, или сотрите Option Explicit в первой строке


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

JimDG

Дата: Среда, 30.11.2022, 07:37 |
Сообщение № 11

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Макрос заработал, достаточно было вручную его переписать, а не копипастить. Как ни странно.
Дополнил его работу макросом
[vba]

Код

Sub Удалить_пустые_строки()
collJ_ = Cells(Rows.Count, 10).End(3).Row — r0_ + 1
For i = collJ_ To 1 Step -1
    If Cells(i, 10) = «» Then
        Cells(i, 10).EntireRow.Delete
    End If
Next i
End Sub

[/vba]

На 23400 строк операция заняла 17 минут, против 7 часов вручную. Спасибо большое за помощь. Впервые столкнулся с макросами. Понял, насколько интересное направление) Буду дальше развиваться в этом направлении

 

Ответить

_Boroda_

Дата: Среда, 30.11.2022, 09:11 |
Сообщение № 12

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

23400 строк операция заняла 17 минут

Скока????
Должно за пару секунд отрабатывать.
Вы работаете с ячейками, а нужно этот момент минимизировать.
Ну, допустим, удалить именно строки (и если, при этом, у Вас таблица с кучей разных форматов, а не просто данные), да, придется по очереди. Хот нет, не обязательно, можно и всей кучей. Но это немного непонятно Вам пока с кодом будет
А пока в самое начало макроса напишите отключение обновления экрана и пересчета. А внизу обратно включите
Вот так примерно
[vba]

Код

Sub Makros_()
    Application.ScreenUpdating = 0
    Application.Calculation = 3

    ‘Текст макроса

    Application.ScreenUpdating = 1
    Application.Calculation = 1
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

JimDG

Дата: Среда, 30.11.2022, 11:07 |
Сообщение № 13

Группа: Пользователи

Ранг: Прохожий

Сообщений: 6


Репутация:

0

±

Замечаний:
0% ±


Круто! Помогло. Время выполнения сократилось до 28 секунд! Потрясающе просто))

 

Ответить

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

Для перемещения строки в Excel, можно подвести курсор мыши к границе маркера выделения до появления маленьких стрелок в четыре разные стороны, нажать левую кнопку мыши и удерживая её переместить строку вверх либо вниз. В этом случае содержимое конечных ячеек будет заменено. Осуществить такое перемещение можно только в пределах активного листа.

В общем же случае, чтобы переместить строку, необходимо её вырезать и вставить уже в нужном месте. Для этого необходимо:

1) выделить перемещаемую строку (подвести курсор мыши к номеру строки и кликнуть на нем левой кнопкой);

2) вырезать выделенную строку любым удобным способом (через главное меню, через контекстное меню, горячими клавишами Ctrl+X)

3) на нужном листе выделить строку, либо самую левую ячейку строки, в которую будет произведена вставка;

4) вставить вырезанные ячейки. 

Здесь следует заметить, что в контекстном меню (по нажатию правой кнопки мыши) доступны два пункта, связанные со вставкой — «Вставить» и «Вставить вырезанные ячейки».

kontekstnoe-menyu-vstavit-vyrezannye-yachejki

При выборе первого из этих пунктов вырезанная строка будет помещена поверх строки, выбранной для вставки, а при выборе пункта второго, строка будет помещена между строк, то есть без потери каких-либо данных.

В случае, если выделено несколько несмежных между собой строк, то граница маркера выделения исчезает и такой набор строк переместить уже не удастся. Кроме того, при попытке вырезать несколько несмежных строк одновременно, приложение выдает сообщение «Данная команда неприменима для несвязных диапазонов. Выберите один диапазон и снова выберите команду.»

dannaya-komanda-neprimenima-dlya-nesvyaznyh-diapazonov

Аналогичное сообщение появляется при попытке одновременно вырезать группу ячеек, не входящих в один диапазон.

После получения такого сообщения остается либо таскать строки по одной, либо искать другие инструменты.

Как быстро переместить строки на новый лист Excel?

Одним из таких инструментов является надстройка для Excel на основе Visual Basic for Application.

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

как переместить строки в excelCompleteSolutionмакрос (надстройка) для выборочного перемещения строк по условию

 С этой надстройкой Вы сможете:

1. Одним кликом мыши вызывать диалоговое окно макроса прямо из панели инструментов Excel;

2. Задавать значение для поиска;

3. Задавать несколько значений для поиска через символ-разделитель «;» точку с запятой;

4. Учитывать либо не учитывать регистр при поиске заданных значений;

5. Выбирать диапазон ячеек для поиска заданных значений;

6. Выбирать одно из восьми условий для выбранных ячеек:

    а) совпадает с искомым значением;

    б) не совпадает с искомым значением;

    в) содержит искомое значение;

    г) не содержит искомое значение;

    д) начинается с искомого значения;

    е) не начинается с искомого значения;

    ж) заканчивается искомым значением;

    з) не заканчивается искомым значением.

7. Устанавливать дополнительные ограничения для выбранного диапазона.

А знаете ли Вы, что все листы рабочей книги можно быстро превратить в отдельные файлы?

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

Другие материалы по теме:

Понравилась статья? Поделить с друзьями:
  • Перемещение ячеек в excel курсором
  • Перемещение таблиц в excel
  • Перемещение строки по условию excel
  • Перемещение строк в таблицах excel
  • Перемещение строк в excel вверх вниз