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
Nic70y, помогите пожалуйста, с чем столкнулся, когда файл очень большой 250 значений, он начинает виснуть, потому что при внесении нового значения, цикл пересчитывает во всех предыдущих значения и меняет их. Можно ли брать последние 10 значений, и если там все ОК, то просто ставить следующее верное значение, потому что проверять весь массив очень трудоемко. Мы исключаем тот факт, что в середине файла значения будут меняться.
Nic70y, помогите пожалуйста, с чем столкнулся, когда файл очень большой 250 значений, он начинает виснуть, потому что при внесении нового значения, цикл пересчитывает во всех предыдущих значения и меняет их. Можно ли брать последние 10 значений, и если там все ОК, то просто ставить следующее верное значение, потому что проверять весь массив очень трудоемко. Мы исключаем тот факт, что в середине файла значения будут меняться.Gopronotmore
Gopronotmore, я тут немножко на больничном (надоело работать, решил отдохнуть, но все равно не дают) в ближайшее время помочь не смогу, хотя с Вами назрел "серьезный разговор" мне почему то кажется, что Ваша задача решается очень просто, но Вы "не хотите" рассказать принцип работы с файлом, такое в мое практике очень часто встречалось, даже на моей нынешней работе, когда я на ней не работал, но нарисовал* файл - теперь он перерисован до неузнаваемости, т.к. я понял для чего он конкретно.
Gopronotmore, я тут немножко на больничном (надоело работать, решил отдохнуть, но все равно не дают) в ближайшее время помочь не смогу, хотя с Вами назрел "серьезный разговор" мне почему то кажется, что Ваша задача решается очень просто, но Вы "не хотите" рассказать принцип работы с файлом, такое в мое практике очень часто встречалось, даже на моей нынешней работе, когда я на ней не работал, но нарисовал* файл - теперь он перерисован до неузнаваемости, т.к. я понял для чего он конкретно.Nic70y
Nic70y, работаю на проекте, у ребят проблема со складом. Нету возможности приобрести 1С, работают без адресного хранения. Я говорю им, что я могу сделать простой файл в Эксель, где будет приход и расход. Сделал простой файл с приходом расходом и оборотом по складу. Они говорят, а есть возможность что бы мы указывали что в ячейках, говорю есть, сделал через формулу что бы они вносили в ячейки. Они говорят, а если у нас на 1 паллете будет 5 типов, можно сделать так что бы мы указывали паллет и номер материала. Это я уже сделать не смог, хотя понимаю если построить массив и циклами перебрать значения, то все легко получится, я просто базовый ноль VBA, написал вот на форуме, вы в принципе решили задачу и все было прекрасно, пока не стало 300+ записей и у людей стал виснуть комп, когда они вносили новое значение, что я сделал, я понял что нет смысла переберать весь массив предыдущий, потому что они его не меняют, а могут поменять последние 5-10 значений с прихода, вот я и повторно написал, сам я файл не скидывал потому что там их номенклатура и названия, делаю я так, я копирую 1 лист где мне нужно прописать макрос, а после переношу его в этот файл, я так и сделал тут, но после переноса у меня начало дебагать и ссылаться на переменную ac Я пециально делаю файл таким образому что бы сохранить положения всех ячеек и ссылок. Вот собственно и все.
По сути нужно что бы люди так же вносили свои данные в ячейку, а макрос просто обновлял последние 10 значений, потому что весь массив больше определенного значения реально грузит их слабенький старый комп.
Nic70y, работаю на проекте, у ребят проблема со складом. Нету возможности приобрести 1С, работают без адресного хранения. Я говорю им, что я могу сделать простой файл в Эксель, где будет приход и расход. Сделал простой файл с приходом расходом и оборотом по складу. Они говорят, а есть возможность что бы мы указывали что в ячейках, говорю есть, сделал через формулу что бы они вносили в ячейки. Они говорят, а если у нас на 1 паллете будет 5 типов, можно сделать так что бы мы указывали паллет и номер материала. Это я уже сделать не смог, хотя понимаю если построить массив и циклами перебрать значения, то все легко получится, я просто базовый ноль VBA, написал вот на форуме, вы в принципе решили задачу и все было прекрасно, пока не стало 300+ записей и у людей стал виснуть комп, когда они вносили новое значение, что я сделал, я понял что нет смысла переберать весь массив предыдущий, потому что они его не меняют, а могут поменять последние 5-10 значений с прихода, вот я и повторно написал, сам я файл не скидывал потому что там их номенклатура и названия, делаю я так, я копирую 1 лист где мне нужно прописать макрос, а после переношу его в этот файл, я так и сделал тут, но после переноса у меня начало дебагать и ссылаться на переменную ac Я пециально делаю файл таким образому что бы сохранить положения всех ячеек и ссылок. Вот собственно и все.
По сути нужно что бы люди так же вносили свои данные в ячейку, а макрос просто обновлял последние 10 значений, потому что весь массив больше определенного значения реально грузит их слабенький старый комп.Gopronotmore