Excel копирование строки по значению в ячейке

Копирование строки таблицы на другой лист по значению ячейки

Светл

Дата: Четверг, 29.06.2017, 12:46 |
Сообщение № 1

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

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

Сообщений: 7


Репутация:

0

±

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


Excel 2010

Здравствуйте!
Проблема следующая: нужно в Гугль-Эксель таблицах прописать код, который:
— Если в 22 столбце в ячейке стоит слово «оформлен», то вся строка копируется на другой лист.

 

Ответить

Manyasha

Дата: Четверг, 29.06.2017, 14:05 |
Сообщение № 2

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

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

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


Excel 2010, 2016

Светл, Здравствуйте, так попробуйте:
[vba]

Код

function onEdit(e) {
    /*
    sh1 — Активный лист
    sh2  — лист с именени Лист2
    iCol — номер столбца изменяемой ячейки
    iRow — номер строки изменяемой ячейки
    */
    var sh1 = e.source.getActiveSheet(),
        sh2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(«Лист2»),
        iCol = e.range.getColumn(),
        iRow = e.range.getRow(),
        lc1, lr2;
    //lc1 — номер последнего столбца на первом листе
    //lr2 — номер последней строки на 2-м листе
    lc1 = sh1.getDataRange().getLastColumn(),
    lr2 = sh2.getDataRange().getLastRow();
    //Если номер активного листа равен 1
    if (SpreadsheetApp.getActiveSheet().getIndex() == 1){
        //Если номер активного столбца равен 22
        if ( iCol == 22 ) {
            //Если значение активной ячейки = оформлен
            if (sh1.getActiveCell().getValue() == «оформлен»){
                //Копируем строку на 2-й лист (contentsOnly:true — копируем только значения)
                sh1.getRange(iRow, 1, 1, lc1).copyTo(sh2.getRange(lr2+1, 1), {contentsOnly:true});
            }
        }
    }
}

[/vba]

Срабатывает на изменение 22-го столбца 1-го листа, копирует на Лист2.


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал ManyashaЧетверг, 29.06.2017, 14:39

 

Ответить

Светл

Дата: Четверг, 29.06.2017, 14:20 |
Сообщение № 3

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

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

Сообщений: 7


Репутация:

0

±

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


Excel 2010

Manyasha, большое спасибо :)
А можно пояснения приписать? Хотелось бы понимать процесс :)

 

Ответить

Manyasha

Дата: Четверг, 29.06.2017, 14:42 |
Сообщение № 4

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

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

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


Excel 2010, 2016

Добавила комменты в предыдущий пост. Здесь они сливаются с текстом скрипта, но в редакторе скриптов гугл-таблиц нормально все видно.)


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Светл

Дата: Четверг, 29.06.2017, 14:51 |
Сообщение № 5

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

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

Сообщений: 7


Репутация:

0

±

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


Excel 2010

Manyasha, спасибо. Но тут немного не то, что нужно. Нужно, чтобы не на изменение активной ячейки срабатывал код, а в общем просматривал 22 столбец и , где в ячейке стоит слово «оформлен», копировал всю строку на другой лист .

 

Ответить

Светл

Дата: Четверг, 29.06.2017, 14:55 |
Сообщение № 6

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

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

Сообщений: 7


Репутация:

0

±

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


Excel 2010

И еще вопрос: как этот код активируется? Можно ли активирующую кнопочку?

 

Ответить

Manyasha

Дата: Четверг, 29.06.2017, 16:24 |
Сообщение № 7

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

Ранг: Старожил

Сообщений: 2198


Репутация:

898

±

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


Excel 2010, 2016

Светл, тогда так:
[vba]

Код

//’Создаем вкладку с кнопкой для вызова скрипта
function onOpen() {
    var menuEntries = [];
    menuEntries.push({name: «Скопировать строки», functionName: «copyRows»});

        SpreadsheetApp.getActiveSpreadsheet().addMenu(«Мои скрипты», menuEntries);
}

