Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 След.
Формирование списка из наименований по критерию
 
Сергей Евдокимов, эх, жаль, функция ФИЛЬТР только в Офисе 365. Посмотрел сейчас официальную документацию к этой функции. А её разве нельзя сразу в диспетчер имён? Обязательно в ячейку?

Цитата
Сергей Евдокимов: массив должен же где-то храниться.
Ну есть же в экселе формулы массива, например) Или та же функция СМЕЩ способна делать это на лету. Странно, что в более ранних версиях экселя нет чего-то наподобие ФИЛЬТР, может и нашлось бы решение.

IKor, посмотрел статью, спасибо. Вот еще раз убедился, что ФИЛЬТР - это почти то, что нужно, если бы она могла работать на лету, сразу в именованном диапазоне.
Формирование списка из наименований по критерию
 
Понял, спасибо. А если вразнобой, без сортировки, то только макросом?
Формирование списка из наименований по критерию
 
Цитата
Mershik написал:
,сортировать нужно или макрос)
Что имеете в виду сортировать?) Как именно?
Формирование списка из наименований по критерию
 
Добрый день, уважаемые форумчане. Возник интересный вопрос: реально ли сформировать выпадающий список из наименований, отвечающих определенному критерию, БЕЗ промежуточных столбцов и желательно без макросов?

Суть в чем: допустим есть таблица с 2 столбцами, в первом - наименования, в другом - критерии (для примера - А и Б). Необходимо создать формулу, которая формировала бы список из наименований по критерию Б и которую можно было бы загнать в диспетчер имён. Знаю решения, где люди делают через доп. столбец и функцию НАИМЕНЬШИЙ - в этом доп. столбце формулой подтягиваются все нужные наименования, а потом просто делается именованный диапазон необходимых размеров. Этот вариант не подходит, хотелось бы именно "на лету", без промежуточных вычислений. Функция НАИМЕНЬШИЙ здесь явно не подходит, т.к. нужен динамический k-тый аргумент, которого явно не будет в диспетчере имён...

Файл с примером прилагаю. Там создана таблица и в диспетчере имён прописана простейшая формула, которая просто формирует список нужных размеров, но не учитывает критерии:
Код
=СМЕЩ(Таблица1[Наименование];0;0;СЧЁТЗ(Таблица1[Наименование]);1)


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

В столбце С:
Код
=ЕСЛИ(СТРОКА()<СЧЁТЗ(Таблица1[Наименование])+1;ИНДЕКС(Таблица1[Наименование];СТРОКА());ИНДЕКС(Таблица2[Наименование];СТРОКА()-СЧЁТЗ(Таблица1[Наименование])))

В именованном диапазоне:
Код
=$C$1:ИНДЕКС($C:$C;СЧЁТЗ(Таблица1[Наименование])+СЧЁТЗ(Таблица2[Наименование]))

Знатоки, а может есть еще варианты? Здесь минус в том, что по мере разрастания таблиц формулу в столбце С тоже придется протягивать постоянно. Либо сразу бахнуть строк на 500, но это грубые методы годов так 2003-их, а хочется решение поаккуратнее. Эксель стоит 2016, неужели разрабы ничего нового в этом плане не придумали?
Выпадающий список из двух динамических диапазонов
 
Доброго времени суток. Подскажите, существует ли вообще решение для такой задачи:

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

С одной таблицей то всё просто, реализовал через формулу:

Код
=ДВССЫЛ("Таблица1[Наименование]")


А как "дополнить" этот список из наименований второй таблицы и желательно без макросов?
Изменено: flashertheone - 06.11.2020 18:44:59
Наименования оборудования, где коэффициент износа >0, перенести в другую таблицу
 
