Всем добра.
Задача:
В некую таблицу скопировать все значения из столбца другой таблицы где значение справа равно некоторому.
Мысли:
Когда у меня первый раз спросили про такое, я ответил- фигушки, без макроса никак, по крайней мере для неопределенного количества найденных строк.
Спустя время мне задали этот вопрос повторно и тут меня осенило — это не невозможно.
Итак в чем заключается мысль?, а мысль в доп столбце, в котором хранится номер позиции вхождения в некотором диапазоне, где начало диапазона определяется предыдущим.
на деле это выглядит так:
Искать будем значение из ячейки $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″;ЛОЖЬ);»дд.ММ.гггг»);»»)
Для двойных/тройных условий в поиске предлагаю использовать доп колонку, в таблице поиска, с конкатенацией колонок.
Авткопирование содержимого ячейки на другой лист по условию |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Миха73 Пользователь Сообщений: 6 |
Доброе время суток, уважаемые форумчане! Столкнулся с проблемой, которая, откровенно говоря, привела меня в некий ступор. |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Чем автофильтр не устраивает? Я сам — дурнее всякого примера! … |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
Если сломан автофильтр… |
Миха73 Пользователь Сообщений: 6 |
огромное спасибо! |
а нельзя сделать, чтобы при заполнении Листа3 данные добавлялись, а не заполнялись по новой? |
|
Миха73 Пользователь Сообщений: 6 |
а нельзя сделать, чтобы при заполнении Листа3 данные добавлялись, а не заполнялись по новой? |
Hugo Пользователь Сообщений: 23257 |
Как такой вариант — ставите вызов кода Юрия на событие активации листа (отключив обновление экрана на время работы). If .Cells(i, 3) Like «######» Then |
Миха73 Пользователь Сообщений: 6 |
попробую с этим разобраться |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
{quote}{login=}{date=11.11.2011 10:38}{thema=}{post}а нельзя сделать, чтобы при заполнении Листа3 данные добавлялись, а не заполнялись по новой?{/post}{/quote}А смысл? Результат будет тот же самый. Берите что дают, а то скачаю обратно. |
Миха73 Пользователь Сообщений: 6 |
Смысл есть, при изменении уже скопированных строк на Листе3 и последующем выполнении макроса измененные данные, на Листе3, будут переписаны и нужно будет либо по новой вносить изменения или дублировать полученные данные на другом листе. |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
Изменяют строки обычно в исходных данных, а по ним уже строится отчёт. Если Вы планируете изменять сам отчёт — делайте это на копии листа 3. |
Миха73 Пользователь Сообщений: 6 |
да, обычно так и происходит, в смысле изменение данных в исходном документе, работать с копией полученного отчета, не проблема, вот только при создании нового отчета нужно будет учитывать, ранее полученный отчет… |
Просматривая ответ на интересующий меня вопрос, нашел данную тему. Очень помогла. Скажите, а как можно было бы ограничить число копируемых ячеек в строке, например если исходная таблица имеет 10 ячеек в строке, а на том листе, куда переноситься (лист2 например) необходимы только 4 первых ячейки в строке (4 столбца)? |
|
Hugo Пользователь Сообщений: 23257 |
Range(Cells(i, 1), Cells(i, 4)).Copy |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
Если правильно понял вопрос: |
Юрий М Модератор Сообщений: 60588 Контакты см. в профиле |
#16 21.08.2012 16:02:45 {quote}{login=}{date=21.08.2012 03:52}{thema=}{post}Просматривая ответ на интересующий меня вопрос{/post}{/quote}Просматривая Ваш вопрос, обнаружил, что Вы не подписываетесь. Анонимно легче? Наоборот: многие их тут не любят |
Как скопировать ячейки, если столбец содержит определенное значение / текст в Excel?
Предположим, у вас есть длинный список данных, и теперь вы хотите найти и скопировать ячейки, содержащие определенное значение или текст в Excel, как быстро это сделать? Здесь мы предлагаем вам три метода копирования ячеек, если столбец содержит определенное значение или текст в Excel.
- Скопируйте ячейки, если столбец содержит определенное значение / текст с помощью команды «Фильтр»
- Скопируйте ячейки, если столбец содержит определенное значение / текст с помощью команды поиска
- Скопируйте ячейки, если столбец содержит определенное значение/текст с Kutools for Excel
Скопируйте ячейки, если столбец содержит определенное значение / текст с помощью команды «Фильтр»
Команда «Фильтр» может помочь нам легко отфильтровать ячейки, соответствующие определенным критериям в столбце, поэтому мы можем легко скопировать эти конкретные ячейки в Excel.
1. Выберите столбец, в который вы будете копировать ячейки, если столбец содержит определенное значение или текст, а затем щелкните значок Данные > Фильтр.
2. Теперь щелкните стрелка в левой части первой ячейки выбранного столбца, а затем щелкните значок Текстовые фильтры > Комплект из выпадающего списка.
3. В открывшемся диалоговом окне Custom AutoFilter введите конкретный текст в поле за содержит и нажмите OK кнопку.
Теперь все ячейки, содержащие определенный текст, отфильтровываются сразу.
4. Выберите все отфильтрованные ячейки в определенном столбце и скопируйте их, нажав Ctrl + C одновременно.
5. Выберите пустую ячейку и вставьте эти ячейки, нажав Ctrl + V одновременно.
Легко выбрать / выделить / скопировать всю строку, если столбец содержит то же значение, что и значения в другом списке в Excel
Kutools for ExcelАвтора Выберите одинаковые и разные ячейки Утилита позволяет пользователям Excel сравнивать два столбца, а затем легко выбирать / копировать / выделять целые строки на основе одинаковых или разных значений.
Скопируйте ячейки, если столбец содержит определенное значение / текст с помощью команды поиска
Этот метод поможет вам найти все ячейки, содержащие определенное значение или текст, с помощью команды «Найти», а затем легко скопировать все найденные ячейки.
1. Выберите столбец, в который вы будете копировать ячейки, если столбец содержит определенное значение или текст.
2. Откройте диалоговое окно «Найти и заменить», нажав кнопку Ctrl + F тем временем, затем в диалоговом окне «Найти и заменить» введите конкретный текст в поле Найти то, что и нажмите Найти все кнопку.
Внимание: Вы также можете открыть диалоговое окно «Найти и заменить», нажав Главная > Найти и выбрать > Найти.
Затем обнаруживаются все ячейки, содержащие определенные ячейки в определенном столбце, и они перечисляются в нижней части диалогового окна «Найти и заменить».
3. Выделите все найденные ячейки, нажав Ctrl + A ключи и закройте диалоговое окно «Найти и заменить». Теперь все ячейки, содержащие определенный текст, выделяются в определенном столбце.
4. Скопируйте всю выделенную ячейку, нажав Ctrl + C ключи, а затем выберите пустую ячейку и вставьте их, нажав Ctrl + A ключи.
Скопируйте ячейки, если столбец содержит определенное значение/текст с Kutools for Excel
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
1. Выберите указанный столбец и щелкните Кутулс > Выберите > Выберите специальные ячейки.
2. В открывшемся диалоговом окне Select Special Cells,
(1) В Тип выбора раздел, проверка Ячейка вариант;
(2) В Конкретный тип раздел, щелкните первое поле и выберите Комплект из раскрывающегося списка, а затем введите указанный текст (в нашем случае введите сумма) в следующее поле;
(3) Щелкните значок Ok кнопка. Затем появляется вторая строка Select Specific Cells, показывающая, сколько ячеек выбрано. Щелкните значок OK чтобы закрыть его.
3. Теперь выбираются ячейки, содержащие определенное значение / текст. Нажмите Ctrl + C ключи для их копирования; выберите ячейку, в которую вы будете вставлять ячейки, и нажмите Ctrl + V ключи.
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-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
автоматическое копирование данных по условию
Автор 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 -
►
автоматическое копирование данных по условию