function copyRows() {
    /*
    ‘sh1 — лист с именени Лист1 (с него копируем)
    ‘sh2 — лист с именени Лист2 (на него копируем)
    */
    var sh1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(«Лист1»),
        sh2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(«Лист2»),
        lr1, lc1, n;
    //’lr1 — номер последней строки на 1-м листе
    //’lc1 — номер последнего столбца на 1-м листе
    lr1 = sh1.getDataRange().getLastRow();
    lc1 = sh1.getDataRange().getLastColumn();
    //’Очищаем 2-й лист
    sh2.clear();
    //’Номер строки на 2-м листе, куда будем копировать
    n =1;
    //’Идем по всем строкам листа 1
    for (var i = 1; i <= lr1; i++){
        //’Если ячейка в 22-м столбце = оформлен
        if (sh1.getRange(i, 22).getValue() == «оформлен»){
            //’Копируем строку
            sh1.getRange(i, 1, 1, lc1).copyTo(sh2.getRange(n, 1), {contentsOnly:true});
            n++;
        }
    }
}

[/vba]

Можно ли активирующую кнопочку

На ленте вкладка «Мои скрипты» — нажать на «Скопировать строки».


ЯД: 410013299366744 WM: R193491431804

 

Ответить

Светл

Дата: Четверг, 29.06.2017, 19:26 |
Сообщение № 8

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

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

Сообщений: 7


Репутация:

0

±

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


Excel 2010

Manyasha, спасибо большое! Завтра попробую :)

 

Ответить

Светл

Дата: Пятница, 30.06.2017, 12:16 |
Сообщение № 9

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

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

Сообщений: 7


Репутация:

0

±

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


Excel 2010

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

Сообщение отредактировал СветлПятница, 30.06.2017, 13:20

 

Ответить

Светл

Дата: Пятница, 30.06.2017, 13:26 |
Сообщение № 10

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

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

Сообщений: 7


Репутация:

0

±

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


Excel 2010

Опробовала код — не работает. Только очищает лист, а строки не копирует.

 

Ответить

Gustav

Дата: Пятница, 30.06.2017, 18:46 |
Сообщение № 11

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

985

±

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


начинал с Excel 4.0, видел 2.1

Тоже поучаствую парой вариантов. Всегда хватаюсь за возможность попрактиковаться в скриптах Google Docs :)
[vba]

Код

function copyRows2() {

  var sh1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(«Лист1»),
      sh2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(«Лист2»),
      col = 22; // в какой колонке ищем «оформлен»

        //’Очищаем 2-й лист (кроме 1-й строки заголовков)
  sh2.getDataRange().offset(1, 0).clear();

    //’Считываем в массив все данные 1-го листа  
  var values = sh1.getDataRange().getValues();

    //’Идем по всем строкам листа 1  
  for (var row in values) {
    if (values[row][col-1] == «оформлен») {
      sh2.appendRow(values[row])
    }
  }
}

function copyRows3() {

  var sh1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(«Лист1»),
      sh2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(«Лист2»),
      col = 22; // в какой колонке ищем «оформлен»

        //’Очищаем 2-й лист (кроме 1-й строки заголовков)
  sh2.getDataRange().offset(1, 0).clear();

    //’Считываем в массив только данные нужной колонки 1-го листа  
  var values = sh1.getRange(1, col, sh1.getLastRow()).getValues();

    //’Идем по всем значениям ячеек выбранной колонки (22-й)  
  for (var row in values) {
    if (values[row][0] == «оформлен») {
      sh2.appendRow(sh1.getRange(Number(row)+1, 1, 1, sh1.getLastColumn()).getValues()[0])
    }
  }
}

[/vba]


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Gustav

Дата: Пятница, 30.06.2017, 20:02 |
Сообщение № 12

Группа: Друзья

Ранг: Старожил

Сообщений: 2398


Репутация:

985

±

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


начинал с Excel 4.0, видел 2.1

Опробовала код — не работает.

Что-то не так делаете, всё работает. Сделал демонстрашку со всеми тремя способами. Попробуйте! Только я настроил не на 22-й столбец, а на 12-й! Чтобы покороче и нагляднее.