Михаил Лебедев, думал над вашим предложением... К сожалению, такой вариант не подходит. Исходная таблица - это массив данных, который будет заполнять пользователь. Там будут разные Значения - где-то будет 1, где-то меньше 1, где-то вообще не будет (пустая ячейка). И скрывать это фильтром не нужно, т.к. таблица предназначена не для этого. А делать такой же столбец Значение в таблице Результат - это почти то же самое, что объединить обе таблицы. Тогда зачем все эти фильтры, ВПРы и прочее? Как говорится, бери, да заполняй сразу всё руками в таблице Результат)

А вот использовать эту идею немного в другом русле кажется неплохой идеей (хотя и не совсем то, что я хотел). Использовать одну из формул выше для того, чтобы подтягивать значения из исходной таблицы, но не в таблицу Результат, а на технический лист (можно его даже скрыть будет). И уже из этих значений будет формироваться список в таблице Результат. Но опять же, это ручное заполнение.
Наименования оборудования, где коэффициент износа >0, перенести в другую таблицу
 
Михаил Л, нет, просто планировал сделать несколько подобных таблиц на одном листе, одну под одной. А то листов и так достаточно в исходном документе, не хочется плодить ещё, разнося каждую табличку по отдельному листу. Но, видимо, придется именно так и делать)
Наименования оборудования, где коэффициент износа >0, перенести в другую таблицу
 
Михаил Л, ну я в макросах вообще не силен, поэтому отчасти и не люблю их) А если через PQ сделать, то эту таблицу смогут просматривать только те пользователи, у кого установлен PQ? И сам Excel должен быть, наверное, не ниже 2013, правильно?
Изменено: flashertheone - 24.06.2020 20:57:55
Наименования оборудования, где коэффициент износа >0, перенести в другую таблицу
 
Тогда, если не сложно, выложите решение макросом. Может быть пересмотрю свое отношение к ним)
Наименования оборудования, где коэффициент износа >0, перенести в другую таблицу
 
В принципе, вариант Михаила почти идеальный. Формулы короткие, да и работают не только с уникальными значениями. Вот если бы заставить вторую таблицу менять размеры в зависимости от заполненности... Но похоже, что без макроса нереально. А то иначе получается, что если вторая таблица слишком маленькая, ее придется растягивать, чтобы увидеть все наименования. Если слишком большая - появятся пустые строки, которые вообще не нужны.
Наименования оборудования, где коэффициент износа >0, перенести в другую таблицу
 
Mershik,
Да, я понял. Возьму тогда вариант Михаила, если не найдется более хорошего решения. Там и формулы покороче)
Спасибо за попытку)
Наименования оборудования, где коэффициент износа >0, перенести в другую таблицу
 
Михаил Л и Mershik - у вас одинаковые по сути решения, только первое через формулу массива и "умные" адреса, а другое - через обычные ИНДЕКС + ПОИСКПОЗ. Но пустые строки в конце в обоих решениях присутствуют. А наименования могут быть и с повторениями.
Наименования оборудования, где коэффициент износа >0, перенести в другую таблицу
 
Здравствуйте! Помогите, пожалуйста, с решением. Задача состоит в следующем:

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

Сложность №1 - обе таблицы имеют растягивающийся диапазон, а значит вторая таблица должна вмещать ровно столько строк, сколько было отобрано из первой таблицы по заданному условию (коэффициент >0).

Сложность №2 - во второй таблице не должно быть пустых строк ни между наименованиями, ни в конце. Я пробовал и через формулы массива, и через ИНДЕКС, но у меня всегда появлялись пустые строки между наименованиями.

Сложность №3 - это должна быть не сводная таблица, т.к. планируется добавить к ней еще столбцы (в примере это столбцы 1, 2 и 3) и работать с ними тоже с помощью формул.

Пример прикрепил. На листе 1 - исходная таблица, на листе 2 - желаемый результат.

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

Код
Sub DelRowsWithBlankCell()
  Dim rg As Range:  On Error Resume Next
  With Range("A6:F505").SpecialCells(xlCellTypeBlanks).EntireRow
    If Err = 0 Then .ClearContents: .Copy Cells(506, 1): .Delete
  End With
End Sub


.Delete тут не подходит. Можно, например оставить этот кусок кода

