Формула для последующего добавления строк

Новое в 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

Надеюсь это поможет 🙂

Давайте будем гением компьютера.