Excel макрос выбрать диапазон

Определение адреса выделенного диапазона ячеек на листе Excel с помощью кода VBA. Определение номера первой и последней строки. Программное выделение диапазона.

Адрес выделенного диапазона

Для определения адреса выделенного диапазона ячеек в VBA Excel используется свойство Address объекта Selection.

Объект Selection — это совокупность всех выделенных ячеек на листе Excel. Это может быть одна ячейка, смежный или несмежный диапазон ячеек, представляющий коллекцию смежных диапазонов. Если выделение состоит из несмежного диапазона, адреса смежных диапазонов, из которых он состоит, будут перечислены через запятую.

Смежный диапазон — прямоугольная область смежных (прилегающих друг к другу) ячеек.

Несмежный диапазон — совокупность (коллекция) смежных диапазонов (прямоугольных областей смежных ячеек).

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

Sub Primer1()

MsgBox «Адрес выделенного диапазона: « & Selection.Address & _

vbNewLine & «Адрес активной ячейки: « & ActiveCell.Address & _

vbNewLine & «Номер строки активной ячейки: « & ActiveCell.Row & _

vbNewLine & «Номер столбца активной ячейки: « & ActiveCell.Column

End Sub

Скопируйте и запустите код на выполнение. В результате получите что-то вроде этого, зависящее от того, какие диапазоны вы выберите:

Информационное окно с адресами выделенного диапазона и активной ячейки

Определение адресов выделенного диапазона и активной ячейки

Выделение ячеек и диапазонов

Выделить несмежный диапазон ячеек можно следующим образом:

Sub Primer2()

Range(«B4:C7,E5:F7,D8»).Select

End Sub

Как видно из примера, в адресной строке объекта Range перечисляются адреса смежных диапазонов, составляющих общий несмежный диапазон, через запятую. Выделение осуществляется методом Select объекта Range.

Определение номеров первой и последней строки

Чтобы вычислить номера первой и последней строки выделенного диапазона, будем исходить из того, что первая ячейка смежного диапазона находится на первой строке, а последняя — на последней строке выделенного диапазона.

Sub Primer3()

Dim i1 As Long, i2 As Long

i1 = Selection.Cells(1).Row

i2 = Selection.Cells(Selection.Cells.Count).Row

MsgBox «Первая строка: « & i1 & _

vbNewLine & «Последняя строка: « & i2

End Sub

Результат будет таким, зависит от выделенного диапазона:

Информационное окно с номерами первой и последней строки диапазона

Номера первой и последней строки выделенного смежного диапазона

Таким же образом можно вычислить номера первого и последнего столбцов выделенного диапазона, которые можно использовать для обработки информации по столбцам.

Обратите внимание, что для несмежных диапазонов этот пример не работает.

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


 

Baguza

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

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

#1

10.12.2019 00:20:13

Я сделал простенький Userform для прикрепленного примера макроса, подскажите код чтобы через combobox выбирать диапазон ячеек, которые прописаны в модуле данного макроса.

Код
Опора_Объед Application.Intersect( _
     .UsedRange, .Range("F10:F9999"))  

вот этот код чтобы можно было выбирать через combobox.

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

  • 2_5240406854751749098.xlsm (85.1 КБ)

 

допустим вы выбрали в комбобоксе этот код (формально, это код, фактически это текст) и что с ним делать дальше???
диапазон лучше выбирать с помощью InputBox
см.вложение

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

 

ocet p

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

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

#3

10.12.2019 01:46:03

Цитата
Baguza написал:
Range(«F10:F9999»))      —      вот этот код чтобы можно было выбирать через combobox

Поясните пожалуйста, это всегда должен быть диапазон «F10:F9999» или тоже какой-то другой внутри него ?

 

Baguza,
у вас созрел план написания очень универсального кода, но тут  оказалось непонятно как из комбобокса  извлечь вот это:
Опора_Объед Application.Intersect( _
    .UsedRange, .Range(«F10:F9999»))  
