Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автоматическое заполнение ячеек. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическое заполнение ячеек. (Макросы/Sub)
Автоматическое заполнение ячеек.
Sashagor1982 Дата: Пятница, 15.05.2015, 22:05 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Здравствуйте уважаемые форумчане.. Необходимо какое-либо более оптимальное решение ситуации указанной в файле примере, когда есть таблица в которой указанны определенные позиции "упр.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]
Однако это очень криво и имеет ряд недостатков, так как приходится постоянно пересчитывать формулы и при большой программе не удобно, предложите более оптимальное решение. Заранее спасибо..
К сообщению приложен файл: 2405825.xls (56.5 Kb)
 
Ответить
СообщениеЗдравствуйте уважаемые форумчане.. Необходимо какое-либо более оптимальное решение ситуации указанной в файле примере, когда есть таблица в которой указанны определенные позиции "упр.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
Дата добавления - 15.05.2015 в 22:05
Manyasha Дата: Пятница, 15.05.2015, 22:51 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Sashagor1982, здравствуйте. А формульный вариант не подойдет?
Код
=ЕСЛИ(СЧЁТЕСЛИ($V$1:$V$100;C3)>0;ИНДЕКС($C$3:$C$51;ПОИСКПОЗ(C3;$V$3:$V$51;0));"")
К сообщению приложен файл: 2405825_1.xls (57.5 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеSashagor1982, здравствуйте. А формульный вариант не подойдет?
Код
=ЕСЛИ(СЧЁТЕСЛИ($V$1:$V$100;C3)>0;ИНДЕКС($C$3:$C$51;ПОИСКПОЗ(C3;$V$3:$V$51;0));"")

Автор - Manyasha
Дата добавления - 15.05.2015 в 22:51
KSV Дата: Пятница, 15.05.2015, 23:05 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Если не подойдет, то можно например так (см. вложенный файл)
К сообщению приложен файл: 1153537.xls (61.5 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеЕсли не подойдет, то можно например так (см. вложенный файл)

Автор - KSV
Дата добавления - 15.05.2015 в 23:05
KSV Дата: Суббота, 16.05.2015, 02:52 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Немного доделал макрос и добавил автоматическую подсветку некоторых возможных ошибок.
Остались еще нюансы (неохота заморачиваться), но, возможно, вы на них никогда и не нарветесь...

[p.s.]Проверил скорость работы на 50 тыс. записей: макрос - меньше полсекунды, формулы - 55±3 сек.
Но если у вас записей не тысячи, то, имхо, лучше использовать формулы.[/p.s.]
К сообщению приложен файл: 6880274.xls (73.0 Kb)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеНемного доделал макрос и добавил автоматическую подсветку некоторых возможных ошибок.
Остались еще нюансы (неохота заморачиваться), но, возможно, вы на них никогда и не нарветесь...

[p.s.]Проверил скорость работы на 50 тыс. записей: макрос - меньше полсекунды, формулы - 55±3 сек.
Но если у вас записей не тысячи, то, имхо, лучше использовать формулы.[/p.s.]

Автор - KSV
Дата добавления - 16.05.2015 в 02:52
Sashagor1982 Дата: Суббота, 16.05.2015, 21:29 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Спасибо. Только несколько вопросов, как сделать что бы макрос работал в другом "схожем" по структуре файле" и как увеличить количество значений??
 
Ответить
СообщениеСпасибо. Только несколько вопросов, как сделать что бы макрос работал в другом "схожем" по структуре файле" и как увеличить количество значений??

Автор - Sashagor1982
Дата добавления - 16.05.2015 в 21:29
Sashagor1982 Дата: Суббота, 16.05.2015, 21:37 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Чтоб ограничение было не "упр.49", а какое-либо другое значение?
 
Ответить
СообщениеЧтоб ограничение было не "упр.49", а какое-либо другое значение?

Автор - Sashagor1982
Дата добавления - 16.05.2015 в 21:37
Sashagor1982 Дата: Суббота, 16.05.2015, 22:02 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Не могу понять, что вызывает работу макроса..
 
Ответить
СообщениеНе могу понять, что вызывает работу макроса..

Автор - Sashagor1982
Дата добавления - 16.05.2015 в 22:02
KSV Дата: Воскресенье, 17.05.2015, 00:54 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
как сделать что бы макрос работал в другом "схожем" по структуре файле

Просто скопируйте в другой документ код события Worksheet_Change и процедуру ClearDependents (она позволяет очистить сразу все зависимые ячейки, не гоняя циклы), и добавьте 3 именованных диапазона: DB, Arrives и Decreases.

Чтоб ограничение было не "упр.49"

В документе используются именованные диапазоны (Ctrl+F3) в них можно изменить размер, чтоб не лазить в макросы. Если это неудобно, можно прописать в макросе автоматическое определение используемого диапазона.
Как узнать последнюю используемую строку, вы знаете.
[vba]
Код
Cells(Rows.Count, 3).End(xlUp).Row
[/vba]

что вызывает работу макроса

Его вызывает событие листа Worksheet_Change


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
как сделать что бы макрос работал в другом "схожем" по структуре файле

Просто скопируйте в другой документ код события Worksheet_Change и процедуру ClearDependents (она позволяет очистить сразу все зависимые ячейки, не гоняя циклы), и добавьте 3 именованных диапазона: DB, Arrives и Decreases.

Чтоб ограничение было не "упр.49"

В документе используются именованные диапазоны (Ctrl+F3) в них можно изменить размер, чтоб не лазить в макросы. Если это неудобно, можно прописать в макросе автоматическое определение используемого диапазона.
Как узнать последнюю используемую строку, вы знаете.
[vba]
Код
Cells(Rows.Count, 3).End(xlUp).Row
[/vba]

что вызывает работу макроса

Его вызывает событие листа Worksheet_Change

Автор - KSV
Дата добавления - 17.05.2015 в 00:54
KSV Дата: Воскресенье, 17.05.2015, 00:58 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Чтоб ограничение было не "упр.49"

Или просто вставьте нужное кол-во строк ПЕРЕД строкой с "упр.49" (при этом все именованные диапазоны сами расширятся и ничего менять не придется)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
Чтоб ограничение было не "упр.49"

Или просто вставьте нужное кол-во строк ПЕРЕД строкой с "упр.49" (при этом все именованные диапазоны сами расширятся и ничего менять не придется)

Автор - KSV
Дата добавления - 17.05.2015 в 00:58
Sashagor1982 Дата: Воскресенье, 17.05.2015, 10:22 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Цитата
и добавьте 3 именованных диапазона: DB, Arrives и Decreases.
Как это сделать?
 
Ответить
Сообщение
Цитата
и добавьте 3 именованных диапазона: DB, Arrives и Decreases.
Как это сделать?

Автор - Sashagor1982
Дата добавления - 17.05.2015 в 10:22
Sashagor1982 Дата: Воскресенье, 17.05.2015, 10:25 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Извиняюсь, неправильно сформулировал. Имею ввиду где сделать это с помощью кода? Спасибо
 
Ответить
СообщениеИзвиняюсь, неправильно сформулировал. Имею ввиду где сделать это с помощью кода? Спасибо

Автор - Sashagor1982
Дата добавления - 17.05.2015 в 10:25
ShAM Дата: Воскресенье, 17.05.2015, 11:29 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
Как это сделать?

где сделать это с помощью кода?
Это не в коде, это в Диспетчере имен. Жмите Ctrl+F3 и там создавайте.
 
Ответить
Сообщение
Как это сделать?

где сделать это с помощью кода?
Это не в коде, это в Диспетчере имен. Жмите Ctrl+F3 и там создавайте.

Автор - ShAM
Дата добавления - 17.05.2015 в 11:29
Sashagor1982 Дата: Воскресенье, 17.05.2015, 14:41 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Я имел ввиду, что бы макрос сам рассчитывал в зависимости от того сколько значений в 3 столбце. Мне написали расчет последней строки, [vba]
Код
Cells(Rows.Count, 3).End(xlUp).Row
[/vba], только где ее применить в данном коде? И еще один вопрос, чуть изменил файл пример, можно ли код усовершенствовать таким образом, что бы выплывающее окно содержало только то значения 3 столбца, которым соответствуют пустые значения 9 столбца, то есть убыть можно только там где пусто в 8 столбце, а прибыть где пусто в 9. Спасибо.
К сообщению приложен файл: 6345165.xls (65.5 Kb)


Сообщение отредактировал Sashagor1982 - Воскресенье, 17.05.2015, 17:17
 
Ответить
СообщениеЯ имел ввиду, что бы макрос сам рассчитывал в зависимости от того сколько значений в 3 столбце. Мне написали расчет последней строки, [vba]
Код
Cells(Rows.Count, 3).End(xlUp).Row
[/vba], только где ее применить в данном коде? И еще один вопрос, чуть изменил файл пример, можно ли код усовершенствовать таким образом, что бы выплывающее окно содержало только то значения 3 столбца, которым соответствуют пустые значения 9 столбца, то есть убыть можно только там где пусто в 8 столбце, а прибыть где пусто в 9. Спасибо.

Автор - Sashagor1982
Дата добавления - 17.05.2015 в 14:41
ShAM Дата: Воскресенье, 17.05.2015, 15:09 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
чуть изменил файл пример
И где он?
 
Ответить
Сообщение
чуть изменил файл пример
И где он?

Автор - ShAM
Дата добавления - 17.05.2015 в 15:09
Sashagor1982 Дата: Воскресенье, 17.05.2015, 17:17 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 287
Репутация: -6 ±
Замечаний: 0% ±

Excel 2007
Извиняюсь, добавил
К сообщению приложен файл: 3289766.xls (65.5 Kb)
 
Ответить
СообщениеИзвиняюсь, добавил

Автор - Sashagor1982
Дата добавления - 17.05.2015 в 17:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическое заполнение ячеек. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!