Gopronotmore, не потянула нагрузки моя удф, предлагаю макрос
[vba]
Код
Sub u_47() Application.ScreenUpdating = False a = 3 'первая строка номеров b = Cells(Rows.Count, "b").End(xlUp).Row 'нижняя строка столбца B If b > a - 1 Then Range("c" & a & ":c" & b).ClearContents 'сотрем НОМЕР Dim arr() n = 0 For d = 1 To b - a + 1 e = Chr(Application.RoundUp(d / 500, 0) + 64) 'буква f = (d - 1) Mod 500 + 1 'число g = e & f h = Application.Match(g, Range("d" & a & ":d" & b), 0) 'ищем номер в подномере If IsNumeric(h) = False Then 'если не нашли, запишем в массив ReDim Preserve arr(n) arr(n) = g n = n + 1 End If Next s = 0 For i = a To b j = Range("d" & i).Value If j = "" Then 'если допномер пуст, запишем из массива Range("c" & i) = arr(s) s = s + 1 Else 'иначе из соседних ячеек Range("c" & i) = Range("d" & i).Value & "-" & Range("e" & i).Value End If Next Application.ScreenUpdating = True End Sub
[/vba]
, где + 64 соот. латинице для кириллицы + 191 напоминаю, что доп номера и номера должны быть на одном языке
апдэйт хотя нет. вопрос: если например доп номер A1 будет не в первой ячейке, то в первой A2?
Gopronotmore, не потянула нагрузки моя удф, предлагаю макрос
[vba]
Код
Sub u_47() Application.ScreenUpdating = False a = 3 'первая строка номеров b = Cells(Rows.Count, "b").End(xlUp).Row 'нижняя строка столбца B If b > a - 1 Then Range("c" & a & ":c" & b).ClearContents 'сотрем НОМЕР Dim arr() n = 0 For d = 1 To b - a + 1 e = Chr(Application.RoundUp(d / 500, 0) + 64) 'буква f = (d - 1) Mod 500 + 1 'число g = e & f h = Application.Match(g, Range("d" & a & ":d" & b), 0) 'ищем номер в подномере If IsNumeric(h) = False Then 'если не нашли, запишем в массив ReDim Preserve arr(n) arr(n) = g n = n + 1 End If Next s = 0 For i = a To b j = Range("d" & i).Value If j = "" Then 'если допномер пуст, запишем из массива Range("c" & i) = arr(s) s = s + 1 Else 'иначе из соседних ячеек Range("c" & i) = Range("d" & i).Value & "-" & Range("e" & i).Value End If Next Application.ScreenUpdating = True End Sub
[/vba]
, где + 64 соот. латинице для кириллицы + 191 напоминаю, что доп номера и номера должны быть на одном языке
апдэйт хотя нет. вопрос: если например доп номер A1 будет не в первой ячейке, то в первой A2?Nic70y
Nic70y, подскажите а можно что бы не через кнопку работал макрос, а при вводе даты из диапазона пересчитывались номера, другими словами дату ввел нажал enter и макрос отработал? Это реально сделать ? или это просадит систему при копировании дат? Хотя кнопку тоже оставить можно, просто неудобно каждый раз при заполнении даты набивать на кнопку?
Nic70y, подскажите а можно что бы не через кнопку работал макрос, а при вводе даты из диапазона пересчитывались номера, другими словами дату ввел нажал enter и макрос отработал? Это реально сделать ? или это просадит систему при копировании дат? Хотя кнопку тоже оставить можно, просто неудобно каждый раз при заполнении даты набивать на кнопку?Gopronotmore
скажите пожалуйста, а можно еще чуть дописать, объясню почему.
Так как весь диапазон пересчитывается очень грузит комп, я вот думаю const прописать для последней строки проверяемой, и потом просто его в ручную править.
Это реально сделать, например для первых 250 значений пока?
Nic70y, спасибо вам приогромное,
скажите пожалуйста, а можно еще чуть дописать, объясню почему.
Так как весь диапазон пересчитывается очень грузит комп, я вот думаю const прописать для последней строки проверяемой, и потом просто его в ручную править.
Это реально сделать, например для первых 250 значений пока?Gopronotmore
Да оператор склада просто вбивает дату и присваивает что там должно лежать на приходе.
А потом в расходе пишет с какой ячейки подтягивается число и количество и что там лежит и списывает и все
Просто можно было бы сослаться на ячейку в таблице запаролить ее и просто в ручную править если не хватает значений просто увеличиваем диапазон и все, можно через макрос прописать нижний диапазон и потом в ручную его править.
Не знаю доступно объяснил ?
Кладовщик может внести дату, потом стереть ее, может в одну ячейку положить несколько разных позиций потом удалить случайно если ошибся, примитивное поведение
Да оператор склада просто вбивает дату и присваивает что там должно лежать на приходе.
А потом в расходе пишет с какой ячейки подтягивается число и количество и что там лежит и списывает и все
Просто можно было бы сослаться на ячейку в таблице запаролить ее и просто в ручную править если не хватает значений просто увеличиваем диапазон и все, можно через макрос прописать нижний диапазон и потом в ручную его править.
Не знаю доступно объяснил ?
Кладовщик может внести дату, потом стереть ее, может в одну ячейку положить несколько разных позиций потом удалить случайно если ошибся, примитивное поведениеGopronotmore
Сообщение отредактировал Gopronotmore - Четверг, 08.08.2024, 11:14
И еще вопрос, так как они правят и вносят данные в ручную, я хотел через countif считать автоматом вбитые ими дополнительные ячейки, сейчас по макросу я понимаю что он удаляет и сам все расчитывает, но тут есть проблема операторы люди не очень дальновидные, и они могут править вручную дополнительные места. Я про колонку "ПОЗИЦИЯ"
Можно все таки сделать так что бы только можно было вбивать "ДОП НОМЕР", а "ПОЗИЦИЯ" считалась автоматом, иначе они там наменяют и потом никто ничего не найдет. А если будет запаролено, то не смогут ничего поменять.
upd хотя я посмотрел если удалить из доп ячейки номер все равно ничего не изменится в основной, по этому можно наверно и не менять. След все равно останется
Nic70y,
И еще вопрос, так как они правят и вносят данные в ручную, я хотел через countif считать автоматом вбитые ими дополнительные ячейки, сейчас по макросу я понимаю что он удаляет и сам все расчитывает, но тут есть проблема операторы люди не очень дальновидные, и они могут править вручную дополнительные места. Я про колонку "ПОЗИЦИЯ"
Можно все таки сделать так что бы только можно было вбивать "ДОП НОМЕР", а "ПОЗИЦИЯ" считалась автоматом, иначе они там наменяют и потом никто ничего не найдет. А если будет запаролено, то не смогут ничего поменять.
upd хотя я посмотрел если удалить из доп ячейки номер все равно ничего не изменится в основной, по этому можно наверно и не менять. След все равно останетсяGopronotmore
Сообщение отредактировал Gopronotmore - Четверг, 08.08.2024, 11:30
Gopronotmore, смотрите: при изменении доп номера должны перезаписаться все номера - другого я не вижу. при вводе даты можно снизить нагрузку (но там 2 условия).
единственный вариант который я вижу - это внесение данных через юзерформу (лист должен быть защищен) по одной позиции, тогда еще можно как-то распределить нагрузку
countif - одна из тяжелых формул
Gopronotmore, смотрите: при изменении доп номера должны перезаписаться все номера - другого я не вижу. при вводе даты можно снизить нагрузку (но там 2 условия).
единственный вариант который я вижу - это внесение данных через юзерформу (лист должен быть защищен) по одной позиции, тогда еще можно как-то распределить нагрузку
Nic70y, Оставим так, я думал просто что можно ограничить диапазон counif например поставить на 250 значений, а когда будет подходить по списку прихода изменить на 500. Что бы он считал диапазон от A1:A500 по всем формулам, там получается он проверяет и стирает значения из колонок которые определены условиями. Но диапазон там от начала и до конца. Хотя я не знаю это мое делетансткое видение. Но в любом случае спасибо это работает так как должно.
Единственное на сколько сложно будет все таки что бы он через формулу countif пересчитывал и присваивал значения. А колонка Ячейка и доп ячейка остались исправляемыми ?
Если очень сложно, оставлю как есть просто интрукцию напишу как правильно вносить данные в файл.
Nic70y, Оставим так, я думал просто что можно ограничить диапазон counif например поставить на 250 значений, а когда будет подходить по списку прихода изменить на 500. Что бы он считал диапазон от A1:A500 по всем формулам, там получается он проверяет и стирает значения из колонок которые определены условиями. Но диапазон там от начала и до конца. Хотя я не знаю это мое делетансткое видение. Но в любом случае спасибо это работает так как должно.
Единственное на сколько сложно будет все таки что бы он через формулу countif пересчитывал и присваивал значения. А колонка Ячейка и доп ячейка остались исправляемыми ?
Если очень сложно, оставлю как есть просто интрукцию напишу как правильно вносить данные в файл.Gopronotmore