Код
Sub DelRowsWithBlankCell()
  Dim rg As Range:  On Error Resume Next
  With Range("A6:F505").SpecialCells(xlCellTypeBlanks).EntireRow
    If Err = 0 Then .ClearContents
  End With
End Sub


Этот макрос будет очищать строки, если хотя бы одна из ячеек строки в указанном диапазоне пустая. Это то, что надо. Но как сделать так, чтобы пустых строк НЕ БЫЛО между заполненными строками? Без .Delete. Приложу скриншоты для "понятности", а то слов много, а на примере очень легко осознать, какого именно результата нужно добиться)
Ребят, выручайте, третий день не могу результата добиться...
Изменено: flashertheone - 22.05.2017 19:44:06
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
JayBhagavan, прочитал, буду стараться внедрять)

В общем, оказалось, что макрос от Ігор Гончаренко работает не совсем верно. При применении его в исходном файле получилась следующая ситуация:
Исходный файл состоит не только из одного этого листа, а из нескольких. Данные вводятся на лист2 в диапазон A6:F505, как я показал в примере. А на остальных листах в ячейках возвращаются данные, в зависимости от определенного условия через функции ИНДЕКС и ПОИСКПОЗ. То есть, на остальных листах стоят ссылки на этот диапазон. И при применении макроса от Ігор Гончаренко, ссылки портятся и приобретают вид не $A$6:$F$505, а #ССЫЛКА, соответственно остальные листы теряют свою функциональность...
При применении макроса от Юрий М такой проблемы нет, но этот макрос не работает на последнюю заполненную строку диапазона. То есть, например, мы скопировали данные на первые 6 строк, из любой ячейки 6-ой строки мы удаляем значение, применяем макрос и он эту строку оставляет (а должен очищать). Поэтому попрошу добрых людей допилить вот этот макрос таким образом, чтобы он работал и на последнюю строку тоже.

Код
Sub Macro1()
Dim LastRow As Long, i As Long, Rng As Range
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Set Rng = Range(Cells(LastRow + 1, 1), Cells(LastRow + 1, 6))
    For i = LastRow To 6 Step -1
        If Application.WorksheetFunction.CountBlank(Range(Cells(i, 1), Cells(i, 6))) > 0 Then
            Range(Cells(LastRow, 1), Cells(i + 1, 6)).Cut Cells(i, 1)
            cnt = cnt + 1
        End If
    Next
     
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Set SourceRange = Range(Cells(LastRow, 1), Cells(LastRow, 6))
    Set fillRange = Range(Cells(LastRow, 1), Cells(LastRow + cnt, 6))
    SourceRange.AutoFill Destination:=fillRange, Type:=xlFillFormats
End Sub


P.S. надо было в примере какие-нибудь связи между листами изобразить, а то подумал, что это не так уж важно, а оказалось в итоге, что сам запутался и других запутал)
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Я макрорекордером сам немного допилил макрос от Ігор Гончаренко из поста №4. Совсем уж дилетантский макрос получился или норм?) Работает, в принципе, как надо...
Код
Sub DelRowsWithBlankCell()
' Поиск и удаление пустых и частично заполненных строк, а также скрытие всех строк, начиная с 506-й
  Dim rg As Range:  On Error Resume Next
  With Range("A6:F505").SpecialCells(xlCellTypeBlanks).EntireRow
    If Err = 0 Then .ClearContents: .Copy Cells(506, 1): .Delete
  End With
  Rows("506:506").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.EntireRow.Hidden = True
    Range("A6").Select
End Sub
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
JeyCi, спасибо, это работает, но я только сейчас заметил, что этот макрос не удаляет последнюю строку. Вот попробуйте в файле с примером удалить из последней заполненной строки (№10) значение из любой ячейки, а затем активировать макрос . Он не удалит эту строку =(
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Юрий М
Прикрепил пример с нужным оформлением. Как и в тот раз, на листе 1 - исходные данные, на листе 2 - что должно получиться после выполнения макроса.
Изменено: flashertheone - 22.05.2017 00:45:51
Макрос на скрытие листов по разным условиям., если определенная ячейка на каждом из листов пустая
 
Sanja, Юрий М
Спасибо, выручили))
Макрос на скрытие листов по разным условиям., если определенная ячейка на каждом из листов пустая
 