а давайте допустим строка уже извлечена в переменную, напишите в коде:
CodeStr = «Опора_Объед Application.Intersect(UsedRange, .Range(«F10:F9999″))»
все! у вас в CodeStr есть желанная строка и вот тут возникает РЕАЛЬНАЯ проблема, а что с ней делать??!!!
как воспользоваться этой строкой? чем она (это строка) вам поможет?
проблема не в извлечении строки из комбобокса, а проблему нужно сначала сформулировать, а потом уже можно будет и решать
(а как выбрать диапазон, я показал в сообщении выше)

Изменено: Ігор Гончаренко10.12.2019 03:28:31

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

 

Baguza

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

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

#5

10.12.2019 11:25:50

Цитата
ocet p написал: Поясните пожалуйста, это всегда должен быть диапазон «F10:F9999» или тоже какой-то другой внутри него ?

Это условный диапазон. Для разных таблиц он будет разный. Я хотел бы, чтобы его (диапазон) можно было бы изменять через меню пользовательской формы, чтобы каждый раз не лезть в код макроса.

Цитата
Ігор Гончаренко написал: у вас созрел план написания очень универсального кода

Код написали добрые форумчане. Я в макросах четвертый день. Поэтому пока особо не разбираюсь, что и как тут работает. Пытаюсь сделать удобную форму ввода данных для просчета макросом.

Цитата
(а как выбрать диапазон, я показал в сообщении выше)

Смысл в том, чтобы выбранный диапазон изменял значение этого кода:

Код
Опора_Объед Application.Intersect( _
    .UsedRange, .Range("F10:F9999"))  

Не принципиально будет ли это combobox или inputbox цель заключается в том, чтобы этот ***box находился на «пользовательской форме» и выполнял функцию описанную выше.

p.s. Если я в связи со своей неопытностью как то не так изъясняюсь, то уж простите)) могу только своими словами

 

ocet p

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

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

#6

10.12.2019 14:34:07

Цитата
Baguza написал:
(диапазон) можно было бы изменять через меню пользовательской формы
Цитата
Baguza написал:
Смысл в том, чтобы выбранный диапазон изменял значение этого кода

1. Создайте «TextBox» (или «InputBox» как вам написал Ігор Гончаренко), чтобы ввести диапазон для листов, которые могут еще не существовать или для динамических диапазонов.
2. Для других, постоянно присутствующих листов, создайте константы (или переменные), которые будут хранить строго определенный диапазон.
3. Вы будете ссылаться на них например через конструкции с «IF» или «Select Case».

Может быть, вот так это можно сделать ?

Код
Option Explicit

'Dlya Variant 2
Const diap_resurs = "A10:A9999"
Const diap_VED = "B10:B9999"
Const diap_LRV = "E10:E9999"
Const diap_lokalka = "F10:F9999"

Private Sub UserForm_Initialize()
    '...
End Sub

'Variant 1 - Fiksirovannyy diapazon dlya vsekh
Private Sub CommandButton1_Click()
    With UserForm1
        With .ComboBox4
            If .ListIndex = -1 Then
                MsgBox ("Vyberite list c lokalkoy")
                Exit Sub
            End If
            
            If .Parent.CheckBox1.Value = True Then
                Call Opora_Obed_RUN(.List(.ListIndex), "F10:F9999")
            End If
        End With
    End With
End Sub

'Variant 2 - Peremennyy diapazon dlya postoyanno prisutstvuyushchikh listov
Private Sub CommandButton1_Click()
    With UserForm1
        With .ComboBox4
            If .ListIndex = -1 Then MsgBox ("Vyberite list c lokalkoy"): Exit Sub
            
            Dim diap$, Lst$: Lst = .List(.ListIndex)
        End With
        
        Select Case Lst
            Case "resurs":  diap = diap_resurs
            Case "VED":     diap = diap_VED
            Case "LRV":     diap = diap_LRV
            Case "lokalka": diap = diap_lokalka
        End Select
        
        If .CheckBox1.Value = True Then Call Opora_Obed_RUN(Lst, diap)
    End With
End Sub

