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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос вместо выборки значений из массива - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос вместо выборки значений из массива (Макросы/Sub)
Макрос вместо выборки значений из массива
iRustem Дата: Суббота, 18.07.2015, 20:18 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Доброго дня!

Проблема:
1. На всех вкладках кроме "Реестр инцидентов" очень много формул, практически каждая из которых работает с массивами.
2. Из-за того, что на каждом листе тысячи формул, открытие, сохранение файла занимает очень длительное время.
3. Отключение авторасчета при открытии файла не срабатывает, поскольку оно активируется только после открытия файла, а на открытие уходит время:
[vba]
Код
Private Sub Workbook_Open()
       'Больше не обновляем страницы после каждого действия
       Application.ScreenUpdating = False
           
       'Расчёты переводим в ручной режим
       Application.Calculation = xlCalculationManual
           
       'Отключаем события
       Application.EnableEvents = False
       Application.MsgBox "Авторасчет отключен"
End Sub
[/vba]
4. "Формулы - Параметры вычислений - Вручную" использовать нельзя, т.к. с файлом будут работать другие сотрудники внутри корпоративной сети.

Логика работы:
1. Вкладки с фамилиями - названия групп, в каждой группе есть сотрудники. В файл-примере оставлена одна группа.
2. Со вкладки "Реестр инцидентов" на все остальные вкладки возвращаются значения:
- "Имя+фамилия",
- "Номер инцидента",
- "Дата создания",
- "Состояние",
- "Ошибка регистрации".
3. На каждой вкладке группы по очереди из массива возвращаются ФИО сотрудников по блокам.
4. Записей с "Имя фамилия" на вкладке "Реестр инцидентов" по столбцу "Н" может быть несколько, поэтому используются массивы, а не, например, функция ВПР.
5. Файл после расчета выглядит таким образом: на вкладке "Хайрварин" есть, например, "Шуляк Дмитрий Викторович", его "имя+фамилия" встречаются на вкладке "Реестр инцидентов" 5 раз, поэтому к нему в блок было возвращено 5 записей.

Необходимо:
1. Избавиться от массивов поскольку они очень сильно грузят файл.
2. Обеспечить автоматическое распределение значений со вкладки "Реестр инцидентов" по всем остальным вкладкам.

