Всем добра.
Задача:
В некую таблицу скопировать все значения из столбца другой таблицы где значение справа равно некоторому.
Мысли:
Когда у меня первый раз спросили про такое, я ответил- фигушки, без макроса никак, по крайней мере для неопределенного количества найденных строк.
Спустя время мне задали этот вопрос повторно и тут меня осенило — это не невозможно.
Итак в чем заключается мысль?, а мысль в доп столбце, в котором хранится номер позиции вхождения в некотором диапазоне, где начало диапазона определяется предыдущим.
на деле это выглядит так:
Искать будем значение из ячейки $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″;ЛОЖЬ);»дд.ММ.гггг»);»»)
Для двойных/тройных условий в поиске предлагаю использовать доп колонку, в таблице поиска, с конкатенацией колонок.
sergpp Пользователь Сообщений: 31 |
Доброго времени суток, уважаемые знатоки!!! Возможно ли автоматически копировать данные с одного листа на другой, но уже без повторяющихся значений? Заранее всех благодарю за помощь. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
В Эксе возможно все. Но! Боюсь, что ни Экс, ни форумчане не умеют гадать, и что еще хуже, ленятся писать примеры за топикстартеров. Я сам — дурнее всякого примера! … |
Здравствуйте. |
|
sergpp Пользователь Сообщений: 31 |
Прошу прощения. С первым сообшением файл не захотел прикрепляться.)))) |
R Dmitry Пользователь Сообщений: 3103 Excel,MSSQL,Oracle,Qlik |
#5 07.10.2010 21:13:34 {quote}{login=sergpp}{date=07.10.2010 08:46}{thema=}{post}Прошу прощения. С первым сообшением файл не захотел прикрепляться.)))){/post}{/quote} Прикрепленные файлы
|
|
sergpp Пользователь Сообщений: 31 |
{quote}{login=R Dmitry}{date=07.10.2010 09:13}{thema=Re: }{post}{quote}{login=sergpp}{date=07.10.2010 08:46}{thema=}{post}Прошу прощения. С первым сообшением файл не захотел прикрепляться.)))){/post}{/quote} Спасибо, я уже над этим думал. Немного не то. Еще прикрепляю файлик. В нем более подробная информация. |
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
А чё — там расширенный фильтр с отбором уникальных не приспособить? |
sergpp Пользователь Сообщений: 31 |
{quote}{login=Юрий М}{date=07.10.2010 09:38}{thema=}{post}А чё — там расширенный фильтр с отбором уникальных не приспособить?{/post}{/quote} Нет. Уже пытался. Результат нулевой, да и очень долго обрабатывает. |
Юрий М Модератор Сообщений: 60577 Контакты см. в профиле |
Тогда в поиск по темам с выборкой уникальных. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Если никто не ответит, сделаю на выходных. Подождете? Я сам — дурнее всякого примера! … |
sergpp Пользователь Сообщений: 31 |
{quote}{login=KuklP}{date=07.10.2010 10:12}{thema=}{post}Если никто не ответит, сделаю на выходных. Подождете? Конечно. Буду очень признателен. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Я сам — дурнее всякого примера! … |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Чуток почистил перышки. Я сам — дурнее всякого примера! … |
sergpp Пользователь Сообщений: 31 |
#14 12.10.2010 18:12:33 KuklP |
Авткопирование содержимого ячейки на другой лист по условию |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Здравствуйте, уважаемые форумчане.
Не прошло и полгода, и я опять прошу Вашей помощи.
Отписываюсь в этой теме, т.к. сложности плавно вытекли из неё, суть вопроса осталась та же, так как предложенное AlexM решение проблемы теперь не помогает. Проблема была такая:
«Есть файл (во вложении), в котором существует огромный список адресов (каждая строка это отдельный адрес с кучей нужной информации по нему).
Каждая строка (т.е. каждый адрес) имеет 2 состояния (столбец «H») «Закрыт» и «В работе».
Задача у меня такая: скопировать на другой лист, который «ОТК», все строки, имеющие статус «В работе».»
Теперь же появилось третье состояние этого столбца (в примере P) — «На выплату» (дополнительно меня нагрузили теперь бухгалтерскими вопросами) и данная формула не помогает:
Код
=ИНДЕКС(Адреса!$A$1:$A$175;НАИМЕНЬШИЙ(ЕСЛИ(Адреса!$H$5:$H$175<>"Закрыт";СТРОКА($A$5:$A$175));СТРОКА(A1)))
, т.к. в листе ОТК теперь выводятся и объекты в работе и на выплату.
Попытка заменить «<> «Закрыт» на «= «В работе» приводит у тому, что пустые клетки выдают ошибку «!#ЧИСЛО».
Собственно 1 вопрос в том, как грамотно поменять формулу, чтобы сохранить функционал.
Есть 2 вопрос, уже бухгалтерский: в том же примере есть окно «Бухгалтерия», в котором я пытался автоматизировать подсчет зарплаты. Т.е. мне надо, чтобы все объекты со статусом «На выплату» автоматически забивались в ведомость, соответственно если одна фамилия встречается более 1 раза, зарплата суммировалась.
Буду благодарен, если кто поможет решить задачу или подскажет, как её победить.
Заранее спасибо.
автоматическое копирование данных по условию
Автор gitzzz, 25.07.2009, 14:22
« назад — далее »
Добрый день.
Столкнулся с проблемой:
Есть 2 листа. В первом основные данные. Есть призначное поле (да/нет).
Нужно, чтобы при вводе данных в таблицу (когда это поле = «да») автоматически копировалась на второй лист нужная инфа из этой строки данных.
Такие возможности ехсел не знаю, но знаю что они есть)
Подскажите, пожалуйста, как это можно организовать (оперативно)?
Пробовал с помощью ЕСЛИ() но там постоянно выдается ответ ЛОЖЬ. Может макрос какой-нибудь есть?
Заранее, спасибо.
Есть несколько путей:
1. Написать макрос, который будет копировать на свободное место на втором листе значение, введенное в ячейку на первом листе, если рядом ввели признак ДА. Сам я макрос написать не возьмусь, но знаю, что это не обчень сложно. Попробуйте сами использовать макрорекодер для записи собственных действий, а потом поправьте макрос.
2. Использовать сводную таблицу. Опять таки, сам никогда их не использовал, но другим людям нравится.
3. Записать во второй таблице формулы, отображающие значения всех строк (ячеек), содержащий признак ДА.
Проще всего это сделать с помощью дополнительного столбца в первой таблице:
Пусть на листе 1 значения записываются в столбце A, признаки храняться в столбце B.
Тогда в ячейке C1 запишем формулу (и протянем ее по всему столбцу C): =ЕСЛИ(B1=»ДА»;СТРОКА();»»)
После этого переходим на лист 2 и в ячейке A1 записываем формулу (и также протягиваем ее вниз на столько сколько нужно):
=ЕСЛИ(СТРОКА()>СЧЁТ(Лист1!C:C);»»;ИНДЕКС(Лист1!A:A;НАИМЕНЬШИЙ(Лист1!C:C;СТРОКА());1))
Если нужно перенести значения из нескольких столбцов первого листа, то нужно записать несколько формул, поправив агрументы функции ИНДЕКС().
P.S. Важно, чтобы в столбце C первого листа не было лишних цифровых значений.
Если у Вас на листах должна быть шапка, то поэкспериментируйте с добавлений констант вида: СТРОКА()-Const
Нашел интересную статью, но опять возникли трудности с реализацией:
http://stockportal.ru/extrading/archives/225
Помогите разобраться в части кода, начиная с Call QuoteRead(intInstCount)
Кстати та книгде и не наше что это за функция…
Код можно переделать под мою задачу, или это вобще чтото другое?…
Public WithEvents App As Application
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim pRow As Integer, pCol As Integer, intRow As Integer, I As Integer, intInstCount As Integer
Dim pValue As Variant
Dim wInstSheet As Worksheet
Dim wNVSheet As Worksheet
Set wInstSheet = Application.Workbooks("NettoVolume.xlsm").Sheets("Instruments")
Set wNVSheet = Application.Workbooks("NettoVolume.xlsm").Sheets("NV")
intInstCount = wInstSheet.Cells(2, 5)
If Sh.Name = "Котировки" And Target.Column > 1 And Target.Row > 1 And Target.Row < 10 Then
Debug.Print "Вошел в AppEvents"
Call QuoteRead(intInstCount)
For I = 1 To intInstCount
If Instruments(I).ChangeMode = 2 Then
intRow = wInstSheet.Cells(3, 5) + 1
Call Instruments(I).Output(wNVSheet, intRow, 2)
wInstSheet.Cells(3, 5) = intRow
End If
Next I
End If
End Sub
Сводную таблу сделал, но ее обновлять надо, да и пустые значения фильтром убираются…Не автоматизированно всё… Хочется, чтобы все обрабатывалось динамически.
Может кто-н знает как обработать событие при изменении значений в ячейке? Подскажите, пожалуйста. Код так и не смог разобрать…..
Если в ячейке «А1» написать слово ИСТИНА, а нижеследующий код скопировать в модуль листа №1, то, при изменении любой одной ячейки второго столбца, третьи столбцы двух листов этой строки «синхронизируются».
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Count > 1 Then Exit Sub
If .Column = 2 And [A1] Then Sheets(2).Cells(.Row, 3) = .Offset(0, 1)
End With
End Sub
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли
- Профессиональные приемы работы в Microsoft Excel
-
►
Обмен опытом -
►
Microsoft Excel -
►
автоматическое копирование данных по условию
Эта статья может вам помочь для автоматического копирования и вставки значения ячейки в текущем листе или с одного листа на другой без использования сочетаний клавиш.
Автоматическое копирование и вставка ячейки в текущий лист или с одного листа на другой с формулой
Автоматическое копирование и вставка ячейки в текущий лист с помощью VBA
Скопируйте и вставьте несколько диапазонов на текущий лист или с одного листа на другой с помощью Kutools for Excel
Автоматическое копирование и вставка ячейки в текущий лист или с одного листа на другой с формулой
Вы можете использовать формулу для автоматического копирования и вставки ячейки. Пожалуйста, сделайте следующее.
1. Чтобы скопировать и вставить ячейку в текущий лист, например, скопировать ячейку с A1 в D5, вы можете просто выбрать ячейку назначения D5, а затем ввести = A1 и нажмите клавишу Enter, чтобы получить значение A1.
2. Для копирования и вставки ячейки с одного листа на другой, например для копирования ячейки A1 листа Sheet1 в ячейку D5 листа Sheet2, выберите ячейку D5 на листе Sheet2, затем введите = Лист1! A1 и нажмите клавишу Enter, чтобы получить значение.
Tips: Целевая ячейка связана с скопированной ячейкой и будет изменена по мере изменения исходной ячейки.
Автоматическое копирование и вставка ячейки в текущий лист с помощью VBA
Следующий код VBA помогает скопировать ячейку или диапазон ячеек и вставить их в указанные ячейки на текущем листе.
1. Нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.
2. в Microsoft Visual Basic для приложений окна, нажмите Вставить > Модули. Затем скопируйте и вставьте приведенный ниже код VBA в окно модуля.
Код VBA: автоматическое копирование и вставка ячейки в текущий лист
Sub RangeTest()
On Error Resume Next
Dim xRg As Range
Set xRg = Application.Selection
Range("A1 ").Copy Range("D5")
xRg.Select
End Sub
Внимание: В коде A1 — это ячейка, которую вы скопируете, а D5 — это ячейка назначения для размещения значения ячейки A1. Для автоматического копирования и вставки диапазона ячеек замените ячейку диапазоном, например замените A1 на A1: A10 и замените D5 на D1: D10.
3. нажмите F5 нажмите клавишу для запуска кода, то определенная ячейка (диапазон) будет автоматически скопирована и вставлена в указанную ячейку (диапазон), а также форматирование ячейки.
Скопируйте и вставьте несколько диапазонов на текущий лист или с одного листа на другой с помощью Kutools for Excel
Если у вас есть несколько диапазонов, которые нужно скопировать одновременно, вы можете попробовать Копировать диапазоны полезности Kutools for Excel.
1. Выберите несколько диапазонов, которые нужно скопировать, удерживая Ctrl ключ. Затем нажмите Кутулс > Копировать диапазоны. Смотрите скриншот:
2. в Копировать несколько диапазонов диалоговое окно, вы можете увидеть, что выбранные диапазоны перечислены в Диапазоны для копирования коробка. Затем укажите параметр в Специальная вставка раздел, проверьте Включая высоту строки или Включая ширину столбца поле, как вам нужно, и, наконец, нажмите OK кнопка. Смотрите скриншот:
3. В секунду Копировать несколько диапазонов диалоговом окне укажите пустую ячейку для вставки выбранных диапазонов, а затем щелкните значок OK кнопку.
Внимание: если вы хотите вставить выбранные диапазоны на другой лист, выберите ячейку на этом листе и нажмите кнопку «ОК» во втором диалоговом окне «Копировать несколько диапазонов».
Теперь выбранные диапазоны копируются и вставляются в указанное место.
Если вы хотите получить бесплатную пробную версию (30-день) этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Скопируйте и вставьте несколько диапазонов в текущий лист или с одного листа на другой
Статьи по теме:
- Как автоматически заполнять другие ячейки при выборе значений в раскрывающемся списке Excel?
- Как выполнить автозаполнение при вводе в раскрывающемся списке Excel?
- Как автоматически заполнять дату в ячейке, когда соседняя ячейка обновляется в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Порой возникает необходимость разделить табличные данные на части и разнести их на разные листы. Для того, чтобы разделить таблицу на составные части можно использовать стандартные средства Excel, такие как сортировка и фильтрация, а можно упростить и ускорить этот процесс, используя выборочное копирование строк по условию с последующей вставкой на новый лист либо в новую книгу.
Работе со строками был посвящен целый ряд публикаций о том как выборочно удалять и/или скрывать строки по условию, как добавлять новые пустые строки в таблицу, как выделять строки по условию или производить их выделение с заданным шагом. Логичным продолжением этого цикла статей будет тема копирования строк, подходящих под заданные условия на новый лист или в новую рабочую книгу.
Обойдем стороной ручной труд с использованием копирования и вставки предварительно выделенных строк, а также использование сортировки и различных фильтров для выбора нужных строк и рассмотрим способ, позволяющий быстро разнести строки с определенными значениями по разным листам или книгам. Делается это при помощи надстройки для Excel.
Использование надстройки позволяет:
1. Одним кликом мыши вызывать диалоговое окно макроса прямо из панели инструментов Excel;
2. Задавать значение для поиска;
3. Задавать несколько значений для поиска через символ-разделитель «;» точку с запятой;
4. Учитывать либо не учитывать регистр при поиске заданных значений;
5. Выбирать диапазон ячеек для поиска заданных значений;
6. При необходимости устанавливать ограничения для выбранного диапазона;
7. Выбирать одно из восьми условий для выбранных ячеек:
а) совпадает с искомым значением;
б) не совпадает с искомым значением;
в) содержит искомое значение;
г) не содержит искомое значение;
д) начинается с искомого значения;
е) не начинается с искомого значения;
ж) заканчивается искомым значением;
з) не заканчивается искомым значением.
8. Выбирать в качестве места вставки для скопированных строк либо новый лист, либо новую рабочую книгу.
макрос (надстройка) для выборочного копирования строк по условию на новый лист
А знаете ли Вы, что все листы рабочей книги можно быстро превратить в отдельные файлы?