Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2017, 12:03   #41
Aristarkch
Пользователь
 
Регистрация: 06.03.2017
Сообщений: 38
По умолчанию Выделение строк

Цитата:
Сообщение от AlexM12 Посмотреть сообщение
sm - массив адресов ячеек в текстовом формате.
Как он получается. Рассмотрим на примере выделения ячейки АМ34.
Target.Formula - возвращает формулу из ячейки АМ34, =СУММПРОИЗВ(AM$1:AM$18*X$1:X$18*W$1 :W$18)
Replace заменяет знаки умножения на двоеточие. Получаем =СУММПРОИЗВ(AM$1:AM$18:X$1:X$18:W$1 :W$18)
Функция Split делит формулу на части по разделителю двоеточие.
Получаем массив подстрок
=СУММПРОИЗВ(AM$1 AM$18 X$1 X$18 W$1 W$18)
Номера элементов массива начинаются с нуля.
В макросе используем элемент sm(1) - AM$18, sm(2) - X$1 и sm(4) - W$1
sm0-sm2 - это смещение столбца относительно столбца выделенной ячейки АМ34
Значения смещения нужны для определения столбца, в котором искать единички и подкрашивать их.
Развитие задачи не понял. Конкретно фразу "Требуется в заданном (выбранном) столбце другого листа выставить единицы в 8 и 14 строках".
В предыдущей задачи выделяем ячейку на листе2 и там же подкрашиваем.
А тут выделяем в столбце другого листа.
Попробуйте объяснить подробно, так как я подробно расписал что делает всего одна строка кода sm = Split(Replace(Target.Formula, "*", ":"), ":")
Здравствуйте, Алексей!
Я стараюсь разобраться в VBA и Вашем решении - еще раз примите мою благодарность! - и трансформировать его возможности под мои растущие потребности.
Прикладываю Ваш исходный файл - Последний вариант-4 и прикладываю вариант его преобразованного и упрощенного мной (для удобства) - Мой эксперимент.

Вот фраза из Вашего письма с моими добавками:
Функция Split делит формулу на части по разделителю двоеточие.
Получаем массив подстрок
=СУММПРОИЗВ(AM$1 AM$18 X$1 X$18 W$1 W$18)
sm(0) sm(1) sm(2) sm(3) sm(4) sm(5)
0 1 2 3 4 5

Я не могу понять и объяснить, почему в макросе работают сочетания подстрок 1-2-4 (сейчас установлен), 1-3-4 и не работают все остальные, например, 0-3-4, 0-2-5, 1-2-5, 1-3-5 и т.д.
Буду признателен, если Вы сможете ответить.
Вложения
Тип файла: xls Последний вариант - 4.xls (60.5 Кб, 9 просмотров)
Тип файла: xls Мой эксперимент.xls (61.5 Кб, 9 просмотров)
Aristarkch вне форума Ответить с цитированием
Старый 15.04.2017, 18:33   #42
AlexM12
Форумчанин
 
Аватар для AlexM12
 
Регистрация: 29.08.2012
Сообщений: 209
По умолчанию

Субстрока с индексом 0 - "=СУММПРОИЗВ(AM$1"
Субстрока с индексом 5 - "W$18)"
Т.е. эти субстроки содержат не только адрес. И когда пытаемся определить номер столбца Range(sm(0)).Column происходит ошибка.
Строка кода On Error Resume Next пропускает ошибки, поэтому макрос продолжает работать, но работает неправильно.
Алексей М.
AlexM12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение строк Aristarkch Microsoft Office Excel 12 07.03.2017 17:09
Выделение позиций(строк) PayPinki C++ Builder 1 31.01.2013 10:11
Выделение строк в Мемо Zuba C++ Builder 1 28.04.2012 13:11
выделение строк ruavia3 Microsoft Office Excel 2 26.08.2009 13:36
Выделение строк с... по - в SynEdit Noor Общие вопросы Delphi 2 29.12.2007 12:41