МОИ: Ник, Tip box: 41001663842605

 

Ответить

Как скопировать строки, если столбец содержит определенный текст / значение в Excel?

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

  • Скопируйте строки, если столбец содержит определенный текст / значение с помощью команды фильтра в Excel
  • Скопируйте строки, если столбцы содержат определенный текст/значение с помощью Kutools for Excel
  • Копировать строки, если столбец содержит определенный текст / значение другого столбца
  • Копировать строки на новый лист, если столбец содержит указанный текст / значение в Excel

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

Этот метод поможет вам найти ячейки, содержащие определенный текст или значение в указанном столбце, сначала с помощью команды «Фильтр», а затем вы можете легко скопировать отфильтрованные строки в Excel.

1. Выберите столбец, который вы будете фильтровать, а затем щелкните значок Данные > Фильтр.

2. Щелкните кнопку со стрелкой справа от первой ячейки выбранного столбца, а затем щелкните значок Текстовые фильтры > Комплект из выпадающего списка.

3. Во всплывающем диалоговом окне Custom AutoFilter введите определенный текст или значение в поле за содержит и нажмите OK кнопка. Смотрите скриншот выше:

4. Теперь выберите все отфильтрованные строки и скопируйте их, нажав Ctrl + C ключи одновременно.

5. Выберите пустую строку или ячейку и вставьте отфильтрованную строку, нажав Ctrl + V одновременно.


Скопируйте строки, если столбцы содержат определенный текст/значение с помощью Kutools for Excel

Обычно мы можем легко найти ячейки, содержащие определенный текст или значение, с помощью команды «Найти» (Ctrl + F), но она не может выделить всю строку. Тем не мение, Kutools for Excel‘s Выберите специальные ячейки Функция может не только помочь нам найти ячейки с определенным текстом или значением, но и выбрать целые строки, в которых находятся найденные ячейки.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now

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

2, Нажмите Кутулс > Выберите > Выбрать определенные ячейки.
строка копии документа, если она содержит 001

3. В диалоговом окне Выбрать определенные ячейки (см. Снимок экрана выше)
(1) Проверьте Весь ряд вариант в Тип выбора раздел;
(2) В разделе «Определенный тип» щелкните первое поле и выберите Комплект из раскрывающегося списка, затем введите конкретный текст или значение в следующее поле (см. снимок экрана ниже);
(3) Щелкните значок Ok кнопку.

4. Затем появляется другое диалоговое окно Select Specific Cells. Щелкните значок OK чтобы закрыть его.

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

5, нажмите Ctrl + C ключи тем временем, чтобы скопировать эти строки.

6. Выберите пустую строку или ячейку и вставьте эти строки, нажав Ctrl + V ключи тем временем.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now


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

Kutools for Excel’s Сравнить диапазоны Утилита предоставляет другой обходной путь для копирования строк, если столбец содержит определенный текст / значения другого столбца в Excel. Пожалуйста, сделайте следующее:

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now

1. Нажмите Кутулс > Выбрать> Выбрать одинаковые и разные ячейки.

2. В открывшемся диалоговом окне «Выбор одинаковых и разных ячеек» выполните следующие действия:

(1) Укажите столбец, который вы будете проверять, содержит ли конкретный текст / значение в Найдите значения в коробка;
(2) Укажите, что столбец содержит конкретный текст / значение в Согласно информации коробка;
Внимание: Пожалуйста, проверьте У моих данных есть заголовки варианты, основанные на вашей ситуации.
(3) Проверьте Те же ценности вариант в Найти раздел;
(4) Проверьте Выбрать целые строки опцию.
(5) Щелкните значок Ok кнопку, чтобы применить эту утилиту. 

3. Затем появляется другое диалоговое окно «Сравнить диапазоны», в котором показано, сколько строк было выбрано. Пожалуйста, нажмите на OK чтобы закрыть его.
строка копии документа, если она содержит 03

 4. А затем скопируйте эти выделенные строки, нажав Ctrl + C одновременно, а затем вставьте в целевой диапазон по мере необходимости.

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now