'Variant 3 - Dlya "TextBox"
Private Sub CommandButton1_Click()
    With UserForm1
        If Trim(.TextBox1.Text) = "" Then MsgBox ("Vpishite chto-nibud' v 'TextBox1'"): Exit Sub
        
        With .ComboBox4
            If .ListIndex = -1 Then MsgBox ("Vyberite list c lokalkoy"): Exit Sub
            
            If .Parent.CheckBox1.Value = True Then Call Opora_Obed_RUN(.List(.ListIndex), Trim(.Parent.TextBox1.Text))
        End With
    End With
End Sub

Sub Opora_Obed_RUN(shList$, rngDiap$)
    Dim rsltRng As Range
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    With Sheets(shList)
        Set rsltRng = Intersect(.UsedRange, .Range(rngDiap))
        If Not rsltRng Is Nothing Then
            Call Opora_Obed(shList, rsltRng)
            .Calculate
        Else
            '... chto-to tam
            MsgBox "Net takogo diapazona"
            '... chto-to tam
            Exit Sub
        End If
    End With
    
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 

Baguza

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

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

#7

10.12.2019 19:55:49

Прошу прощения, видимо я все таки, что то не так объяснил.

Вот посмотрите пожалуйста на скриншот пользовательской формы и на вопросы по номерам
Номер 1 — В этом поле я хочу изменять диапазон  ячеек кода, который написан ниже (это основной вопрос по данной теме, что меня интересует)

Код
Опора_Объед Application.Intersect( _
    .UsedRange, .Range("F10:F9999"))  

например выбираю в окне «С» F10 в окне «ПО» F214. И получаю в итоге в коде  .UsedRange, .Range(«F10:F214»))

Номер 2 — В окне «выберите лист с локалкой» тот лист, на котором я этот диапазон выбираю (этот диапазон нужен только для этого листа и ни для какого больше). В файле-примере этот лист называется «локалка».

Номер 3 — флажок, который будет запускать данную функцию на выбранном листе и на выбранном диапазоне.

Номер 4 — ну тут все понятно. Кнопка запуска расчета по заданным параметрам. В случае если параметры не внесены расчет не запускается.

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

  • 2019-12-10_21-30-47.png (33.04 КБ)

 

ocet p

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

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

1. Что было бы источником данных для этих «ComboBox» ?
2. Почему «выбирать» эти данные в «Combobox» а не вводить их вручную в одно или два поля типа «TextBox» ?
3. Процедуры будут очень похожи

 

Baguza

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

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

#9

10.12.2019 22:54:30

Цитата
ocet p написал:
1. Что было бы источником данных для этих «ComboBox» ?

У меня готовая таблица (как в примере) только без формул. Я запускаю макрос в своей уже готовой таблице, выбираю лист (к примеру «локалка») данные уже находятся на этом листе в ячейках «F10:F …» — ну до конца таблицы (всегда по разному) и макрос мне проставляет формулы для этой таблицы по выбранному мною диапазону. Или я что то не понимаю? Источник данных — цифры в ячейках F

Цитата
ocet p написал:
2. Почему «выбирать» эти данные в «Combobox» а не вводить их вручную в одно или два поля типа «TextBox» ?

Просто мне показалось так удобнее. Если это проблематично сделать, то мне не принципиально чтобы это был Combobox.

Хотелось бы чтобы все было в одном месте (в одной польз. форме например) чтобы не путаться потом и не искать/вспоминать куда мне что вводить.

 

ocet p

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

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

Не в этом дело, речь идёт о том, что чтобы помочь кому-то в чём-то, мы должны понять что он хочет сделать, без этого никакая робота.
Например: почему ‘ComboBox1‘ («C«), если единственным значением в нём будет начальная ячейка диапазона, одинаковая для всех листов, то есть «F10» ?
Не лучше ли иметь простой текстовый ярлык с описанием «F10» ?
Или может быть для разных листов будут разные столбцы с данными, не для каждого «F» (лист ‘VED‘ не имеет столбца «F«) ?
Только как отличить это тогда ?
Столбцы данных (буквы столбцов) будут постоянно назначены на листы ?

 

Baguza

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

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

ocet p, расчеты этого кода

1
2
Опора_Объед Application.Intersect( _
   .UsedRange, .Range(«F10:F9999»))

будут производиться только на одном листе. В моем случае-примере  —  это лист «локалка». Остальные листы никак не будут (не должны быть) задействованы в данном расчете. Но чтобы подстраховаться, что это может не всегда будет столбец «F» и не всегда он будет начинаться с «F10» я и решил добавить  ‘ComboBox1’ («C»).

Другими словами, Лист будет какой то один и столбец будет какой то один единственный. Мне нужно только выбрать какой это будет лист (локалка) и какой столбец (где у него начинается диапазон и где заканчивается) чтобы запустить этот код только там и нигде больше.  

 

Baguza,
См. #2. там написано как выбрать диапазлн, чтобы запустить расчет в нем и нигде больше

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

 

ocet p

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

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

#13

11.12.2019 20:37:39

Цитата
Baguza написал:
нужно только выбрать какой это будет лист (локалка) и какой столбец (где у него начинается диапазон и где заканчивается)

Ещё никто не ответил ?
Может так ?

UserForm:

Код
Option Explicit

Const nazvLst = "lokalka", diapLst = "F10:F9999"

Dim cb1 As ComboBox, cb2 As ComboBox, cb3 As ComboBox, cb4 As ComboBox

Private Sub UserForm_Initialize()
    Dim sht As Worksheet
    
    With UserForm1
        Set cb1 = .ComboBox1: Set cb2 = .ComboBox2
        Set cb3 = .ComboBox3: Set cb4 = .ComboBox4
    End With
    
        cb1.AddItem Split(diapLst, ":", -1, 1)(0)
        cb2.AddItem Split(diapLst, ":", -1, 1)(1)
    
    For Each sht In ThisWorkbook.Sheets
        cb3.AddItem sht.Name
        cb4.AddItem sht.Name
    Next
End Sub

Private Sub CommandButton1_Click()
    If cb1.ListIndex = -1 Or cb2.ListIndex = -1 Or cb4.ListIndex = -1 Then GoTo EineGrosseOshiba
    
    If Me.CheckBox1.Value Then
        Dim diapC$: diapC = cb1.List(cb1.ListIndex)
        Dim diapPO$: diapPO = cb2.List(cb2.ListIndex)
        
        Call Opora_Obed_RUN(nazvLst, diapC & ":" & diapPO)
    'Else
    '    MsgBox ("Poproshu flazhka dlya 'Proschitat ob'emy'") ' => ???
    End If
    
Exit Sub
EineGrosseOshiba: MsgBox ("Oyoyoy ! Vyberite dannyye iz spiskov")
End Sub

Стандартный модуль:

Код
Option Explicit

Sub Opora_Obed_RUN(shList$, rngDiap$)
    Dim yos&
    Dim rsltRng As Range, yach As Range
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    With Sheets(shList)
        Set rsltRng = Intersect(.UsedRange, .Range(rngDiap))
        
        If Not rsltRng Is Nothing Then
            For Each yach In rsltRng.Cells
                If yach.MergeCells Then
                    yos = yach.Row
                Else
                    If yos > 0 Then yach.FormulaR1C1 = "=RC[-1]*R" & yos & "C[-1]"
                End If
            Next
            .Calculate
        End If
    End With
    
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
 

Baguza

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

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

ocet p, ошибку выдает((    «Subscript out of range»

 

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

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

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

#15

12.12.2019 01:37:38

Цитата
Baguza написал:
Ещё никто не ответил ?

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

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

 

ocet p

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

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

#16

12.12.2019 01:48:20

Цитата
Baguza написал:
ошибку выдает

Но где в какой строке кода ?   … :() ?

Цитата
Ігор Гончаренко написал:
тут нужны не точечные подсказки, а брать весь проект целиком

А что с самообразованием автора темы на основе советов форума ? :)  

 

Baguza

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

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

#17

12.12.2019 01:59:19

Цитата
ocet p написал: Но где в какой строке кода ?   … ) ?
Код
Sub Opora_Obed_RUN(shList$, rngDiap$)
    Dim yos&
    Dim rsltRng As Range, yach As Range
     
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
     
With Sheets(shList)   ' вот эта строка
        Set rsltRng = Intersect(.UsedRange, .Range(rngDiap))

