Перебор значений в столбце в excel

Skip to content

Как сделать перебор диапазона ячеек

На чтение 2 мин. Просмотров 14.1k.

Что делает макрос: Этот базовый макрос показывает вам простой способ сделать перебор диапазона ячеек по одной и выполнить какое-либо действие.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

В этом макросе используются две переменные объекта 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

Как этот код работает

  1. Макрос объявляет две переменные объекта Range. Одна из них, называется MyRange, держит весь целевой диапазон. Другая, называемый MyCell, держит каждую ячейку в диапазоне, так как макрос проводит цикл через них один за другим.
  2. На шаге 2 мы заполняем переменную MyRange с целевым диапазоном. В этом примере мы используем Range («D6:D17»). Если ваш целевой диапазон является именованным, можно просто ввести его название — Range («MyNamedRange»).
  3. На этом этапе макрос начинает цикл через каждую ячейку в целевом диапазоне, активизируя ее.
  4. После того, как ячейка активируется, можно с ней что-то сделать. Это «что-то» на самом деле зависит от поставленной задачи. Вы можете удалять строки, когда активная ячейка имеет определенное значение, или вы можете вставить строку между каждой активной ячейки. В этом примере макрос меняется шрифт полужирный для любого элемента, который имеет значение больше, чем 3000.
  5. На шаге 5, макрос возвращается назад, чтобы получить следующую ячейку. После активации всех ячеек в целевом диапазоне, макрос заканчивает работу.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

Добрый вечер, уважаемые гуру Excel. Учусь работать в Экселе, изучая разные задачки. Столкнулась вот с одной запаркой, может кто поможет:

Итак, есть две колонки. Например
А                  B
Вася             Иванов
Гена             Петров
Петя              Сидоров

Вопрос. Задать формулами в колонки C и D алгоритм, чтобы перебирались все возможные сочетания (при этом не повторяясь)
Т.е. должны получиться 9 комбинаций, Вася Иванов, Вася Петров…. Петя Сидоров. При этом подразумевается, чтобы формула работала с большой исходной таблицей (например, сорок фамилий и семь имён, всего будет 280 комбинаций, или меньше если какие-то из значений исходника повторяются), при этом чтобы если в исходнике несколько раз встречается одно и то же имяфамилия, то в результате повторов не было, т.е. не было двух Васей Ивановых. Надеюсь, понятно объяснила. Макросом или сводной таблицей всё решается, меня интересует можно ли достичь решения формулами, и если можно, то как это будет выглядеть. Спасибо за внимание.  

Изменено: Кэтти-бри28.02.2017 16:59:42

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

Догадываюсь, что надо использовать формулу массива, но что-то не получается — видимо навыка не хватает, и где-то ошибаюсь.

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

Вот перечитывала, поняла, что неверно сформулировала задачу. Значения должны переноситься не в одну колонку, а в две, т.е. перебор девяти значений как в примере должен происходить в колонках C и D соответственно. т.е. — первые три в C — Вася-Вася-Вася, а в D соответствующие им разные фамилии.

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#4

28.02.2017 17:06:22

Код
=ИНДЕКС(C1;ЦЕЛОЕ((СТРОКА()-1)/СЧЁТЗ(C2))+1)&" "&ИНДЕКС(C2;ОСТАТ(СТРОКА()-1;3)+1)

обошлось обычным ИНДЕКС, без формул массива

Прикрепленные файлы

  • Книга5.xlsx (8.56 КБ)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

спасибо, всё работает! Вопрос: можно ли быстро переделать так, чтобы результат всё-таки попадал в два разных столбца, потому что при попадании в один возникнут проблемы с дальнейшей работой с данными. Плюс при растягивании формула ведёт себя не очень корректно, продолжаясь с бесконечно повторяющимися фамилиями.

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#6

28.02.2017 17:23:46

в формуле явно видно один ИНДЕКС для имени а второй — для фамилии
а что, самостоятельно разбить формулу на 2 части — никак? возможно Excel — это не Ваше

Цитата
Плюс при растягивании формула ведёт себя не очень корректно

формула ведет себя так, как в ней написано
Вы же прекрасно посчитали, что в случае 3 имени, 3 фамилии будет 9 вариантов сочетаний, а семь имен и 40 фамилий = 280…
не растягивайте формулу за пределы количества сочетаний — и все будет нормально))
или поправьте немного, чтобы «за пределами» формула возвращала пустую строку
удачи!

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

