Формула для последующего добавления строк
Новое в VBA, пожалуйста, помогите. Мои извинения. Я не очень хорошо прояснил ситуацию. Позвольте мне попробовать еще раз.
Мои торговые представители вводят каждый вызов в лист вызовов. Они призывают 50-60 человек в неделю; некоторые из них будут видеть не один раз в неделю, а несколько раз в год. В этом списке вызовов 4 столбца; дата вызова, клиент, числовая дата и дни с момента последнего вызова. Этот лист может содержать сотни строк, многие из которых дублируют клиентов, которые вызывают в другую дату.
Я написал код, который будет устранять дубликаты по мере необходимости (отлично работает). Новые вызовы добавляются с помощью NextRow = _ (также отлично работает). $C$2
устанавливается в TODAY()
.
Формула в столбце C равна $C10=$A10
(колонка C отформатирована на номер). Столбец D – количество дней с момента последнего вызова; $C$2-$C10
и т. Д. Простой и работает отлично.
Проблема в том, что у меня 50 строк (все разные клиенты) отсортированы по возрастанию и добавлен новый клиент, ключ является новым. Мне нужны формулы в C и D, чтобы автоматически сбрасывать одну строку при добавлении нового клиента. Я могу перетащить формулы вниз головой, и все будет работать до тех пор, пока я не сортирую, тогда мои данные являются дном моего типа, потому что все строки в столбце A без даты будут давать 0 как в C, так и в D. Мой конечный продукт должен быть целый ряд разных клиентов (без дубликатов); с клиентом, который не был назван самым длинным в верхней части.
Надеюсь, это лучшее объяснение. Могу ли я написать код, чтобы игнорировать 0?
Я собираюсь немного разобраться здесь и сказать, может быть, ваши формулы нуждаются в рефакторинге …
Например. Если целью является вычисление дней с момента последнего звонка клиенту, простая формула, такая как это будет работать = (max (C: C) -Today ()). Это получает наибольшее значение в столбце C и вычитает сегодня от него. Если вы хотите получить значение в столбце D, которое соответствует этой записи, то VLOOKUP () является вашим другом. вы должны использовать его как таковое: = VLOOKUP (MAX (C: C), C: D, 2, FALSE)
Надеюсь это поможет. Кстати, лучший способ сделать вашу проблему в VBA, самым простым способом было бы создать именованный диапазон. Затем вы можете заменить $ C $ 2- $ D11 на имя именованного диапазона. Самый простой способ сделать это – сказать:
Range(Range(C2),Range(C2).End(xlDown)).Name = NAmeOfYourRange
Это эффективно просто получает ячейку C2, переходит в последнюю непустую ячейку в нисходящем направлении и имена, которые варьируются от NameOfYourRange
Надеюсь это поможет 🙂