Копировать строки на новый лист, если столбец содержит указанный текст / значение в Excel

Kutools for Excel поддерживает другой обходной путь, который копирует целые строки на новые рабочие листы, если указанный столбец содержит определенный текст/значение с помощью утилиты Split Data. Вы можете сделать следующее:

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now

1. Выберите диапазон, в котором вы будете копировать строки на новые листы, если столбец содержит указанный текст / значение, и нажмите Кутулс Плюс > Разделить данные.

2. В открывшемся диалоговом окне «Разделить данные на несколько листов» установите флажок Конкретный столбец опцию и выберите имя столбца, в который вы будете копировать строки на основе раскрывающегося списка ниже; укажите правило именования новых листов и нажмите кнопку Ok кнопка. Смотрите левый снимок экрана:

И тогда вы увидите, что все строки в выбранном диапазоне были скопированы в новые рабочие листы, если указанный столбец содержит определенный текст / значение. Смотрите скриншот:

Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now


Демо: копирование строк, если столбец содержит определенный текст / значение в Excel


Статьи по теме


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

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


Это только макросом! Вам это нужно динамически? то есть чтоб при заполнении количестко строка автоматом копировалась в новую таблицу. Или по кнопке заполнили и нажали кнопку все колонки где количество заполнено скопировались?

Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.


Цитата: Poltava от 22.08.2012, 12:53
Это только макросом! Вам это нужно динамически? то есть чтоб при заполнении количестко строка автоматом копировалась в новую таблицу. Или по кнопке заполнили и нажали кнопку все колонки где количество заполнено скопировались?

Можно и формулой, но зачем , если есть фильтр по непустым.


А как воспользоваться этим фильтром



ЦитироватьМожно и формулой,

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

Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.



СПАСИБО БОЛЬШОЕ   :D      ZORRO2005  Вроде как проблема  решена


:) Ну это не «копирование», а вычисление заведомо написанной формулой. Просто как говориться правильно заданный вопрос это пол ответа спрашивали ведь о копировании

Не пытайтесь спорить с дебилом. Иначе вы опуститесь до его уровня. Где он задавит вас своим опытом.


хорошее решение, но придется формулы тянуть если таблица будет увеличиваться.


 

Миха73

Пользователь

Сообщений: 6
Регистрация: 11.11.2011

Доброе время суток, уважаемые форумчане! Столкнулся с проблемой, которая, откровенно говоря, привела меня в некий ступор.    
Есть таблица на Листе1, которая ежедневно заполняется, необходимо из нее скопировать строки по условию значения в ячейке столбца C (он же 3)и вставить (добавлял) удовлетворяющую условию строку на Лист3. условием является шестизначное число (от 000000 до 999999).  
Заранее Спасибо всем за интерес и ответы!  
Поиск ничего не дал

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Чем автофильтр не устраивает?

Я сам — дурнее всякого примера! …

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Если сломан автофильтр…

 

Миха73

Пользователь

Сообщений: 6
Регистрация: 11.11.2011

огромное спасибо!  
то, что надо!

 

а нельзя сделать, чтобы при заполнении Листа3 данные добавлялись, а не заполнялись по новой?

 

Миха73

Пользователь

Сообщений: 6
Регистрация: 11.11.2011

а нельзя сделать, чтобы при заполнении Листа3 данные добавлялись, а не заполнялись по новой?

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Как такой вариант — ставите вызов кода Юрия на событие активации листа (отключив обновление экрана на время работы).  
Только нужно Cells первого листа указать, чьи они, а третьего тогда не надо.  
И можно код на одну строку сократить:  

  If .Cells(i, 3) Like «######» Then

 

Миха73

Пользователь

Сообщений: 6
Регистрация: 11.11.2011

попробую с этим разобраться

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

{quote}{login=}{date=11.11.2011 10:38}{thema=}{post}а нельзя сделать, чтобы при заполнении Листа3 данные добавлялись, а не заполнялись по новой?{/post}{/quote}А смысл? Результат будет тот же самый. Берите что дают, а то скачаю обратно.

 

