Skip to content
Как сделать перебор диапазона ячеек
На чтение 2 мин. Просмотров 14.1k.
Что делает макрос: Этот базовый макрос показывает вам простой способ сделать перебор диапазона ячеек по одной и выполнить какое-либо действие.
Содержание
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
Как макрос работает
В этом макросе используются две переменные объекта Range. Одна из переменных отражает объем данных, с которым мы работаем, в то время как другая используется для хранения каждой отдельной клетки в диапазоне. Потом мы используем оператор For Each, чтобы активировать или принести каждую ячейку в фокусе целевого диапазона.
Код макроса
Sub PereborDiapazonaYacheek() 'Шаг 1: Объявить переменные Dim MyRange As Range Dim MyCell As Range 'Шаг 2: Определение целевого диапазона. Set MyRange = Range("D6:D17") 'Шаг 3: Запуск цикла через диапазон. For Each MyCell In MyRange 'Шаг 4: Какое-либо действие с каждой ячейкой. If MyCell.Value > 3000 Then MyCell.Font.Bold = True End If 'Шаг 5: Перейти к следующей ячейке в диапазоне Next MyCell End Sub
Как этот код работает
- Макрос объявляет две переменные объекта Range. Одна из них, называется MyRange, держит весь целевой диапазон. Другая, называемый MyCell, держит каждую ячейку в диапазоне, так как макрос проводит цикл через них один за другим.
- На шаге 2 мы заполняем переменную MyRange с целевым диапазоном. В этом примере мы используем Range («D6:D17»). Если ваш целевой диапазон является именованным, можно просто ввести его название — Range («MyNamedRange»).
- На этом этапе макрос начинает цикл через каждую ячейку в целевом диапазоне, активизируя ее.
- После того, как ячейка активируется, можно с ней что-то сделать. Это «что-то» на самом деле зависит от поставленной задачи. Вы можете удалять строки, когда активная ячейка имеет определенное значение, или вы можете вставить строку между каждой активной ячейки. В этом примере макрос меняется шрифт полужирный для любого элемента, который имеет значение больше, чем 3000.
- На шаге 5, макрос возвращается назад, чтобы получить следующую ячейку. После активации всех ячеек в целевом диапазоне, макрос заканчивает работу.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
Кэтти-бри Пользователь Сообщений: 16 |
Добрый вечер, уважаемые гуру Excel. Учусь работать в Экселе, изучая разные задачки. Столкнулась вот с одной запаркой, может кто поможет: Итак, есть две колонки. Например Вопрос. Задать формулами в колонки C и D алгоритм, чтобы перебирались все возможные сочетания (при этом не повторяясь) Изменено: Кэтти-бри — 28.02.2017 16:59:42 |
Кэтти-бри Пользователь Сообщений: 16 |
Догадываюсь, что надо использовать формулу массива, но что-то не получается — видимо навыка не хватает, и где-то ошибаюсь. |
Кэтти-бри Пользователь Сообщений: 16 |
Вот перечитывала, поняла, что неверно сформулировала задачу. Значения должны переноситься не в одну колонку, а в две, т.е. перебор девяти значений как в примере должен происходить в колонках C и D соответственно. т.е. — первые три в C — Вася-Вася-Вася, а в D соответствующие им разные фамилии. |
Ігор Гончаренко Пользователь Сообщений: 13746 |
#4 28.02.2017 17:06:22
обошлось обычным ИНДЕКС, без формул массива Прикрепленные файлы
Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Кэтти-бри Пользователь Сообщений: 16 |
спасибо, всё работает! Вопрос: можно ли быстро переделать так, чтобы результат всё-таки попадал в два разных столбца, потому что при попадании в один возникнут проблемы с дальнейшей работой с данными. Плюс при растягивании формула ведёт себя не очень корректно, продолжаясь с бесконечно повторяющимися фамилиями. |
Ігор Гончаренко Пользователь Сообщений: 13746 |
#6 28.02.2017 17:23:46 в формуле явно видно один ИНДЕКС для имени а второй — для фамилии
формула ведет себя так, как в ней написано Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Кэтти-бри Пользователь Сообщений: 16 |
#7 28.02.2017 17:27:24
Уже сделала всё, спасибо большое за помощь. Я просто сказала что должно быть в идеале, вдруг вы любите всё делать идеально. Без Вашей подсказки не справилась бы. |
||
Кэтти-бри Пользователь Сообщений: 16 |
Кстати, проблема всё равно не решена, потому в решении, предложенном пользователем Ігор Гончаренко , при повторяющихся значениях в итоговую таблицу может несколько раз попасть одно и то же. |
а если исключить ввод «кривых» значений в данные? Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
Кэтти-бри Пользователь Сообщений: 16 |
#10 28.02.2017 17:56:34
Так вопрос не в «кривых» значениях. Допустим, в этих же колонках например не имя и фамилия, а фамилия и наименование товара. Ну, что продал. Ну скажем: |
||
_Igor_61 Пользователь Сообщений: 3007 |
Здравствуйте! А файл с примером исходных данных никак нельзя показать? Что-то мне подсказывает, что тут дело в изначальной организации данных, а не в необходимости создания формул, которыми сначала нужно наплодить множество комбинаций, а потом из них убирать совпадения. Сделал вариант на основе файла от Ігор Гончаренко, проверяйте. Изменено: _Igor_61 — 28.02.2017 22:57:01 |
Кэтти-бри Пользователь Сообщений: 16 |
Добрый день, _Igor_61 ! Извините, что долго не отвечала, сейчас прикреплю вариант исходника, основанный на вашем же примере. Ваш вариант куда ближе к правде, но он некорректно работает, когда количество заполненных строк и столбцов неодинаково. Я чуть поменяла исходные данные, вот что получилось. |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Файлы удалил: превышен максимально допустимый размер. |
_Igor_61 Пользователь Сообщений: 3007 |
Уфф… Чем дальше в лес… Кэтти-бри, а Вы не могли бы сформулировать итоговую задачу — что в итоге должно получиться? Нужно посчитать кол-во звонков по каждому сотруднику по каждому направлению, или общее время звонков по каждому сотруднику или что-то еще? Понимаю, что Вам наверное интересно сделать перебор формулой, но тот ли это способ для решения задачи? |
Кэтти-бри Пользователь Сообщений: 16 |
_Igor_61
, если вы успели скачать удалённый администрацией файл, то должно получиться следующее: |
Кэтти-бри Пользователь Сообщений: 16 |
_Igor_61
Ну т.е. исходя из вашей формулировки — по общее время звонка по каждому сотруднику по каждому направлению. |
_Igor_61 Пользователь Сообщений: 3007 |
|
Кэтти-бри Пользователь Сообщений: 16 |
Фантастика. Всё правильно, всё работает. Огромное спасибо. Пошла разбираться как Вы этого добились. |
_Igor_61 Пользователь Сообщений: 3007 |
|
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#20 01.03.2017 15:04:25 Доброе время суток.
Кэтти хочет Прикрепленные файлы
Изменено: Андрей VG — 01.03.2017 15:09:38 |
Содержание
- Как сделать перебор диапазона ячеек
- Как макрос работает
- Код макроса
- Как этот код работает
- Как использовать
- Excel функция перебора значений
- Excel функция перебора значений
- Использование операторов For Each. Next
- Проход по диапазону ячеек
- Выход из цикла For Each. Next до его завершения
- Использование цикла For Each. Next для итерации в классе VBA
- См. также
- Поддержка и обратная связь
Как сделать перебор диапазона ячеек
Что делает макрос: Этот базовый макрос показывает вам простой способ сделать перебор диапазона ячеек по одной и выполнить какое-либо действие.
Как макрос работает
В этом макросе используются две переменные объекта Range. Одна из переменных отражает объем данных, с которым мы работаем, в то время как другая используется для хранения каждой отдельной клетки в диапазоне. Потом мы используем оператор For Each, чтобы активировать или принести каждую ячейку в фокусе целевого диапазона.
Код макроса
Как этот код работает
- Макрос объявляет две переменные объекта Range. Одна из них, называется MyRange, держит весь целевой диапазон. Другая, называемый MyCell, держит каждую ячейку в диапазоне, так как макрос проводит цикл через них один за другим.
- На шаге 2 мы заполняем переменную MyRange с целевым диапазоном. В этом примере мы используем Range («D6:D17»). Если ваш целевой диапазон является именованным, можно просто ввести его название — Range («MyNamedRange»).
- На этом этапе макрос начинает цикл через каждую ячейку в целевом диапазоне, активизируя ее.
- После того, как ячейка активируется, можно с ней что-то сделать. Это «что-то» на самом деле зависит от поставленной задачи. Вы можете удалять строки, когда активная ячейка имеет определенное значение, или вы можете вставить строку между каждой активной ячейки. В этом примере макрос меняется шрифт полужирный для любого элемента, который имеет значение больше, чем 3000.
- На шаге 5, макрос возвращается назад, чтобы получить следующую ячейку. После активации всех ячеек в целевом диапазоне, макрос заканчивает работу.
Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
- Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
- Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
- Выберите Insert➜Module.
- Введите или вставьте код.
Источник
Excel функция перебора значений
«=ЕСЛИ(R16=0;R6;ЕСЛИ(R6=0;R7;ЕСЛИ(R7=0;R8;R16)))» — сама формула
Задумка такова. Ячейка R16 пустая, R6-R8 с данными. Необходимо чтоб в столбце D, в любой ячейке отображалась ячейка R16, но только в том случае если в ней есть запись. В противном случае отображается R6. Если и в R6 нет записи, то R7 и так далее.
На данный момент отображается только ячейка R6, если её сделать пустой, то R7 не отобразится.
Моя формула располагается только в ячейке D11, в прилагаемом файле.
Делаю график дежурств, чтоб он автоматически расставлял от 3-х до 6-ти фамилий по всему месяцу в определённом порядке.
«=ЕСЛИ(R16=0;R6;ЕСЛИ(R6=0;R7;ЕСЛИ(R7=0;R8;R16)))» — сама формула
Задумка такова. Ячейка R16 пустая, R6-R8 с данными. Необходимо чтоб в столбце D, в любой ячейке отображалась ячейка R16, но только в том случае если в ней есть запись. В противном случае отображается R6. Если и в R6 нет записи, то R7 и так далее.
На данный момент отображается только ячейка R6, если её сделать пустой, то R7 не отобразится.
Моя формула располагается только в ячейке D11, в прилагаемом файле.
Делаю график дежурств, чтоб он автоматически расставлял от 3-х до 6-ти фамилий по всему месяцу в определённом порядке. dog144
Сообщение «=ЕСЛИ(R16=0;R6;ЕСЛИ(R6=0;R7;ЕСЛИ(R7=0;R8;R16)))» — сама формула
Задумка такова. Ячейка R16 пустая, R6-R8 с данными. Необходимо чтоб в столбце D, в любой ячейке отображалась ячейка R16, но только в том случае если в ней есть запись. В противном случае отображается R6. Если и в R6 нет записи, то R7 и так далее.
На данный момент отображается только ячейка R6, если её сделать пустой, то R7 не отобразится.
Моя формула располагается только в ячейке D11, в прилагаемом файле.
Делаю график дежурств, чтоб он автоматически расставлял от 3-х до 6-ти фамилий по всему месяцу в определённом порядке. Автор — dog144
Дата добавления — 14.09.2014 в 18:08
Источник
Excel функция перебора значений
Добрый день ! Подскажите если знаете. )
Как сделать в excel перебор чисел с определенным шагом. Скажем хочу задать excel найти из диапазона цифр (от 587,01 до 591,99 с шагом 0,01) число при умножении которого на число из диапазона (от 3170,01 до 3200,99 с шагом 0,01) получим результат 1886000. Важно что бы все числа были точными до сотых без применения округлений. Т.е числа в которых после запятой встречаются цифры дальше сотых неприемлемы но и округления применять нельзя.
Заранее благодарен за ответ !
Добрый день ! Подскажите если знаете. )
Как сделать в excel перебор чисел с определенным шагом. Скажем хочу задать excel найти из диапазона цифр (от 587,01 до 591,99 с шагом 0,01) число при умножении которого на число из диапазона (от 3170,01 до 3200,99 с шагом 0,01) получим результат 1886000. Важно что бы все числа были точными до сотых без применения округлений. Т.е числа в которых после запятой встречаются цифры дальше сотых неприемлемы но и округления применять нельзя.
Заранее благодарен за ответ ! Rafting
Сообщение Добрый день ! Подскажите если знаете. )
Как сделать в excel перебор чисел с определенным шагом. Скажем хочу задать excel найти из диапазона цифр (от 587,01 до 591,99 с шагом 0,01) число при умножении которого на число из диапазона (от 3170,01 до 3200,99 с шагом 0,01) получим результат 1886000. Важно что бы все числа были точными до сотых без применения округлений. Т.е числа в которых после запятой встречаются цифры дальше сотых неприемлемы но и округления применять нельзя.
Заранее благодарен за ответ ! Автор — Rafting
Дата добавления — 10.04.2017 в 15:08
sboy | Дата: Понедельник, 10.04.2017, 15:52 | Сообщение № 2 | ||||||||||||||||||||||||||||||||||
|
Всем привет! Такой вопрос:
Нужно перебирать значения ячеек от A2 до A1000 сравнивая их с ячейкой B3, пока они совпадают — выдавать результат, как только совпадение прекратилось, останавливать перебор.
Подробно:
Есть 2 вкладки — Работа и ЗП. Во вкладе ‘Работа’ ячейки с датами и именами промоутеров:
Во вкладке ‘ЗП’ список с именами промоутеров:
Мне нужно чтоб при выборе даты (ячейка «B3») во вкладке ‘ЗП’, список ‘Промик’ заполнялся сам. Тоесть, если я выбираю дату 19.04.22, нужно чтоб формула начинала перебор всех дат во вкладе ‘Работа’, и все промоутеры которые выходили в этот день отображались в списке промоутеров во вкладке «ЗП» (в моем случае, имена — Данил (1030), Даниил, Саша).
Надеюсь понятно объяснил
Буду очень благодарен, если кто-то поможет разобраться с этим.
Модератор:Naeel Maqsudov
-
Stafford
- Сообщения:4
- Зарегистрирован:09 авг 2007, 14:18
На листе есть столбец с значениями. Берем значение и сравниваем его с каждой ячейкой в строке. Если значения равны то подкрашиваем ячейку желтым. Т.е берем значение из А1 и сравниваем его с В1, С1, D1…. тоже со второй А2 и сравниваем его с В2, С2, D2…. и так далее.
-
Pavel55
- Сообщения:405
- Зарегистрирован:20 окт 2006, 11:40
- Откуда:Moscow
09 авг 2007, 16:08
Может проще через Условное форматирование ? Выделяете строку, далее меню Формат — Условное форматирование … там выбираете Значение — Равно — =$A$1 — Формат — Вид — любой цвет — ОК
P.S. Можно конечно и макросом, но работать будет дольше, чем условное форматирование
-
bi-lya
- Сообщения:97
- Зарегистрирован:07 июн 2007, 14:08
09 авг 2007, 16:20
?VBA
Код: Выделить всё
For a = 1 To 10
For b = 2 To 10
If Cells(a, 1).Value = Cells(a, b) Then
Cells(a, 1).Interior.ColorIndex = 6
End If
Next
Next
-
Stafford
- Сообщения:4
- Зарегистрирован:09 авг 2007, 14:18
09 авг 2007, 17:07
Pavel55 писал(а):Может проще через Условное форматирование ? Выделяете строку, далее меню Формат — Условное форматирование … там выбираете Значение — Равно — =$A$1 — Формат — Вид — любой цвет — ОК
P.S. Можно конечно и макросом, но работать будет дольше, чем условное форматирование
Удобно, но на листе несколько сотен строк. Нельзя ли автоматизировать чтобы не приходилось на каждой строчке проделывать одно и то-же? Спасибо.
-
Stafford
- Сообщения:4
- Зарегистрирован:09 авг 2007, 14:18
09 авг 2007, 17:09
bi-lya писал(а):?VBA
Код: Выделить всё
For a = 1 To 10 For b = 2 To 10 If Cells(a, 1).Value = Cells(a, b) Then Cells(a, 1).Interior.ColorIndex = 6 End If Next Next
Это для массива 10 на 10. А если длины строк разные и общее кол-во строк может менятся.
Ой-ё-ё-ё-ёой. Оказывается я не знаю куда правильно код вставлять. Объясните пожалуйста. Я вставил в Сервис->Макрос->Макросы… , «Находится в» указал свой файл. нажал выполнить не заработало.
-
Pavel55
- Сообщения:405
- Зарегистрирован:20 окт 2006, 11:40
- Откуда:Moscow
09 авг 2007, 17:53
Stafford писал(а):Удобно, но на листе несколько сотен строк. Нельзя ли автоматизировать чтобы не приходилось на каждой строчке проделывать одно и то-же? Спасибо.
Просто когда делаете условие в Условном Форматировании надо написать формулу =$A1
А затем скопировать весь этот формат на все ваши ряды (секунд за 7-10) с помощью спец. кнопки (метёлки) с названием Формат по образцу.
Вся операция занимает … ну минуту. и при том, она будет сразу же пересчитыватся, как только значение в столбце А изменилось, сразу и измениться местоположение жёлтой ячейки
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Stafford
- Сообщения:4
- Зарегистрирован:09 авг 2007, 14:18
10 авг 2007, 13:39
Pavel55 писал(а):Просто когда делаете условие в Условном Форматировании надо написать формулу =$A1
Все гениальное просто!!! Огромное спасибо.