Прошу помочь :(
К сообщению приложен файл: 4464260.xlsm (83.6 Kb)


Сообщение отредактировал iRustem - Суббота, 18.07.2015, 21:42
 
Ответить
СообщениеДоброго дня!

Проблема:
1. На всех вкладках кроме "Реестр инцидентов" очень много формул, практически каждая из которых работает с массивами.
2. Из-за того, что на каждом листе тысячи формул, открытие, сохранение файла занимает очень длительное время.
3. Отключение авторасчета при открытии файла не срабатывает, поскольку оно активируется только после открытия файла, а на открытие уходит время:
[vba]
Код
Private Sub Workbook_Open()
       'Больше не обновляем страницы после каждого действия
       Application.ScreenUpdating = False
           
       'Расчёты переводим в ручной режим
       Application.Calculation = xlCalculationManual
           
       'Отключаем события
       Application.EnableEvents = False
       Application.MsgBox "Авторасчет отключен"
End Sub
[/vba]
4. "Формулы - Параметры вычислений - Вручную" использовать нельзя, т.к. с файлом будут работать другие сотрудники внутри корпоративной сети.

Логика работы:
1. Вкладки с фамилиями - названия групп, в каждой группе есть сотрудники. В файл-примере оставлена одна группа.
2. Со вкладки "Реестр инцидентов" на все остальные вкладки возвращаются значения:
- "Имя+фамилия",
- "Номер инцидента",
- "Дата создания",
- "Состояние",
- "Ошибка регистрации".
3. На каждой вкладке группы по очереди из массива возвращаются ФИО сотрудников по блокам.
4. Записей с "Имя фамилия" на вкладке "Реестр инцидентов" по столбцу "Н" может быть несколько, поэтому используются массивы, а не, например, функция ВПР.
5. Файл после расчета выглядит таким образом: на вкладке "Хайрварин" есть, например, "Шуляк Дмитрий Викторович", его "имя+фамилия" встречаются на вкладке "Реестр инцидентов" 5 раз, поэтому к нему в блок было возвращено 5 записей.

Необходимо:
1. Избавиться от массивов поскольку они очень сильно грузят файл.
2. Обеспечить автоматическое распределение значений со вкладки "Реестр инцидентов" по всем остальным вкладкам.

Прошу помочь :(

Автор - iRustem
Дата добавления - 18.07.2015 в 20:18
gling Дата: Воскресенье, 19.07.2015, 00:42 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2525
Репутация: 678 ±
Замечаний: 0% ±

2010
А для чего в формуле СТРОКА(ДВССЫЛ("'Реестр инцидентов'!H1:H"&ЧСТРОК(Сотрудник))ведь это возвращает только № строки который и без ДВССЫЛ известен, он соответствует количеству в массиве Сотрудник, это можно заменить безболезненно на СТРОКА($1:$993).
Удалил ДВССЫЛ и обращение к имени Сотрудник, через Найти--Заменить (Ctrl+H), открываться файл стал быстрее, возможно это только кажется.
К сообщению приложен файл: 9813746.xlsm (84.2 Kb)


ЯД-41001506838083

Сообщение отредактировал gling - Воскресенье, 19.07.2015, 00:51
 
Ответить
СообщениеА для чего в формуле СТРОКА(ДВССЫЛ("'Реестр инцидентов'!H1:H"&ЧСТРОК(Сотрудник))ведь это возвращает только № строки который и без ДВССЫЛ известен, он соответствует количеству в массиве Сотрудник, это можно заменить безболезненно на СТРОКА($1:$993).
Удалил ДВССЫЛ и обращение к имени Сотрудник, через Найти--Заменить (Ctrl+H), открываться файл стал быстрее, возможно это только кажется.

Автор - gling
Дата добавления - 19.07.2015 в 00:42
krosav4ig Дата: Воскресенье, 19.07.2015, 01:04 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
iRustem, а так формулы файл грузят?
К сообщению приложен файл: 6270266.xlsm (97.8 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеiRustem, а так формулы файл грузят?

Автор - krosav4ig
Дата добавления - 19.07.2015 в 01:04
gling Дата: Воскресенье, 19.07.2015, 01:49 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2525
Репутация: 678 ±
Замечаний: 0% ±

2010
И еще вариант без массивных формул, но с доп столбцом.
К сообщению приложен файл: 1587106.xlsm (73.3 Kb)


ЯД-41001506838083

Сообщение отредактировал gling - Воскресенье, 19.07.2015, 01:51
 
Ответить
СообщениеИ еще вариант без массивных формул, но с доп столбцом.

Автор - gling
Дата добавления - 19.07.2015 в 01:49
Udik Дата: Воскресенье, 19.07.2015, 10:41 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
В первом столбце можно упростить подблоки имя-фамилия
вместо
Код
=ЕСЛИОШИБКА(ИНДЕКС('Реестр инцидентов'!$A$4:$P$171;ПОИСКПОЗ(ИНДЕКС($K$2:$K$24;ОКРУГЛВНИЗ((СТРОКА(B257)-3)/12;0)+1)&3;'Реестр инцидентов'!$Q$4:$Q$171;0);ПОИСКПОЗ(A$1;'Реестр инцидентов'!$A$3:$Q$3;0));"")


такую
Код
=ЕСЛИ(B16="";"";ЕСЛИ((ДЛСТР(A15)-ДЛСТР(ПОДСТАВИТЬ(A15;" ";""))=1);A15;СМЕЩ($K$1;ПОИСКПОЗ(A15;$L$2:$L$50;0);0)))


L$2:$L$50 - с запасом, чтоб не заморачиваться с дин. диапазоном

Ну а если файл так и будет тормозить, тогда макрос таки придётся писать.
К сообщению приложен файл: edit4464260.xlsm (49.0 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Воскресенье, 19.07.2015, 10:42
 
Ответить
СообщениеВ первом столбце можно упростить подблоки имя-фамилия
вместо
Код
=ЕСЛИОШИБКА(ИНДЕКС('Реестр инцидентов'!$A$4:$P$171;ПОИСКПОЗ(ИНДЕКС($K$2:$K$24;ОКРУГЛВНИЗ((СТРОКА(B257)-3)/12;0)+1)&3;'Реестр инцидентов'!$Q$4:$Q$171;0);ПОИСКПОЗ(A$1;'Реестр инцидентов'!$A$3:$Q$3;0));"")


такую
Код
=ЕСЛИ(B16="";"";ЕСЛИ((ДЛСТР(A15)-ДЛСТР(ПОДСТАВИТЬ(A15;" ";""))=1);A15;СМЕЩ($K$1;ПОИСКПОЗ(A15;$L$2:$L$50;0);0)))


L$2:$L$50 - с запасом, чтоб не заморачиваться с дин. диапазоном

Ну а если файл так и будет тормозить, тогда макрос таки придётся писать.

Автор - Udik
Дата добавления - 19.07.2015 в 10:41
iRustem Дата: Воскресенье, 19.07.2015, 15:10 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день!

А для чего в формуле СТРОКА(ДВССЫЛ("'Реестр инцидентов'!H1:H"&ЧСТРОК(Сотрудник))ведь это возвращает только № строки который и без ДВССЫЛ известен, он соответствует количеству в массиве Сотрудник, это можно заменить безболезненно на СТРОКА($1:$993).
Удалил ДВССЫЛ и обращение к имени Сотрудник, через Найти--Заменить (Ctrl+H), открываться файл стал быстрее, возможно это только кажется.


Да, можно и так, но добавив буквально 3 вкладки, нагрузка на файл примерно та же, а в конечном результате должно быть 10 групп...
И еще вариант без массивных формул, но с доп столбцом.


К сожалению, так не считает, можно проверить если скопировать, например, на вкладке "Реестр инцидентов" массив данных и вставить их ниже. Конечно же растянув новый столбец. Поиск останавливается сразу после того, как находит 1-е совпадение, но все равно задумка интересная.

iRustem, а так формулы файл грузят?


Супер, идея с индексами то, что нужно!
respect
В первом столбце можно упростить подблоки имя-фамилия

Дополню итоговый реестр Вашим решением, файл считает еще быстрее)

Большое всем спасибо!


Сообщение отредактировал iRustem - Воскресенье, 19.07.2015, 15:11
 
Ответить
СообщениеДобрый день!

А для чего в формуле СТРОКА(ДВССЫЛ("'Реестр инцидентов'!H1:H"&ЧСТРОК(Сотрудник))ведь это возвращает только № строки который и без ДВССЫЛ известен, он соответствует количеству в массиве Сотрудник, это можно заменить безболезненно на СТРОКА($1:$993).
Удалил ДВССЫЛ и обращение к имени Сотрудник, через Найти--Заменить (Ctrl+H), открываться файл стал быстрее, возможно это только кажется.


Да, можно и так, но добавив буквально 3 вкладки, нагрузка на файл примерно та же, а в конечном результате должно быть 10 групп...
И еще вариант без массивных формул, но с доп столбцом.


К сожалению, так не считает, можно проверить если скопировать, например, на вкладке "Реестр инцидентов" массив данных и вставить их ниже. Конечно же растянув новый столбец. Поиск останавливается сразу после того, как находит 1-е совпадение, но все равно задумка интересная.

iRustem, а так формулы файл грузят?


Супер, идея с индексами то, что нужно!
respect
В первом столбце можно упростить подблоки имя-фамилия

Дополню итоговый реестр Вашим решением, файл считает еще быстрее)

Большое всем спасибо!

Автор - iRustem
Дата добавления - 19.07.2015 в 15:10
_Boroda_ Дата: Воскресенье, 19.07.2015, 15:26 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А вот кусок
Код
СМЕЩ($K$1;ПОИСКПОЗ(A15;$L$2:$L$50;0);0)
добавлять не стОит. СМЕЩ - волатильная (посмотрите в поиске, например, здесь) функция. По возможности их стараются избегать.
Гораздо производительнее будет
Код
ИНДЕКС(K$1:K$50;ПОИСКПОЗ(A15;L$2:L$50;))


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА вот кусок
Код
СМЕЩ($K$1;ПОИСКПОЗ(A15;$L$2:$L$50;0);0)
добавлять не стОит. СМЕЩ - волатильная (посмотрите в поиске, например, здесь) функция. По возможности их стараются избегать.
Гораздо производительнее будет
Код
ИНДЕКС(K$1:K$50;ПОИСКПОЗ(A15;L$2:L$50;))

Автор - _Boroda_
Дата добавления - 19.07.2015 в 15:26
Udik Дата: Воскресенье, 19.07.2015, 15:41 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Да у меня как-то с ИНДЕКС какое-то недопонимание было :) Вот так и тянется, хотя с ним быстрее.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеДа у меня как-то с ИНДЕКС какое-то недопонимание было :) Вот так и тянется, хотя с ним быстрее.

Автор - Udik
Дата добавления - 19.07.2015 в 15:41
iRustem Дата: Воскресенье, 19.07.2015, 15:45 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
_Boroda_, благодарю)
Единственный минус - появляется предупреждение о цикличной ссылке.
Быть может я что-то не так сделал?
Формула для ячейки А16:
Код
=ЕСЛИ(B16="";"";ЕСЛИ((ДЛСТР(A15)-ДЛСТР(ПОДСТАВИТЬ(A15;" ";""))=1);A15;ИНДЕКС(K$1:K$50;ПОИСКПОЗ(A15;L$2:L$50;))))


Кстати, если например вставить эту же формулу в А15,
Код
=ЕСЛИ(B15="";"";ЕСЛИ((ДЛСТР(A14)-ДЛСТР(ПОДСТАВИТЬ(A14;" ";""))=1);A14;ИНДЕКС(K$1:K$50;ПОИСКПОЗ(A14;L$2:L$50;))))

То, подстановка имя+фамилия срабатывают некорректно, из списка возвращается 1-й сотрудник.
Так все в порядке:
Код
=ЕСЛИ(B15="";"";ЕСЛИ((ДЛСТР(A14)-ДЛСТР(ПОДСТАВИТЬ(A14;" ";""))=1);A14;СМЕЩ($K$1;ПОИСКПОЗ(A14;$L$2:$L$50;0);0)))

Но почитал про волатильность и ужаснулся.


Сообщение отредактировал iRustem - Воскресенье, 19.07.2015, 16:38
 
Ответить
Сообщение_Boroda_, благодарю)
Единственный минус - появляется предупреждение о цикличной ссылке.
Быть может я что-то не так сделал?
Формула для ячейки А16:
Код
=ЕСЛИ(B16="";"";ЕСЛИ((ДЛСТР(A15)-ДЛСТР(ПОДСТАВИТЬ(A15;" ";""))=1);A15;ИНДЕКС(K$1:K$50;ПОИСКПОЗ(A15;L$2:L$50;))))


Кстати, если например вставить эту же формулу в А15,
Код
=ЕСЛИ(B15="";"";ЕСЛИ((ДЛСТР(A14)-ДЛСТР(ПОДСТАВИТЬ(A14;" ";""))=1);A14;ИНДЕКС(K$1:K$50;ПОИСКПОЗ(A14;L$2:L$50;))))

То, подстановка имя+фамилия срабатывают некорректно, из списка возвращается 1-й сотрудник.
Так все в порядке:
Код
=ЕСЛИ(B15="";"";ЕСЛИ((ДЛСТР(A14)-ДЛСТР(ПОДСТАВИТЬ(A14;" ";""))=1);A14;СМЕЩ($K$1;ПОИСКПОЗ(A14;$L$2:$L$50;0);0)))

Но почитал про волатильность и ужаснулся.

Автор - iRustem
Дата добавления - 19.07.2015 в 15:45
gling Дата: Воскресенье, 19.07.2015, 19:18 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2525
Репутация: 678 ±
Замечаний: 0% ±

2010
К сожалению, так не считает,

Потому что в формулах диапазон ограничен 171 строкой листа "Реестр инцидентов". Увеличите диапазон через Заменить до требуемого, все будет считать. 'Реестр инцидентов'!$A$4:$P$171 и 'Реестр инцидентов'!$Q$4:$Q$171, добавьте им по два нолика (по типу $Q$4:$Q$17100) сами увидите.


ЯД-41001506838083

Сообщение отредактировал gling - Воскресенье, 19.07.2015, 19:20
 
Ответить
Сообщение
К сожалению, так не считает,

Потому что в формулах диапазон ограничен 171 строкой листа "Реестр инцидентов". Увеличите диапазон через Заменить до требуемого, все будет считать. 'Реестр инцидентов'!$A$4:$P$171 и 'Реестр инцидентов'!$Q$4:$Q$171, добавьте им по два нолика (по типу $Q$4:$Q$17100) сами увидите.

Автор - gling
Дата добавления - 19.07.2015 в 19:18
Udik Дата: Воскресенье, 19.07.2015, 20:06 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
iRustem, 9
вот так вроде правильно
Код
=ЕСЛИ(B15="";"";ЕСЛИ((ДЛСТР(A14)-ДЛСТР(ПОДСТАВИТЬ(A14;" ";""))=1);A14;ИНДЕКС(K$2:K$50;ПОИСКПОЗ(A14;L$2:L$50;);1)))


там ошибочка была K$1:K$50 и вместо 0 надо 1

это из-за небольшой разницы как смещение считается в ИНДЕКС и СМЕЩ :)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Воскресенье, 19.07.2015, 20:12
 
Ответить
СообщениеiRustem, 9
вот так вроде правильно
Код
=ЕСЛИ(B15="";"";ЕСЛИ((ДЛСТР(A14)-ДЛСТР(ПОДСТАВИТЬ(A14;" ";""))=1);A14;ИНДЕКС(K$2:K$50;ПОИСКПОЗ(A14;L$2:L$50;);1)))


там ошибочка была K$1:K$50 и вместо 0 надо 1

это из-за небольшой разницы как смещение считается в ИНДЕКС и СМЕЩ :)

