Всем добра.
Задача:
В некую таблицу скопировать все значения из столбца другой таблицы где значение справа равно некоторому.
Мысли:
Когда у меня первый раз спросили про такое, я ответил- фигушки, без макроса никак, по крайней мере для неопределенного количества найденных строк.
Спустя время мне задали этот вопрос повторно и тут меня осенило — это не невозможно.
Итак в чем заключается мысль?, а мысль в доп столбце, в котором хранится номер позиции вхождения в некотором диапазоне, где начало диапазона определяется предыдущим.
на деле это выглядит так:
Искать будем значение из ячейки $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″;ЛОЖЬ);»дд.ММ.гггг»);»»)
Для двойных/тройных условий в поиске предлагаю использовать доп колонку, в таблице поиска, с конкатенацией колонок.
Здравствуйте, уважаемые форумчане.
Не прошло и полгода, и я опять прошу Вашей помощи.
Отписываюсь в этой теме, т.к. сложности плавно вытекли из неё, суть вопроса осталась та же, так как предложенное AlexM решение проблемы теперь не помогает. Проблема была такая:
«Есть файл (во вложении), в котором существует огромный список адресов (каждая строка это отдельный адрес с кучей нужной информации по нему).
Каждая строка (т.е. каждый адрес) имеет 2 состояния (столбец «H») «Закрыт» и «В работе».
Задача у меня такая: скопировать на другой лист, который «ОТК», все строки, имеющие статус «В работе».»
Теперь же появилось третье состояние этого столбца (в примере P) — «На выплату» (дополнительно меня нагрузили теперь бухгалтерскими вопросами) и данная формула не помогает:
Код
=ИНДЕКС(Адреса!$A$1:$A$175;НАИМЕНЬШИЙ(ЕСЛИ(Адреса!$H$5:$H$175<>"Закрыт";СТРОКА($A$5:$A$175));СТРОКА(A1)))
, т.к. в листе ОТК теперь выводятся и объекты в работе и на выплату.
Попытка заменить «<> «Закрыт» на «= «В работе» приводит у тому, что пустые клетки выдают ошибку «!#ЧИСЛО».
Собственно 1 вопрос в том, как грамотно поменять формулу, чтобы сохранить функционал.
Есть 2 вопрос, уже бухгалтерский: в том же примере есть окно «Бухгалтерия», в котором я пытался автоматизировать подсчет зарплаты. Т.е. мне надо, чтобы все объекты со статусом «На выплату» автоматически забивались в ведомость, соответственно если одна фамилия встречается более 1 раза, зарплата суммировалась.
Буду благодарен, если кто поможет решить задачу или подскажет, как её победить.
Заранее спасибо.
«ПараВопросов»
1. Если Вы собираетесь на листе «оп-е пр-во 1» новые строки ДОБАВЛЯТЬ СНИЗУ — всё может быть и нормально. Но если Вы их собираетесь ВСТАВЛЯТЬ МЕЖДУ СУЩЕСТВУЮЩИМИ В ПРЕДЕЛАХ ОДНОГО ОТДЕЛА или УДАЛЯТЬ СУЩЕСТВУЮЩИЕ ОБЪЕКТЫ — может с формулами возникнуть потом путаница. Ведь Вы с помощью формул перенесете данные на листы по отделам, а потом на этих листах отделы будут забивать свои данные в столбцах левее этих объектов. В итоге, если кто-то (например Вы) ВСТАВИТ НОВУЮ СТРОКУ, формулы это отследят, и ваши объекты на листах по отделам сдвинутся вниз. И тогда данные, внесенные наа листах отделами, будут уже стоять напротив не своих объектов.
2. У Вас на листе «оп-е пр-во 1» всегда один крестик в строке или может быть несколько (как в примере
ber$erk
-а из сообщ. №2)? Судя по тому, что Вы ставите крестик, а не количество — предположу, что крестик всегда один. Тогда предлагаю вот такой вариант с доп. столбцами на листе «оп-е пр-во 1» и нумерацией по порядку на остальных листах. Показал на листе «оп-е пр-во 2», дальше можете сделать по аналогии, если такой вариант Вас устроит.
3. Выделил желтым те блоки ячеек, которые правил/изменял.
4. У Вас нет однообразия на листах по отделам. Ох и намучаетесь Вы с «Свод 1»
5. Изменил формат файла, чтобы файл стал <100…
автоматическое копирование данных по условию
Автор 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 -
►
автоматическое копирование данных по условию
Как скопировать ячейки, если столбец содержит определенное значение / текст в 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% и сокращает количество щелчков мышью на сотни каждый день!