Когда меняю диапазон то  ошибку выдает «выберите данные из списков»  когда запускаю с диапазоном F10:F9999 то выдает вот эту ошибку  «Subscript out of range»

 

Baguza

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

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

#18

12.12.2019 02:10:58

Ігор Гончаренко, Уважаемый, я по моему в своих сообщениях изначально обозначил, что я с макросами только начал работать и не имею опыта. И тема называется не «напишите для меня проект целиком, а то я сам ничего не хочу делать и не понимаю», а конкретно по определенной задаче.

а что касательно:

Цитата
См. #2. там написано как выбрать диапазлн, чтобы запустить расчет в нем и нигде больше

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

 

ocet p

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

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

Вы изменили латинские названия листов на кириллицу ?
Покажите ваш конвертированный код для обзора.

 

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

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

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

#20

12.12.2019 02:36:57

#2 никаким боком не относится к вашей форме — ни сколько не отрицает и ни чуть не поощряет использование  этой формы и любых других
#2 показывает как выбрать диапазон с любого листа, любой книги, и как потом воспользоваться тем, что выбрано
привяжете вы этот способ к своей форме, создадите на его основании пользовательскую функцию и воспользуетесь любым другим способом — это ваше личное дело, кстати, точно такое жн личное, как забить на эту подсказку и придумать что-то свое, белее удобное, универсальное и эффективное по сравнению с предложенным мною убогим способом

Цитата
Baguza написал:
Выбор диапазона ячеек макроса через userform/combobox

если из названия вашей темы выкинуть «через userform/combobox»
то пример как раз отвечает на вопрос:  «Выбор диапазона ячеек макросом»
понимаете, можно, собрав большую бригаду строителей с помощью медицинских бинтов поднять железобетонную плиту перекрытия и установить ее на место монтажа, а можно для этого использовать подьемный кран и спропы, — зацепить и поставить на место
в случае с «Выбор диапазона ячеек макроса через userform/combobox» вы не рискуете жизнями бригады строителей и можете продолжать эксперименты, пока все не получиться (если поставить такую цель — можно найти тысячи разных вариантов, как сделать это с помощью юзерформ и комбобокса в ней)))

Изменено: Ігор Гончаренко12.12.2019 02:59:27

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

 

Baguza

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

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

#21

12.12.2019 03:02:12

Цитата
ocet p написал:
Вы изменили латинские названия листов на кириллицу ?

Да, простите. Тут уже понял. Лист должен был называться «lokalka» чтобы функция заработала. Она и заработала.
Теперь с диапазоном не понятно. Как его изменить? Он по умолчанию F10:F9999. При других значениях не считает

 

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

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

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

#22

12.12.2019 03:06:52

Цитата
Baguza написал:
Теперь с диапазоном не понятно. Как его изменить?

в #2 показано как выбрать ЛЮБОЙ диапазон, присвоить переменной, и как потом выбранный диапазон использовать в дальнейших расчетах

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

 

ocet p

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

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

#23

12.12.2019 04:11:14

Цитата
Baguza написал:
должен был называться «lokalka»

Имя может быть любым, но как лист, так и содержимое константы «nazvLst» (Const nazvLst = «lokalka») должны совпадать (лист = «Локалка» => Const nazvLst = «Локалка», лист = «Пёс Барбос» => Const nazvLst = «Пёс Барбос», и т.д.)

Цитата
Baguza написал:
с диапазоном не понятно. Как его изменить?

Здесь вы должны объяснить, как надо сделать такой список. На каких критериях это должно основываться ?
Должны ли они быть, например, все буквы алфавита, или, может быть, просто буквы столбцов из области «UsedRange», и т.д. ?
Я не знаю, что вы намерены в этом отношении.

Вы можете увидеть здесь недостатки «ComboBox» для таких операций, нормальное текстовое поле было бы намного лучше чтобы вводить в неё диапазон.
Или может быть, например, комбинация «ComboBox» и «SpinButton», или метод Игоря Гончаренко ?

 

Baguza

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

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

#24

12.12.2019 04:26:32

Цитата
ocet p написал:
Здесь вы должны объяснить, как надо сделать такой список. На каких критериях это должно основываться ?Должны ли они быть, например, все буквы алфавита, или, может быть, просто буквы столбцов из области «UsedRange», и т.д. ?Я не знаю, что вы намерены в этом отношении.Вы можете увидеть здесь недостатки «ComboBox» для таких операций, нормальное текстовое поле было бы намного лучше чтобы вводить в неё диапазон.Или может быть, например, комбинация «ComboBox» и «SpinButton», или метод Игоря Гончаренко ?

Если бы можно было использовать или как то связать метод Игоря Гончаренко с моей пользовательской формой, то было бы замечательно. Нет никакой принципиальности, что именно использовать. Текстовое поле вполне подойдет. Можно его разместить на пользов.форме?  

 

Юрий М

Модератор

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

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

#25

12.12.2019 04:52:47

Baguza, можно было обойтись и без цитирования. Вот я пишу без цитаты — понятно, к кому я обращаюсь?
Почему Вы упорно отказываетесь от Application.InputBox? Ведь с его помощью элементарно выбирается нужный диапазон прямо на листе.


Download Article


Download Article

This wikiHow teaches you how to start using Visual Basic procedures to select data in Microsoft Excel. As long as you’re familiar with basic VB scripting and using more advanced features of Excel, you’ll find the selection process pretty straight-forward.

  1. 1

    Select one cell on the current worksheet. Let’s say you want to select cell E6 with Visual Basic. You can do this with either of the following options:[1]

    ActiveSheet.Cells(6, 5).Select
    

    ActiveSheet.Range("E6").Select
    
  2. 2

    Select one cell on a different worksheet in the same workbook. Let’s say our example cell, E6, is on a sheet called Sheet2. You can use either of the following options to select it:

    Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
    
    Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
    

    Advertisement

  3. 3

    Select one cell on a worksheet in a different workbook. Let’s say you want to select a cell from Sheet1 in a workbook called BOOK2.XLS. Either of these two options should do the trick:

    Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(2,1)
    
    Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("A2")
    
  4. 4

    Select a cell relative to another cell. You can use VB to select a cell based on its location relative to the active (or a different) cell. Just be sure the cell exists to avoid errors. Here’s how to use :

    • Select the cell three rows below and four columns to the left of the active cell:

      ActiveCell.Offset(3, -4).Select
      
    • Select the cell five rows below and four columns to the right of cell C7:

      ActiveSheet.Cells(7, 3).Offset(5, 4).Select
      
  5. Advertisement

  1. 1

    Select a range of cells on the active worksheet. If you wanted to select cells C1:D6 on the current sheet, you can enter any of the following three examples:

    ActiveSheet.Range(Cells(1, 3), Cells(6, 4)).Select
    
    ActiveSheet.Range("C1:D6").Select
    
    ActiveSheet.Range("C1", "D6").Select
    
  2. 2

    Select a range from another worksheet in the same workbook. You could use either of these examples to select cells C3:E11 on a sheet called Sheet3:

    Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("C3:E11")
    
    Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("C3", "E11")
    
  3. 3

    Select a range of cells from a worksheet in a different workbook. Both of these examples would select cells E12:F12 on Sheet1 of a workbook called BOOK2.XLS:

    Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E12:F12")
    
    Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E12", "F12")
    
  4. 4

    Select a named range. If you’ve assigned a name to a range of cells, you’d use the same syntax as steps 4-6, but you’d replace the range address (e.g., «E12», «F12») with the range’s name (e.g., «Sales»). Here are some examples:

    • On the active sheet:

      ActiveSheet.Range("Sales").Select
      
    • Different sheet of same workbook:

      Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("Sales")
      
    • Different workbook:

      Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("Sales")
      
  5. 5

    Select a range relative to a named range. The syntax varies depending on the named range’s location and whether you want to adjust the size of the new range.

    • If the range you want to select is the same size as one called Test5 but is shifted four rows down and three columns to the right, you’d use:
      ActiveSheet.Range("Test5").Offset(4, 3).Select
      
    • If the range is on Sheet3 of the same workbook, activate that worksheet first, and then select the range like this:
      Sheets("Sheet3").Activate ActiveSheet.Range("Test").Offset(4, 3).Select
      
  6. 6

    Select a range and resize the selection. You can increase the size of a selected range if you need to. If you wanted to select a range called Database’ and then increase its size by 5 rows, you’d use this syntax:

    Range("Database").Select Selection.Resize(Selection.Rows.Count + 5, _Selection.Columns.Count).Select
    
  7. 7

    Select the union of two named ranges. If you have two overlapping named ranges, you can use VB to select the cells in that overlapping area (called the «union»). The limitation is that you can only do this on the active sheet. Let’s say you want to select the union of a range called Great and one called Terrible:

    • Application.Union(Range("Great"), Range("Terrible")).Select
      
    • If you want to select the intersection of two named ranges instead of the overlapping area, just replace Application.Union with Application.Intersect.
  8. Advertisement

  1. 1

    Use this example data for the examples in this method. This chart full of example data, courtesy of Microsoft, will help you visualize how the examples behave:[2]

    A1: Name B1: Sales C1: Quantity
    A2: a B2: $10 C2: 5
    A3: b B3: C3: 10
    A4: c B4: $10 C4: 5
    A5: B5: C5:
    A6: Total B6: $20 C6: 20
  2. 2

    Select the last cell at the bottom of a contiguous column. The following example will select cell A4:

    ActiveSheet.Range("A1").End(xlDown).Select
    
  3. 3

    Select the first blank cell below a column of contiguous cells. The following example will select A5 based on the chart above:

    ActiveSheet.Range("A1").End(xlDown).Offset(1,0).Select
    
  4. 4

    Select a range of continuous cells in a column. Both of the following examples will select the range A1:A4:

    ActiveSheet.Range("A1", ActiveSheet.Range("a1").End(xlDown)).Select
    
    ActiveSheet.Range("A1:" & ActiveSheet.Range("A1"). End(xlDown).Address).Select
    
  5. 5

    Select a whole range of non-contiguous cells in a column. Using the data table at the top of this method, both of the following examples will select A1:A6:

    ActiveSheet.Range("A1",ActiveSheet.Range("A65536").End(xlUp)).Select
    
    ActiveSheet.Range("A1",ActiveSheet.Range("A65536").End(xlUp)).Select
    
  6. Advertisement

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

Video

  • The «ActiveSheet» and «ActiveWorkbook» properties can usually be omitted if the active sheet and/or workbook(s) are implied.

Thanks for submitting a tip for review!

Advertisement

About This Article

Article SummaryX

1. Use ActiveSheet.Range(«E6»).Select to select E6 on the active sheet.
2. Use Application.Goto (ActiveWorkbook.Sheets(«Sheet2»).Range(«E6»)) to select E6 on Sheet2.
3. Add Workbooks(«BOOK2.XLS») to the last step to specify that the sheet is in BOOK2.XLS.

Did this summary help you?

Thanks to all authors for creating a page that has been read 167,714 times.

Is this article up to date?

Как выбрать и изменить форматирование диапазона

На чтение 3 мин. Просмотров 2.8k.

Что делает макрос: Этот простой макрос выбирает диапазон D5: D16 и форматирует его.

Содержание

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

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

В этом макросе определяется диапазон для выбора с помощью объекта Range.

Код макроса

Sub VibratDiapazon()
'Выбор диапазона
Range("D5:D16").Select
End Sub

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

Sub IzmenitFormat()
'Выбор диапазона
Range("D5:D16").Select
'Преобразование в формат числа
Selection.NumberFormat = "#,##0"
'Жирный шрифт
Selection.Font.Bold = True
'Заливка желтым цветом
Selection.Interior.ColorIndex = 36
End Sub

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

Вы заметили, что мы называем Selection много раз в предыдущем примере кода. Для того, чтобы написать более эффективный код, вы можете просто сослаться на диапазон, используя With … End With. Этот оператор говорит Excel, что любое действие, которое вы выполняете относится к объекту, который вы указали.

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

Sub IzmenitFormatWith()
With Range("D5:D16")
.NumberFormat = "#,##0"
.Font.Bold = True
.Interior.ColorIndex = 36
End With
End Sub

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

Еще один способ, вы можете выбрать диапазон с помощью элемента ячейки объекта Range.
Адрес ячеек — это удобный способ выбора диапазонов через код. Он требует только позиции строк и столбцов в качестве параметров. Ячейка (5, 4) относится к строке 5, столбцу 4 (или ячейка D5).
Ячейки (16, 4) относится к строке 16, столбцу 4 (или ячейки D16). Если вы хотите выбрать диапазон ячеек, просто укажите два пункта в объект Range. Этот макрос выполняет один и тот же выбор диапазона D5:D16:

Код макроса

Sub IzmenitFormatRange()
Range(Cells(5, 4), Cells(16, 4)).Select
End Sub

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

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

Код макроса

Sub IzmenitFormat3()
With Range(Cells(5, 4), Cells(16, 4))
.NumberFormat = "#,##0"
.Font.Bold = True
.Interior.ColorIndex = 36
End With
End Sub

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

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

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

  1. Что делает макрос для выбора диапазона
  2. Код макроса для выбора диапазона
  3. Как работает макрос
  4. Что делает макрос для изменения форматирования диапазона
  5. Код макроса для изменения форматирования диапазона
  6. Как работает макрос
  7. Что делает макрос для изменения форматирования диапазона без выделения диапазона
  8. Код макроса для изменения форматирования диапазона без выделения диапазона
  9.  Что делает макрос для изменения форматирования диапазона через позиции ячеек
  10. Код макроса для изменения форматирования диапазона через позиции ячеек
  11. Как использовать
  12. Скачать файл

Ссылка на это место страницы:
#zadacha1

В этом макросе выбирается диапазон с помощью объекта Range

Ссылка на это место страницы:
#formula1

  1. Sub VibratDiapazon()
  2. Range("D5:D16").Select
  3. End Sub

Ссылка на это место страницы:
#kak1

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

Ссылка на это место страницы:
#zadacha2

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

Ссылка на это место страницы:
#formula2

  1. Sub IzmenitFormat()
  2. Range("D5:D16").Select
  3. Selection.NumberFormat = "#,##0"
  4. Selection.Font.Bold = True
  5. Selection.Interior.ColorIndex = 36
  6. End Sub

Ссылка на это место страницы:
#kak2

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

Мы используем метод Selection много раз в примере кода. Для того, чтобы написать более эффективный код, вы можете просто сослаться на диапазон, используя With … End With. Этот оператор говорит Excel, что любое действие, которое вы выполняете относится к объекту, который вы ранее указали.

Ссылка на это место страницы:
#zadacha3

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

Ссылка на это место страницы:
#formula3

  1. Sub IzmenitFormatWith()
  2. With Range("D5:D16")
  3. .NumberFormat = "#,##0"
  4. .Font.Bold = True
  5. .Interior.ColorIndex = 36
  6. End With
  7. End Sub

Ссылка на это место страницы:
#zadacha4

Еще один способ, как можно выбрать диапазон с помощью элемента ячейки объекта Range

Адрес ячеек — это удобный способ выбора диапазонов через код. Он требует только позиции строк и столбцов в качестве параметров. Ячейка (5, 4) относится к строке 5, столбцу 4 (или ячейка D5). 

Ячейки (16, 4) относится к строке 16, столбцу 4 (или ячейки D16). Если вы хотите выбрать диапазон ячеек, просто укажите два пункта в объект Range

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

Ссылка на это место страницы:
#formula4

  1. Sub IzmenitFormatWith()
  2. With Range("D5:D16")
  3. .NumberFormat = "#,##0"
  4. .Font.Bold = True
  5. .Interior.ColorIndex = 36
  6. End With
  7. End Sub

Ссылка на это место страницы:
#touse

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

Ссылка на это место страницы:
#file

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

1. Введите свою почту

2. Нажмите Зарегистрироваться

3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.

Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel. 

Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.

Подписывайтесь на нас в соц.сетях:

Понравилась статья? Поделить с друзьями:
  • Excel макрос выбрать данные
  • Excel макрос выбрать все листы
  • Excel макрос выбранная ячейка
  • Excel макрос вставки формул
  • Excel макрос вставки пустых строк