Миха73

Пользователь

Сообщений: 6
Регистрация: 11.11.2011

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

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Изменяют строки обычно в исходных данных, а по ним уже строится отчёт. Если Вы планируете изменять сам отчёт — делайте это на копии листа 3.

 

Миха73

Пользователь

Сообщений: 6
Регистрация: 11.11.2011

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

 

Просматривая ответ на интересующий меня вопрос, нашел данную тему. Очень помогла. Скажите, а как можно было бы ограничить число копируемых ячеек в строке, например если исходная таблица имеет 10 ячеек в строке, а на том листе, куда переноситься (лист2 например) необходимы только 4 первых ячейки в строке (4 столбца)?

 

Hugo

Пользователь

Сообщений: 23249
Регистрация: 22.12.2012

Range(Cells(i, 1), Cells(i, 4)).Copy

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Если правильно понял вопрос:  
Range(Cells(i, 1), Cells(i, 4)).Copy .Cells(LastRow + 1, 1)

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

#16

21.08.2012 16:02:45

{quote}{login=}{date=21.08.2012 03:52}{thema=}{post}Просматривая ответ на интересующий меня вопрос{/post}{/quote}Просматривая Ваш вопрос, обнаружил, что Вы не подписываетесь. Анонимно легче? Наоборот: многие их тут не любят

Всем добра.

Задача:

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

Мысли:

Когда у меня первый раз спросили про такое, я ответил- фигушки, без макроса никак, по крайней мере для неопределенного количества найденных строк.

 Спустя время мне задали этот вопрос повторно и тут меня осенило — это не невозможно.

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

на деле это выглядит так:
Искать будем значение из ячейки $B$5 (в этой ячейке динамический выпадающий список) в другом листе:

=ПОИСКПОЗ($B$5;ЛИСТ2!B:B;0)

ПоискПоз — ищет вхождения в диапазоне
Результат формулы = 8, т.е. восьмая строчка

Проверяем, и вправду так.

Последующие ячейки при расчете будут учитывать предыдущую:

=ПОИСКПОЗ($B$5;ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2»;ЛОЖЬ);0)+C16)

Во втором аргументе формулы ПоискПоз ( ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2»;ЛОЖЬ); ) формируется диапазон $B$0+предыдущее положение+1 т.е. R9C2:R1000C2
Т.о. мы исключаем уже найденную строку из массива для поиска.

В итоге вот такой формулой

ДВССЫЛ(«Карт.сч.!R»&C16&»C5»;ЛОЖЬ)

Мы получаем значение из пятой колонки строки номер 8, и так далее.

Это можно записать в одну ячейку, но в моем случае получается очень громоздкая конструкция:

=ЕСЛИОШИБКА(ЕСЛИ(ЕПУСТО(ДВССЫЛ(«Карт.сч.!R»&ЕСЛИОШИБКА(ПОИСКПОЗ(ДВССЫЛ(«$B»&СТРОКА()-B17-10;ИСТИНА);ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2″;ЛОЖЬ);0)+C16;»-«)&»C5″;ЛОЖЬ));»АВАНС «;»»)&ТЕКСТ(ДВССЫЛ(«Карт.сч.!R»&ЕСЛИОШИБКА(ПОИСКПОЗ(ДВССЫЛ(«$B»&СТРОКА()-B17-10;ИСТИНА);ДВССЫЛ(«Карт.сч.!R»&$C16+1&»C2:R[1000]C2″;ЛОЖЬ);0)+C16;»-«)&»C3″;ЛОЖЬ);»дд.ММ.гггг»);»»)

Для двойных/тройных условий в поиске предлагаю использовать доп колонку, в таблице поиска, с конкатенацией колонок.

MulTEx »

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

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

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


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


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

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

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

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

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

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

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

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


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

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

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Excel копирование строки в строку
  • Excel копирование строк по значению
  • Excel копирование строк их других листов по условию
  • Excel копирование ссылок на листы
  • Excel копирование ссылка на одну ячейку

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии