Доброго дня! Не отправил в раздел VBA, потому как решение , как мне кажется может быть формульное... Прошу помощи!! Не получается решить следующую задачу: В таблице есть VBA вставка, ранжирующая строки графы "Товар" по алфавиту. После ранжирования подключается вычисление в динамической таблице результатов по данным в строке с выводом итогов в таблице. Теперь появилась необходимость автоматической вставки строки с промежуточным подсчетом данных о количестве, при появлении каждой новой Модели в столбце "Товар". :oops: Проблема в том, что порядок ввода данных может быть любой, как в алфавитном порядке по одной Модели, так и методом Копировать\Вставить множества строк из Листа "Модель", то есть количество строк может быть любым в зависимости от конкретного случая. При этом итоговые результаты таблицы должны подсчитываться по старому алгоритму. Для пояснения прилагаю файл. В нем Лист: Нак1-то, как работает сейчас, а Лист: "Пример", как он должен выглядеть при любой последовательности ввода данных.
Доброго дня! Не отправил в раздел VBA, потому как решение , как мне кажется может быть формульное... Прошу помощи!! Не получается решить следующую задачу: В таблице есть VBA вставка, ранжирующая строки графы "Товар" по алфавиту. После ранжирования подключается вычисление в динамической таблице результатов по данным в строке с выводом итогов в таблице. Теперь появилась необходимость автоматической вставки строки с промежуточным подсчетом данных о количестве, при появлении каждой новой Модели в столбце "Товар". :oops: Проблема в том, что порядок ввода данных может быть любой, как в алфавитном порядке по одной Модели, так и методом Копировать\Вставить множества строк из Листа "Модель", то есть количество строк может быть любым в зависимости от конкретного случая. При этом итоговые результаты таблицы должны подсчитываться по старому алгоритму. Для пояснения прилагаю файл. В нем Лист: Нак1-то, как работает сейчас, а Лист: "Пример", как он должен выглядеть при любой последовательности ввода данных.Voin
В файле есть Лист "Модель" В нем Столбец- "Товар". Первые два слова определяют саму Модель. Третье слово цвет, далее размер. Вот Модель это два первых слова в данное сейчас. В будущем может появиться еще какое-то определяющее слово, например: "Небо штаны костюмные". Но первые два слова "Небо штаны" все равно зададут Модель . Кроме того, есть Столбец "Модель". В нем так же однозначно задается Модель. Новые строки в столбец "Товар" заносятся оператором методом копирования из Листа "Модель". Скопировать/вставить может быть несколько строк или одна.
В файле есть Лист "Модель" В нем Столбец- "Товар". Первые два слова определяют саму Модель. Третье слово цвет, далее размер. Вот Модель это два первых слова в данное сейчас. В будущем может появиться еще какое-то определяющее слово, например: "Небо штаны костюмные". Но первые два слова "Небо штаны" все равно зададут Модель . Кроме того, есть Столбец "Модель". В нем так же однозначно задается Модель. Новые строки в столбец "Товар" заносятся оператором методом копирования из Листа "Модель". Скопировать/вставить может быть несколько строк или одна.Voin
Сообщение отредактировал Voin - Четверг, 19.09.2019, 17:13
С трудом представляю этот процесс. То есть оператор ввел новое название, строки отсортировались по столбцу В при этом строки с итоговыми значениями все оказались внизу таблицы, потому что у них в столбце В пусто. Теперь надо эти итоговые строки удалить и заново разбить таблицу по моделям и подвести итоги. И так каждый раз при добавлении новых наименований. Как-то сложновато...
Насколько необходима динамическая таблица? Без неё можно было использовать промежуточные итоги. Или, как вариант, считать итоговые значения в отдельном столбце, например, на первой строке с данной моделью
С трудом представляю этот процесс. То есть оператор ввел новое название, строки отсортировались по столбцу В при этом строки с итоговыми значениями все оказались внизу таблицы, потому что у них в столбце В пусто. Теперь надо эти итоговые строки удалить и заново разбить таблицу по моделям и подвести итоги. И так каждый раз при добавлении новых наименований. Как-то сложновато...
Насколько необходима динамическая таблица? Без неё можно было использовать промежуточные итоги. Или, как вариант, считать итоговые значения в отдельном столбце, например, на первой строке с данной модельюPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Вот и у меня не получается...(((( вручную то делаю, а вот что б автоматом-нет. Вариант у меня был такой: в строку 1 вводится модель, она сортируется по алфавиту вверх (т.е. остается на месте). Следующая итерация. Происходит сравнение о наличии новой Модели и появляется новая пустая строка с подсчетом количества таких Моделей. Следующая итерация: вводится строка два. Она сортируется по алфавиту и , например, становится первой строкой. (пустая строка не участвует в сортировке по алфавиту-исключается из сортировки). После установления на первую строчку вторая модель определяется как новая. Следующая итерация. Происходит сравнение о наличии новой Модели и появляется новая пустая строка с подсчетом количества таких Моделей. И т.д. Но написать такой макрос я не в силах(((((((((((((((((((((((.... Динамическая таблица не нужна. Просто она позволила легко расширять исходную таблицу Накладной на любое количество строк вниз. Хоть на 40 хоть на 140. Важно, что б оператор вводил любые Модели в любом количестве и в любой последовательности, а таблица автоматически расширялась вниз и отсортировала все по алфавиту названия Моделей и подвела промежуточный итог по каждой. Внешний вид итоговой таблицы как на Лист "Пример".
Вот и у меня не получается...(((( вручную то делаю, а вот что б автоматом-нет. Вариант у меня был такой: в строку 1 вводится модель, она сортируется по алфавиту вверх (т.е. остается на месте). Следующая итерация. Происходит сравнение о наличии новой Модели и появляется новая пустая строка с подсчетом количества таких Моделей. Следующая итерация: вводится строка два. Она сортируется по алфавиту и , например, становится первой строкой. (пустая строка не участвует в сортировке по алфавиту-исключается из сортировки). После установления на первую строчку вторая модель определяется как новая. Следующая итерация. Происходит сравнение о наличии новой Модели и появляется новая пустая строка с подсчетом количества таких Моделей. И т.д. Но написать такой макрос я не в силах(((((((((((((((((((((((.... Динамическая таблица не нужна. Просто она позволила легко расширять исходную таблицу Накладной на любое количество строк вниз. Хоть на 40 хоть на 140. Важно, что б оператор вводил любые Модели в любом количестве и в любой последовательности, а таблица автоматически расширялась вниз и отсортировала все по алфавиту названия Моделей и подвела промежуточный итог по каждой. Внешний вид итоговой таблицы как на Лист "Пример".Voin
Сообщение отредактировал Voin - Четверг, 19.09.2019, 21:20
Хм!! Ну и формула!!!! Я такое и во сне боюсь представить! А как оставить форму документа без изменений? Новый столбец не прокатывает((( и нумерация строк идет только по моделям , без строк подсчета по моделям! Но сам подход неделю разбирать, наверное , буду, опыта на такое не хватает!
Хм!! Ну и формула!!!! Я такое и во сне боюсь представить! А как оставить форму документа без изменений? Новый столбец не прокатывает((( и нумерация строк идет только по моделям , без строк подсчета по моделям! Но сам подход неделю разбирать, наверное , буду, опыта на такое не хватает!Voin
Можно выводить количество без формулы макросом, но тогда как оно будет пересчитываться при проставлении/изменении количества в таблице? Ладно, я подумаю об этом завтра (с)
Можно выводить количество без формулы макросом, но тогда как оно будет пересчитываться при проставлении/изменении количества в таблице? Ладно, я подумаю об этом завтра (с)Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
как оно будет пересчитываться при проставлении/изменении количества в таблице?
Так же как и сейчас оно делает))) Только пропускать в счете пустые строки))) На самом деле , большое спасибо, за последние 10 дней впервые могу поговорить с человеком на эту тему со специалистом. Спасибо!
Мысль такая пришла в голову. В Лист "Модель" вставить столбец с количеством. Дать удобоваримую для пользователя форму и в строки с нужными Моделями проставить нужное количество и в отдельном столбце получить сумму по Модели. Затем макросом отфильтровать пустые строки (Модели на Листе "Модель" расставлены по алфавиту изначально) и вставить в готовую утвержденную форму для печати?
как оно будет пересчитываться при проставлении/изменении количества в таблице?
Так же как и сейчас оно делает))) Только пропускать в счете пустые строки))) На самом деле , большое спасибо, за последние 10 дней впервые могу поговорить с человеком на эту тему со специалистом. Спасибо!
Мысль такая пришла в голову. В Лист "Модель" вставить столбец с количеством. Дать удобоваримую для пользователя форму и в строки с нужными Моделями проставить нужное количество и в отдельном столбце получить сумму по Модели. Затем макросом отфильтровать пустые строки (Модели на Листе "Модель" расставлены по алфавиту изначально) и вставить в готовую утвержденную форму для печати?
ну не выбрасывать же теперь и доделывать некода, иногда работать надо [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.ListObjects(1).ListColumns(2).DataBodyRange) Is Nothing Then With Me.ListObjects(1).DataBodyRange u_01 = Target.Value 'значение вводимой ячейки u_02 = Application.Substitute(u_01, ",", "\", 2) 'замена 2-й запятой слешем u_03 = Application.Search("\", u_02) 'ищем слеш u_04 = Application.IsNumber(u_03) 'проверка (слеш найден) v_01 = Target.Row If u_04 Then 'если слеш найден, тогда Application.EnableEvents = False 'отключаем обработку событий Rows(v_01 + 1 & ":" & v_01 + 1).Insert Shift:=xlDown 'вставляем строку u_05 = Left(u_01, u_03 - 1) 'значение ячейки до 2-й запятой u_06 = Application.Match(u_05 & ".", Range("b:b"), 0) 'ищем итоговую строку u_07 = Application.IsNumber(u_06) 'проверка (нашли строку) If u_07 = False Then 'если строка не найдена, тогда Target.Offset(1, 0) = u_05 & "." 'создаем Target.Offset(1, 1).FormulaR1C1 = "=SUM(INDEX(C,MATCH(""яя"",R1C[-2]:INDEX(C[-2],ROW()-1))+1):INDEX(C,ROW()-1))" End If Set r = Range(.Cells(2), .Cells(.Cells.Count)) 'сортируем r.Sort Key1:=r(1) Application.EnableEvents = True 'включаем обработку событий End If End With End If End Sub
ну не выбрасывать же теперь и доделывать некода, иногда работать надо [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.ListObjects(1).ListColumns(2).DataBodyRange) Is Nothing Then With Me.ListObjects(1).DataBodyRange u_01 = Target.Value 'значение вводимой ячейки u_02 = Application.Substitute(u_01, ",", "\", 2) 'замена 2-й запятой слешем u_03 = Application.Search("\", u_02) 'ищем слеш u_04 = Application.IsNumber(u_03) 'проверка (слеш найден) v_01 = Target.Row If u_04 Then 'если слеш найден, тогда Application.EnableEvents = False 'отключаем обработку событий Rows(v_01 + 1 & ":" & v_01 + 1).Insert Shift:=xlDown 'вставляем строку u_05 = Left(u_01, u_03 - 1) 'значение ячейки до 2-й запятой u_06 = Application.Match(u_05 & ".", Range("b:b"), 0) 'ищем итоговую строку u_07 = Application.IsNumber(u_06) 'проверка (нашли строку) If u_07 = False Then 'если строка не найдена, тогда Target.Offset(1, 0) = u_05 & "." 'создаем Target.Offset(1, 1).FormulaR1C1 = "=SUM(INDEX(C,MATCH(""яя"",R1C[-2]:INDEX(C[-2],ROW()-1))+1):INDEX(C,ROW()-1))" End If Set r = Range(.Cells(2), .Cells(.Cells.Count)) 'сортируем r.Sort Key1:=r(1) Application.EnableEvents = True 'включаем обработку событий End If End With End If End Sub
Не заработала(( На последних строках в присланном фале не подвела итоги по новым Моделям. Почистил лист. Вставил новые строки, Дает ошибку: Run- time error "13" ((((((((((((((((((((((((
Не заработала(( На последних строках в присланном фале не подвела итоги по новым Моделям. Почистил лист. Вставил новые строки, Дает ошибку: Run- time error "13" ((((((((((((((((((((((((Voin
Цитата Nic70y, 20.09.2019 в 12:52, в сообщении № 11 ( писал(а)): а потом дочитал
Теперь понял суть сообщения дневного)))))))))))))!!!! Вот же балбес!! Я с кодами только сейчас пытаюсь разобраться.... знаний не хватает катастрофически(((( По одной работает!)) а расширить можно?
Цитата Nic70y, 20.09.2019 в 12:52, в сообщении № 11 ( писал(а)): а потом дочитал
Теперь понял суть сообщения дневного)))))))))))))!!!! Вот же балбес!! Я с кодами только сейчас пытаюсь разобраться.... знаний не хватает катастрофически(((( По одной работает!)) а расширить можно?Voin
Сообщение отредактировал Voin - Пятница, 20.09.2019, 16:53
Покрутил табличку! Круто конечно!!! Попробовал на листе Нак1 в том виде, как прислано-работает идеально!!!!!!!!!!!!!!!! При очищении листа-подготовки под бланк для оператора, после вставки номенклатуры появляется значение "0" в столбце количество и перезаписывается формула подсчета новой Модели, даже если это строка введения самих моделей. Смешно смотреть как последующая строчка начинает автоматом считать сумму))) Есть ли возможность или начать макрос после ввода значения количества в ячейку или как то еще уйти от суммирования без подведения итога по Модели? Если нет, не страшно, будут вводить в каждую номенклатуру данных, в итоге получат нужный результат. И после 59 строчки перестает считать нормально, выдает ошибку(((
Покрутил табличку! Круто конечно!!! Попробовал на листе Нак1 в том виде, как прислано-работает идеально!!!!!!!!!!!!!!!! При очищении листа-подготовки под бланк для оператора, после вставки номенклатуры появляется значение "0" в столбце количество и перезаписывается формула подсчета новой Модели, даже если это строка введения самих моделей. Смешно смотреть как последующая строчка начинает автоматом считать сумму))) Есть ли возможность или начать макрос после ввода значения количества в ячейку или как то еще уйти от суммирования без подведения итога по Модели? Если нет, не страшно, будут вводить в каждую номенклатуру данных, в итоге получат нужный результат. И после 59 строчки перестает считать нормально, выдает ошибку(((Voin
Сообщение отредактировал Voin - Воскресенье, 22.09.2019, 17:09