#7

28.02.2017 17:27:24

Цитата
Ігор Гончаренко написал:
в формуле явно видно один ИНДЕКС для имени а второй — для фамилии
а что, самостоятельно разбить формулу на 2 части — никак? возможно Excel — это не Ваше

Уже сделала всё, спасибо большое за помощь. Я просто сказала что должно быть в идеале, вдруг вы любите всё делать идеально. Без Вашей подсказки не справилась бы.

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

Кстати, проблема всё равно не решена, потому в решении, предложенном пользователем

Ігор Гончаренко

, при повторяющихся значениях в итоговую таблицу может несколько раз попасть одно и то же.

 

а если исключить ввод «кривых» значений в данные?

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

#10

28.02.2017 17:56:34

Цитата
Ігор Гончаренко написал:
а если исключить ввод «кривых» значений в данные?

Так вопрос не в «кривых» значениях. Допустим, в этих же колонках например не имя и фамилия, а фамилия и наименование товара. Ну, что продал. Ну скажем:
А_____________________________В
Пупкин_______________________Стиральная машина
Губкин________________________Магнитофон
Пупкин________________________Магнитофон
Губкин_________________________Магнитофон
Канарейкина_____________________вездеход
Тогда в итоге должно получиться
C___________________________________D
Пупкин_______________________________Стиральная машина (в третьей колонке например количество, но как его посчитать даже мне понятно, оно в рамках данной задачи не интересно)
Пупкин________________________________Магнитофон
Пупкин___________________________________вездеход
Губкин____________________________________Стиральная машина…. (и т.д.)
При этом второй раз строки Пупкин — Стиральная машина нам не надо, потому что нам одной строчки достаточно чтобы узнать, сколько он их продал.

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

Здравствуйте! А файл с примером исходных данных никак нельзя показать? Что-то мне подсказывает, что тут дело в изначальной организации данных, а не в необходимости создания формул, которыми сначала нужно наплодить множество комбинаций, а потом из них убирать совпадения. Сделал вариант на основе файла от Ігор Гончаренко, проверяйте.  

Изменено: _Igor_6128.02.2017 22:57:01

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

Добрый день,

_Igor_61

! Извините, что долго не отвечала, сейчас прикреплю вариант исходника, основанный на вашем же примере. Ваш вариант куда ближе к правде, но он некорректно работает, когда количество заполненных строк и столбцов неодинаково. Я чуть поменяла исходные данные, вот что получилось.
А вообще исходник тоже прикреплю. Вдруг вам так понятнее будет.
В исходнике — первые два листа пишутся от руки, лист Звонки приходит и на его основании автоматически должен формироваться лист Отчёт. Вся загвоздка в правой таблице, а именно в столбцах G и H, не понимаю как сделать чтобы они формировались автоматически путём перебора всех вариантов
направлений из первого листа и сотрудников из второго, исходя из того что и к направлениям, и к фамилиям могут добавляться новые, и тогда количество строк будет изменяться. В присланном примере на листе Отчёт столбцы G и H набиты вручную.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Файлы удалил: превышен максимально допустимый размер.

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

Уфф… Чем дальше в лес… Кэтти-бри, а Вы не могли бы сформулировать итоговую задачу — что в итоге должно получиться? Нужно посчитать кол-во звонков по каждому сотруднику по каждому направлению, или общее время звонков по каждому сотруднику или что-то еще? Понимаю, что Вам наверное интересно сделать перебор формулой, но тот ли это способ для решения задачи?
 

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

_Igor_61

, если вы успели скачать удалённый администрацией файл, то должно получиться следующее:
Трёхколоночная таблица списка всех сотрудников, где для каждого из них по каждому направлению (направлению, а не коду оператора, это важно), посчитано суммарное время вызова, при этом она должна растягиваться при добавлении ещё одного сотрудника либо направления. При этом задача элементарно решается при помощи сводной таблицы, или не так элементарно — при помощи макроса. Но задача стоит именно решить только с помощью базовых формул. При этом можно создать энное кол-во вспомогательных листов, если они нужны, или промежуточных операций.

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

_Igor_61

Ну т.е. исходя из вашей формулировки — по общее время звонка по каждому сотруднику по каждому направлению.

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

 

Кэтти-бри

Пользователь

Сообщений: 16
Регистрация: 22.02.2017

Фантастика. Всё правильно, всё работает. Огромное спасибо. Пошла разбираться как Вы этого добились.

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

:)

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#20

01.03.2017 15:04:25

Доброе время суток.
Не прошло и суток, чтобы понять что

чукча

Кэтти хочет :)
Вариант на Power Pivot.

Прикрепленные файлы

  • Кто-куда звонил.zip (89.22 КБ)

Изменено: Андрей VG01.03.2017 15:09:38
(Поменял формат, а то суммарная длительность за сутки перевалила :) )

Содержание

  1. Как сделать перебор диапазона ячеек
  2. Как макрос работает
  3. Код макроса
  4. Как этот код работает
  5. Как использовать
  6. Excel функция перебора значений
  7. Excel функция перебора значений
  8. Использование операторов For Each. Next
  9. Проход по диапазону ячеек
  10. Выход из цикла For Each. Next до его завершения
  11. Использование цикла For Each. Next для итерации в классе VBA
  12. См. также
  13. Поддержка и обратная связь

Как сделать перебор диапазона ячеек

Что делает макрос: Этот базовый макрос показывает вам простой способ сделать перебор диапазона ячеек по одной и выполнить какое-либо действие.

Как макрос работает

В этом макросе используются две переменные объекта Range. Одна из переменных отражает объем данных, с которым мы работаем, в то время как другая используется для хранения каждой отдельной клетки в диапазоне. Потом мы используем оператор For Each, чтобы активировать или принести каждую ячейку в фокусе целевого диапазона.

Код макроса

Как этот код работает

  1. Макрос объявляет две переменные объекта Range. Одна из них, называется MyRange, держит весь целевой диапазон. Другая, называемый MyCell, держит каждую ячейку в диапазоне, так как макрос проводит цикл через них один за другим.
  2. На шаге 2 мы заполняем переменную MyRange с целевым диапазоном. В этом примере мы используем Range («D6:D17»). Если ваш целевой диапазон является именованным, можно просто ввести его название — Range («MyNamedRange»).
  3. На этом этапе макрос начинает цикл через каждую ячейку в целевом диапазоне, активизируя ее.
  4. После того, как ячейка активируется, можно с ней что-то сделать. Это «что-то» на самом деле зависит от поставленной задачи. Вы можете удалять строки, когда активная ячейка имеет определенное значение, или вы можете вставить строку между каждой активной ячейки. В этом примере макрос меняется шрифт полужирный для любого элемента, который имеет значение больше, чем 3000.
  5. На шаге 5, макрос возвращается назад, чтобы получить следующую ячейку. После активации всех ячеек в целевом диапазоне, макрос заканчивает работу.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11 на клавиатуре.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

Источник

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
Rafting Дата: Вторник, 11.04.2017, 12:49 | Сообщение № 3
_Boroda_ Дата: Вторник, 11.04.2017, 13:28 | Сообщение № 4
Скажи мне, кудесник, любимец ба’гов.
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

Ответить

Gustav Дата: Вторник, 11.04.2017, 13:33 | Сообщение № 5

Да сделайте обыкновенную «таблицу умножения»: в ячейки B1:SF1 с шагом 0,01 протяните 499 значений от 587,01 до 591,99 (колонки), в ячейки A2:A3100 — 3099 значений от 3170,01 до 3200,99. В ячейку B2 — формулу =$A2*B$1 и протяните на весь диапазон B2:SF3100. Дальше обычный Поиск (по Ctrl+F) и ищем значение 1886000.

Показал бы в файле, но файл получился 23 мегабайта. Но в принципе я всё и так рассказал.

P.S. Можно подсветить результаты условным форматированием с формулой: =ЦЕЛОЕ(B2)=1886000 . У меня поиском по кнопке «Найти все» нашлась 51 ячейка (в одной, правда, чуть меньше 1885999,9964, но поскольку отображалась как искомая строка, то тоже поучаствовала). Это было при ширине колонок 80 пикселей. А если увеличить ширину до, скажем, 100 пикселей (при этом в ячейках будут видны 3 знака после запятой), то останутся 50 честных вариантов.

Да сделайте обыкновенную «таблицу умножения»: в ячейки B1:SF1 с шагом 0,01 протяните 499 значений от 587,01 до 591,99 (колонки), в ячейки A2:A3100 — 3099 значений от 3170,01 до 3200,99. В ячейку B2 — формулу =$A2*B$1 и протяните на весь диапазон B2:SF3100. Дальше обычный Поиск (по Ctrl+F) и ищем значение 1886000.

Показал бы в файле, но файл получился 23 мегабайта. Но в принципе я всё и так рассказал.

P.S. Можно подсветить результаты условным форматированием с формулой: =ЦЕЛОЕ(B2)=1886000 . У меня поиском по кнопке «Найти все» нашлась 51 ячейка (в одной, правда, чуть меньше 1885999,9964, но поскольку отображалась как искомая строка, то тоже поучаствовала). Это было при ширине колонок 80 пикселей. А если увеличить ширину до, скажем, 100 пикселей (при этом в ячейках будут видны 3 знака после запятой), то останутся 50 честных вариантов. Gustav

Сообщение Да сделайте обыкновенную «таблицу умножения»: в ячейки B1:SF1 с шагом 0,01 протяните 499 значений от 587,01 до 591,99 (колонки), в ячейки A2:A3100 — 3099 значений от 3170,01 до 3200,99. В ячейку B2 — формулу =$A2*B$1 и протяните на весь диапазон B2:SF3100. Дальше обычный Поиск (по Ctrl+F) и ищем значение 1886000.

Показал бы в файле, но файл получился 23 мегабайта. Но в принципе я всё и так рассказал.

P.S. Можно подсветить результаты условным форматированием с формулой: =ЦЕЛОЕ(B2)=1886000 . У меня поиском по кнопке «Найти все» нашлась 51 ячейка (в одной, правда, чуть меньше 1885999,9964, но поскольку отображалась как искомая строка, то тоже поучаствовала). Это было при ширине колонок 80 пикселей. А если увеличить ширину до, скажем, 100 пикселей (при этом в ячейках будут видны 3 знака после запятой), то останутся 50 честных вариантов. Автор — Gustav
Дата добавления — 11.04.2017 в 13:33

Rafting Дата: Вторник, 11.04.2017, 14:05 | Сообщение № 6

Я уже делал как предлагает Gustav в итоге тратится очень много времени.

Конкретное описание хотелки:

Получаю смету на определенную сумму 1 886 000
Площадь работ по смете 3200 кв.м
Когда заношу данные в электронную систему, система выводит цену за 1 кв.метр равную 1 886 000/3200 = 589,38 (цифра округляется, реальный же результат 589,375. Система выводит значение до сотых) В дальнейшем система начинает ругаться на то что 3200*589,38 не равно 1 886 000. Допустимо менять значения 3200 и 589,38 в небольшом диапазоне. Главное что бы при умножении двух значений получался конкретный результат 1 886 000.
Так как задача регулярная, ищу способ как задать excel цифру которую нужно получить путем умножения числа X на Y. где X — это диапазон значений от 3100,00 до 3300,00 с шагом 0,01 а Y — это диапазон значений от 560,00 до 600,00 с шагом 0,01
Надеюсь понятно объяснил. Заранее благодарю за ответ.

Я уже делал как предлагает Gustav в итоге тратится очень много времени.

Конкретное описание хотелки:

Получаю смету на определенную сумму 1 886 000
Площадь работ по смете 3200 кв.м
Когда заношу данные в электронную систему, система выводит цену за 1 кв.метр равную 1 886 000/3200 = 589,38 (цифра округляется, реальный же результат 589,375. Система выводит значение до сотых) В дальнейшем система начинает ругаться на то что 3200*589,38 не равно 1 886 000. Допустимо менять значения 3200 и 589,38 в небольшом диапазоне. Главное что бы при умножении двух значений получался конкретный результат 1 886 000.
Так как задача регулярная, ищу способ как задать excel цифру которую нужно получить путем умножения числа X на Y. где X — это диапазон значений от 3100,00 до 3300,00 с шагом 0,01 а Y — это диапазон значений от 560,00 до 600,00 с шагом 0,01
Надеюсь понятно объяснил. Заранее благодарю за ответ. Rafting

Сообщение Я уже делал как предлагает Gustav в итоге тратится очень много времени.

Конкретное описание хотелки:

Получаю смету на определенную сумму 1 886 000
Площадь работ по смете 3200 кв.м
Когда заношу данные в электронную систему, система выводит цену за 1 кв.метр равную 1 886 000/3200 = 589,38 (цифра округляется, реальный же результат 589,375. Система выводит значение до сотых) В дальнейшем система начинает ругаться на то что 3200*589,38 не равно 1 886 000. Допустимо менять значения 3200 и 589,38 в небольшом диапазоне. Главное что бы при умножении двух значений получался конкретный результат 1 886 000.
Так как задача регулярная, ищу способ как задать excel цифру которую нужно получить путем умножения числа X на Y. где X — это диапазон значений от 3100,00 до 3300,00 с шагом 0,01 а Y — это диапазон значений от 560,00 до 600,00 с шагом 0,01
Надеюсь понятно объяснил. Заранее благодарю за ответ. Автор — Rafting
Дата добавления — 11.04.2017 в 14:05

Источник

Использование операторов For Each. Next

Операторы For Each. Next повторяют блок операторов для каждого объекта в коллекции или каждого элемента массива. Visual Basic автоматически присваивает переменную при каждом выполнении цикла. Например, следующая процедура добавляет 10 к значению каждой ячейки в диапазоне от A1 до A10.

Указанный ниже код перебирает все элементы массива и устанавливает для каждого из них значение переменной-счетчика I.

Проход по диапазону ячеек

Цикл For Each. Next можно использовать для прохода по диапазону ячеек. Приведенная ниже процедура проходит по диапазону ячеек A1:D10 на листе Sheet1 и присваивает каждой ячейке, абсолютное значение которой меньше 0,01, значение 0 (ноль).

Выход из цикла For Each. Next до его завершения

Из цикла For Each. Next можно выйти с помощью оператора Exit For. Например, при возникновении ошибки можно использовать оператор Exit For в блоке True оператора If. Then. Else или оператора Select Case, который используется непосредственно для проверки ошибок. Если ошибка не возникает, оператор If…Then…Else получает значение False, и цикл продолжает работу.

В следующем примере выполняется поиск первой ячейки диапазона A1:B5, не содержащей число. Если такая ячейка найдена, выводится сообщение и выполняется выход из цикла с помощью оператора Exit For.

Использование цикла For Each. Next для итерации в классе VBA

Для каждого. Следующие циклы не только итерируют массивы и экземпляры объекта Collection . Они также могут выполнять итерацию в созданном вами классе VBA.

Ниже приведен пример, в котором показано, как это сделать.

Создайте модуль класса в редакторе Visual Basic (VBE) и присвойте ему имя CustomCollection. cc1

Вставьте следующий код в только что созданный модуль.

Экспортируйте этот модуль в файл и сохраните его в локальном расположении. cc2

После экспорта модуля откройте экспортированный файл, используя текстовый редактор (программы Блокнот в Windows должно быть достаточно). Содержимое файла должно выглядеть следующим образом.

Используя текстовый редактор, удалите знак ‘ из первой строки под текстом Property Get NewEnum() As IUnknown в файле. Сохраните измененный файл.

В редакторе VBE удалите класс, созданный из проекта VBA, и не экспортируйте его при появлении соответствующего запроса. cc3

Импортируйте файл, из которого вы удалили знак ‘ , назад в VBE. cc4

Выполните следующий код, чтобы проверить возможность итерации в своем созданном пользовательском классе VBA, используя VBE и текстовый редактор.

Сноски Описание
[cc1] Вы можете создать модуль класса, выбрав Class Module (Модуль класса) в меню Insert (Вставка). Вы можете переименовать модуль класса, изменив его свойства в окне Properties (Свойства).
[cc2] Вы можете активировать диалоговое окно Экспорт файла, выбрав Export File (Экспорт файла) в меню File (Файл).
[cc3] Вы можете удалить модуль класса из VBE, выбрав Remove Item (Удалить элемент) в меню File (Файл).
[cc4] Вы можете импортировать файл внешнего модуля класса, запустив диалоговое окно Импорт файла (выберите Import File (Импорт файла) в меню File (Файл)).

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Adblock
detector

Всем привет! Такой вопрос:
Нужно перебирать значения ячеек от 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

Все гениальное просто!!! Огромное спасибо.

Like this post? Please share to your friends:
  • Перебор значений в excel формула
  • Перебор данных в excel
  • Перебирать значения в excel
  • Перевести page в word
  • Перевести otd в word онлайн