Автор - Udik
Дата добавления - 19.07.2015 в 20:06
_Boroda_ Дата: Воскресенье, 19.07.2015, 20:22 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
вместо 0 надо 1

Не обязательно. Под ИНДЕКСом у нас один столбец К, поэтому достаточно только номера строки, а номер столбца можно вообще не писать.
Вот так излишне
Код
ИНДЕКС(К:К;2;1)

Достаточно
Код
ИНДЕКС(К:К;2)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
вместо 0 надо 1

Не обязательно. Под ИНДЕКСом у нас один столбец К, поэтому достаточно только номера строки, а номер столбца можно вообще не писать.
Вот так излишне
Код
ИНДЕКС(К:К;2;1)

Достаточно
Код
ИНДЕКС(К:К;2)

Автор - _Boroda_
Дата добавления - 19.07.2015 в 20:22
Udik Дата: Воскресенье, 19.07.2015, 21:21 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Ну ноля то точно не должно быть.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеНу ноля то точно не должно быть.

Автор - Udik
Дата добавления - 19.07.2015 в 21:21
miver Дата: Воскресенье, 19.07.2015, 22:48 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
iRustem, Если, все-таки, решитесь перейти на макросы, то посмотрите переделку
Макрос запускается при добавлении или удалении имени в столбике Состава группы
К сообщению приложен файл: 2986819.xlsm (50.3 Kb)


Сообщение отредактировал miver - Воскресенье, 19.07.2015, 22:49
 
Ответить
СообщениеiRustem, Если, все-таки, решитесь перейти на макросы, то посмотрите переделку
Макрос запускается при добавлении или удалении имени в столбике Состава группы

Автор - miver
Дата добавления - 19.07.2015 в 22:48
iRustem Дата: Понедельник, 20.07.2015, 12:28 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день!

Всем большое спасибо за помощь!

Воспользовался макросом, расчеты проходят вообще незаметно, Excel не грузится.
miver, подскажите, пожалуйста, как изменить событие, чтобы данные обновлялись не при изменении списка сотрудников, а при изменении значений (любых) на вкладке "Реестр инцидентов"?

\\ Добавлено: обошел этот момент, решил добавить кнопку, которая вносит изменения в список сотрудников на всех вкладках ^_^


Сообщение отредактировал iRustem - Понедельник, 20.07.2015, 13:06
 
Ответить
СообщениеДобрый день!

Всем большое спасибо за помощь!

Воспользовался макросом, расчеты проходят вообще незаметно, Excel не грузится.
miver, подскажите, пожалуйста, как изменить событие, чтобы данные обновлялись не при изменении списка сотрудников, а при изменении значений (любых) на вкладке "Реестр инцидентов"?

\\ Добавлено: обошел этот момент, решил добавить кнопку, которая вносит изменения в список сотрудников на всех вкладках ^_^

Автор - iRustem
Дата добавления - 20.07.2015 в 12:28
miver Дата: Понедельник, 20.07.2015, 13:46 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
при изменении значений (любых) на вкладке "Реестр инцидентов"
Перенесите макрос в Worksheet_Change листа "Реестр инцидентов" (внутреннее имя - Лист4) и уберите проверку Target
[vba]
Код
If Target.Column = 12 And Target.Row > 1 And Target.Row < 42 Then
[/vba]
 
Ответить
Сообщение
при изменении значений (любых) на вкладке "Реестр инцидентов"
Перенесите макрос в Worksheet_Change листа "Реестр инцидентов" (внутреннее имя - Лист4) и уберите проверку Target
[vba]
Код
If Target.Column = 12 And Target.Row > 1 And Target.Row < 42 Then
[/vba]

Автор - miver
Дата добавления - 20.07.2015 в 13:46
iRustem Дата: Понедельник, 20.07.2015, 14:05 | Сообщение № 17
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
miver, при компиляции возникает ошибка, ссылается на строку:
Код
If UBound(Arr_Name) > 1 Then Cel.Offset(0, -1).Value = Arr_Name(1) & " " & Arr_Name(0)


(на форуме буква "N" в слове "Name" заменяется на "Ч").
[moder]А не нужно в коде макроса использовать теги для формул


Сообщение отредактировал _Boroda_ - Понедельник, 20.07.2015, 14:16
 
Ответить
Сообщениеmiver, при компиляции возникает ошибка, ссылается на строку:
Код
If UBound(Arr_Name) > 1 Then Cel.Offset(0, -1).Value = Arr_Name(1) & " " & Arr_Name(0)


(на форуме буква "N" в слове "Name" заменяется на "Ч").
[moder]А не нужно в коде макроса использовать теги для формул

Автор - iRustem
Дата добавления - 20.07.2015 в 14:05
miver Дата: Понедельник, 20.07.2015, 14:33 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
iRustem, Выложите Ваш файл, где возникает ошибка. Да и обычно в окне ошибки пишется причина ;)
 
Ответить
СообщениеiRustem, Выложите Ваш файл, где возникает ошибка. Да и обычно в окне ошибки пишется причина ;)

Автор - miver
Дата добавления - 20.07.2015 в 14:33
miver Дата: Понедельник, 20.07.2015, 14:48 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Скорей всего остался Target. Попробуйте заменить на такой код
[vba]
Код

       For Each Cel In Лист1.Range("L2", "L41")
          If Cel.Value = "" Then
              Cel.Offset(0, -1).ClearContents
          Else
              Arr = Split(Cel.Value)
              If UBound(Arr) > 1 Then Cel.Offset(0, -1).Value = Arr(1) & " " & Arr(0)
              Erase Arr
          End If
      Next Cel
[/vba]


Сообщение отредактировал miver - Понедельник, 20.07.2015, 14:49
 
Ответить
СообщениеСкорей всего остался Target. Попробуйте заменить на такой код
[vba]
Код

       For Each Cel In Лист1.Range("L2", "L41")
          If Cel.Value = "" Then
              Cel.Offset(0, -1).ClearContents
          Else
              Arr = Split(Cel.Value)
              If UBound(Arr) > 1 Then Cel.Offset(0, -1).Value = Arr(1) & " " & Arr(0)
              Erase Arr
          End If
      Next Cel
[/vba]

Автор - miver
Дата добавления - 20.07.2015 в 14:48
iRustem Дата: Понедельник, 20.07.2015, 20:04 | Сообщение № 20
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
miver, и так не считает... файл добавил во вложение. Если будет возможность посмотрите, пожалуйста.
К сообщению приложен файл: 5372921.xlsm (66.9 Kb)


Сообщение отредактировал iRustem - Понедельник, 20.07.2015, 20:07
 
Ответить
Сообщениеmiver, и так не считает... файл добавил во вложение. Если будет возможность посмотрите, пожалуйста.

Автор - iRustem
Дата добавления - 20.07.2015 в 20:04
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос вместо выборки значений из массива (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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