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

Когда дело доходит до VBA, существует очень небольшая разница между непрерывным выделением и несмежным выделением. Excel позволяет получить доступ к каждому из них одинаково. Рассмотрим следующий фрагмент кода:

Dim c As Range

For Each c In Selection     ' do something here     MsgBox c.Address & vbTab & c.Value Next c

В этом случае ячейки в выбранном диапазоне проходят по очереди, используя цикл For …​ Next. Внутри цикла переменная c представляет отдельную ячейку и может использоваться в ссылках, как показано.

Если по какой-то причине вы хотите получить доступ к каждой смежной области в выделенном фрагменте, вы можете сделать это, специально обратившись к группе «Области», как показано в этом фрагменте:

Dim a As Range Dim c As Range

For Each a In Selection.Areas     'Now each a refers to a contiguous range     'Do something here with areas, if desired     For Each c In a.Cells         'Now each c refers to a cell in the area         'Do something here         MsgBox c.Address & vbTab & c.Value     Next c Next a

Вы также должны отметить, что если диапазон, к которому вы хотите получить доступ (непрерывный или несмежный), был назван в Excel, вы также можете получить доступ только к ячейкам в названном диапазоне. Просто замените слово «Selection» в каждом из этих примеров названием диапазона следующим образом:

Dim c As Range

For Each c In Range("MyNamedRange")

' do something here     MsgBox c.Address & vbTab & c.Value Next c

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (8703) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Stepping_Through_a_Non-Contiguous_Range_of_Cells [Переход через несмежный диапазон ячеек].