Здравствуйте уважаемые форумчане.. Необходимо какое-либо более оптимальное решение ситуации указанной в файле примере, когда есть таблица в которой указанны определенные позиции "упр.1", "упр.2" и т.д. Есть столбец "убывает", так вот, если напротив позиции "упр.1" в столбце убывает поставить например "упр.10", то в столбце "прибывает" напротив "упр.10" должно появиться "упр.1".., я сделал с помощью функции.. [vba]
Код
Function Прибытие(nomer As String) As String If nomer <> "" Then For i = 1 To Cells(Rows.Count, 22).End(xlUp).Row If Cells(i, 22) = nomer Then Прибытие = Cells(i, 3)
Next i End If End Function
[/vba] Однако это очень криво и имеет ряд недостатков, так как приходится постоянно пересчитывать формулы и при большой программе не удобно, предложите более оптимальное решение. Заранее спасибо..
Здравствуйте уважаемые форумчане.. Необходимо какое-либо более оптимальное решение ситуации указанной в файле примере, когда есть таблица в которой указанны определенные позиции "упр.1", "упр.2" и т.д. Есть столбец "убывает", так вот, если напротив позиции "упр.1" в столбце убывает поставить например "упр.10", то в столбце "прибывает" напротив "упр.10" должно появиться "упр.1".., я сделал с помощью функции.. [vba]
Код
Function Прибытие(nomer As String) As String If nomer <> "" Then For i = 1 To Cells(Rows.Count, 22).End(xlUp).Row If Cells(i, 22) = nomer Then Прибытие = Cells(i, 3)
Next i End If End Function
[/vba] Однако это очень криво и имеет ряд недостатков, так как приходится постоянно пересчитывать формулы и при большой программе не удобно, предложите более оптимальное решение. Заранее спасибо..Sashagor1982
Немного доделал макрос и добавил автоматическую подсветку некоторых возможных ошибок. Остались еще нюансы (неохота заморачиваться), но, возможно, вы на них никогда и не нарветесь...
[p.s.]Проверил скорость работы на 50 тыс. записей: макрос - меньше полсекунды, формулы - 55±3 сек. Но если у вас записей не тысячи, то, имхо, лучше использовать формулы.[/p.s.]
Немного доделал макрос и добавил автоматическую подсветку некоторых возможных ошибок. Остались еще нюансы (неохота заморачиваться), но, возможно, вы на них никогда и не нарветесь...
[p.s.]Проверил скорость работы на 50 тыс. записей: макрос - меньше полсекунды, формулы - 55±3 сек. Но если у вас записей не тысячи, то, имхо, лучше использовать формулы.[/p.s.]KSV
Спасибо. Только несколько вопросов, как сделать что бы макрос работал в другом "схожем" по структуре файле" и как увеличить количество значений??
Спасибо. Только несколько вопросов, как сделать что бы макрос работал в другом "схожем" по структуре файле" и как увеличить количество значений??Sashagor1982
как сделать что бы макрос работал в другом "схожем" по структуре файле
Просто скопируйте в другой документ код события Worksheet_Change и процедуру ClearDependents (она позволяет очистить сразу все зависимые ячейки, не гоняя циклы), и добавьте 3 именованных диапазона: DB, Arrives и Decreases.
В документе используются именованные диапазоны (Ctrl+F3) в них можно изменить размер, чтоб не лазить в макросы. Если это неудобно, можно прописать в макросе автоматическое определение используемого диапазона. Как узнать последнюю используемую строку, вы знаете. [vba]
как сделать что бы макрос работал в другом "схожем" по структуре файле
Просто скопируйте в другой документ код события Worksheet_Change и процедуру ClearDependents (она позволяет очистить сразу все зависимые ячейки, не гоняя циклы), и добавьте 3 именованных диапазона: DB, Arrives и Decreases.
В документе используются именованные диапазоны (Ctrl+F3) в них можно изменить размер, чтоб не лазить в макросы. Если это неудобно, можно прописать в макросе автоматическое определение используемого диапазона. Как узнать последнюю используемую строку, вы знаете. [vba]
Я имел ввиду, что бы макрос сам рассчитывал в зависимости от того сколько значений в 3 столбце. Мне написали расчет последней строки, [vba]
Код
Cells(Rows.Count, 3).End(xlUp).Row
[/vba], только где ее применить в данном коде? И еще один вопрос, чуть изменил файл пример, можно ли код усовершенствовать таким образом, что бы выплывающее окно содержало только то значения 3 столбца, которым соответствуют пустые значения 9 столбца, то есть убыть можно только там где пусто в 8 столбце, а прибыть где пусто в 9. Спасибо.
Я имел ввиду, что бы макрос сам рассчитывал в зависимости от того сколько значений в 3 столбце. Мне написали расчет последней строки, [vba]
Код
Cells(Rows.Count, 3).End(xlUp).Row
[/vba], только где ее применить в данном коде? И еще один вопрос, чуть изменил файл пример, можно ли код усовершенствовать таким образом, что бы выплывающее окно содержало только то значения 3 столбца, которым соответствуют пустые значения 9 столбца, то есть убыть можно только там где пусто в 8 столбце, а прибыть где пусто в 9. Спасибо.Sashagor1982