Sanja
Спасибо! А можно попросить еще один макрос, немного для другого случая.
Если имя листа - число от 1 до 50, то этот лист должен скрываться. Располагаться кнопка будет так же на листе 2.
Изменено: flashertheone - 21.05.2017 22:44:39
Макрос на скрытие листов по разным условиям., если определенная ячейка на каждом из листов пустая
 
Цитата
Он будет выглядеть потрясающе!
:D
Цитата
Что такое 'фигурная кнопка' и где она будет располагаться?
Обычная кнопка из любой фигуры. Не ActiveX кнопка, в смысле)
Будет располагаться на листе 2.
Макрос на скрытие листов по разным условиям., если определенная ячейка на каждом из листов пустая
 
Привет!
Подскажите, как будет выглядеть макрос под фигурную кнопку, который проверял бы значение в ячейке B9 на каждом из листов, и если на каком-то из листов она пустая, то он скрывал бы эти листы.
В примере после работы макроса должны быть скрыты листы 3 и 4.
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Цитата
Может циклом? Обрамление ячеек можно потом добавить на весь диапазон.
Это в примере лишь обрамление, а в исходной таблице немного другая стилистика, там некоторые ячейки и цветами закрашены =)
Если так будет реально проще, я тогда скину пример с другим оформлением...
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Цитата
откройте исходный файл, посмотрите а строку 506, она видна?
У меня не видна, и не должна быть видна. Может, не тот файл прикрепил. Прикрепляю еще раз...
Ваш последний макрос скрывает все пустые строки в диапазоне A6:F505, а начиная с 506-й строки наоборот открывает...
Еще раз попробую объяснить:
Есть 500 строк (A6:F505). Нужно, чтобы в этом диапазоне они были открыты, а начиная с 506-й - скрыты.
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Ігор Гончаренко

Исходный файл или пример, который я прикрепил?
Я выполняю каждый Ваш макрос и смотрю результат.
После выполнения последнего макроса видна и 506-я строка и последующие...
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Цитата
3-й вариант... зачетный
Эффект тот же, что и от второго варианта, не скрывает лишние строки...
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Юрий М
Строка не удаляется.
В примере таблицы именно так и показано =)
Как было 500 открытых строк (A6:F505), так и должно остаться, с сохранением стилей.
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Ігор Гончаренко
Почти то, что надо, но, похоже, придется добавить еще пару строк)))
До применения макроса все строки, начиная с 506-ой были скрыты, а после - открылись все...
Все бы ничего, но требуется сохранить нужную стилистику таблицы, в том числе и количество скрытых строк.
То есть, Вашему макросу надо бы добавить команду, чтобы он скрывал опять все строки, начиная с 506-ой. Ну или поменять алгоритм его выполнения, тут я не знаю, как Вам удобнее...

Юрий М
Вы выдернули из контекста отрывок, не дочитав до конца =)
Я писал :
Цитата
А затем, чтобы образовавшиеся пустые строки тоже удалялись. Опять же, желательно не удаление всей строки, а каким-то другим способом это делать...
Макрос для удаления значений из строк по определенному критерию, и удаления (смещения) образовавшихся пустых строк
 
Цитата
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Этот макрос все же удаляет пустые строки, а нужно, чтобы не удалял, а сдвигал значения из последующей строки на пустую (если такое возможно). Грубо говоря, чтобы между первой и последней строчкой таблицы не было пустых строк. Ну а в целом, если не получится осуществить задуманное, возьму Ваш макрос, спасибо.
Изменено: flashertheone - 21.05.2017 19:06:21
Страницы: 1 2 3 4 След.
Наверх