Обхвати и клетки на Excel VBA

Диапазони и клетки във VBA

Електронните таблици на Excel съхраняват данни в клетки. Клетките са подредени в редове и колони. Всяка клетка може да бъде идентифицирана по точката на пресичане на нейния ред и колона (Примери B3 или R3C2).

Диапазон на Excel се отнася до една или повече клетки (напр. A3: B4)

Адрес на клетката

Нотация A1

В нотация A1, клетка се обозначава с буквата на колоната (от A до XFD), последвана от номера на реда (от 1 до 1 048 576).

Във VBA можете да се обърнете към всяка клетка, използвайки Range Object.

123456789 'Вижте клетка В4 на текущо активния листОбхват на MsgBox ("B4")„Вижте клетка В4 на листа, наречена„ Данни “Работни листове на MsgBox ("Данни"). Обхват ("B4")„Вижте клетка В4 на листа, наречена„ Данни “в друга ОТВОРЕНА работна книгас име „Моите данни“Работни книги на MsgBox ("Моите данни"). Работни листове ("Данни"). Обхват ("B4")

Обозначение R1C1

В нотация R1C1 клетка се обозначава с R, последвано от номер на ред, след това буква „C“, последвана от номера на колоната. напр. B4 в нотация R1C1 ще бъде посочена от R4C2. Във VBA използвате Клетъчен обект да се използва R1C1 нотация:

12 'Вижте клетка R [6] C [4], т. Е. D6Клетки (6, 4) = "D6"

Обхват на клетките

Нотация A1

За да се обърнете към повече от една клетка, използвайте „:“ между началния адрес на клетката и последния адрес на клетката. Следното ще се отнася за всички клетки от А1 до D10:

1 Диапазон ("A1: D10")

Обозначение R1C1

За да се обърнете към повече от една клетка, използвайте „,“ между началния адрес на клетката и последния адрес на клетката. Следното ще се отнася за всички клетки от А1 до D10:

1 Обхват (клетки (1, 1), клетки (10, 4))

Писане в клетки

За да запишете стойности в клетка или съседна група от клетки, просто се обърнете към диапазона, поставете знак = и след това напишете стойността, която да се съхранява:

12345678910 „Съхранявайте F5 в клетка с адрес F6Диапазон ("F6") = "F6"„Съхранявайте E6 в клетка с адрес R [6] C [5], т. Е. E6Клетки (6, 5) = "E6"„Съхранявайте A1: D10 в диапазона A1: D10Диапазон ("A1: D10") = "A1: D10"' илиОбхват (клетки (1, 1), клетки (10, 4)) = "A1: D10"

Четене от клетки

За да прочетете стойности от клетки, просто се обърнете към променливата, за да съхраните стойностите, поставете знак = и след това се обърнете към диапазона за четене:

1234567891011 Dim val1Dim val2„Прочетете от клетка F6val1 = Обхват ("F6")„Прочетете от клетка E6val2 = Клетки (6, 5)MsgBox val1Msgbox val2

Забележка: За да съхранявате стойности от диапазон от клетки, трябва да използвате масив вместо проста променлива.

Несъседни клетки

За да се обърнете към несъседни клетки, използвайте запетая между адресите на клетките:

123456 'Съхранявайте 10 в клетки A1, A3 и A5Обхват ("A1, A3, A5") = 10„Съхранявайте 10 в клетки A1: A3 и D1: D3)Обхват ("A1: A3, D1: D3") = 10

Пресичане на клетки

За да се позовавате на несъседни клетки, използвайте интервал между адресите на клетките:

123 „Съхранявайте„ Col D “в D1: D10„което е често срещано между A1: D10 и D1: F10Диапазон ("A1: D10 D1: G10") = "Колон D"

Отместване от клетка или диапазон

Използвайки функцията Offset, можете да преместите препратката от даден диапазон (клетка или група от клетки) с посочените number_of_rows и number_of_columns.

Офсетов синтаксис

Range.Offset (брой_на_стрели, номер_на_колони)

Отместване от клетка

12345678910111213141516 'OFFSET от клетка A1'Вижте самата клетка'Преместете 0 реда и 0 колониДиапазон ("A1"). Офсет (0, 0) = "A1"„Преместете 1 ред и 0 колониДиапазон ("A1"). Офсет (1, 0) = "A2"'Преместете 0 реда и 1 колониДиапазон ("A1"). Офсет (0, 1) = "B1"„Преместете 1 ред и 1 колонаДиапазон ("A1"). Офсет (1, 1) = "B2"„Преместете 10 реда и 5 колониДиапазон ("A1"). Офсет (10, 5) = "F11"

Отместване от диапазон

123 „Преместете препратката към диапазон A1: D4 с 4 реда и 4 колони„Новата справка е E5: H8Обхват ("A1: D4"). Офсет (4,4) = "E5: H8"

Задаване на препратка към диапазон

За да присвоите диапазон на променлива на диапазон: декларирайте променлива от тип Range и след това използвайте командата Set, за да я зададете на диапазон. Моля, обърнете внимание, че трябва да използвате командата SET, тъй като RANGE е обект:

12345678 'Декларирайте променлива RangeЗатъмнете myRange като Range'Настройте променливата на диапазона A1: D4Задайте myRange = Range ("A1: D4")'Отпечатва $ A $ 1: $ D $ 4MsgBox myRange.Address

Преоразмерете диапазон

Методът за преоразмеряване на обекта Range променя размера на референтния диапазон:

1234567 Затъмнете myRange As Range„Диапазон за преоразмеряванеЗадайте myRange = Range ("A1: F4")'Отпечатва $ A $ 1: $ E $ 10Debug.Print myRange.Resize (10, 5) .Address

Горната лява клетка на диапазона с изменен размер е същата като горната лява клетка на оригиналния диапазон

Преоразмеряване на синтаксиса

Range.Resize (number_of_rows, number_of_columns)

OFFSET срещу Resize

Офсетът не променя размерите на диапазона, а го премества с посочения брой редове и колони. Преоразмеряването не променя позицията на оригиналния диапазон, но променя размерите до определения брой редове и колони.

Всички клетки в лист

Обектът Клетки се отнася до всички клетки в листа (1048576 реда и 16384 колони).

12 „Изчистете всички клетки в работни листовеКлетки. Ясно

UsedRange

Свойството UsedRange ви дава правоъгълния диапазон от горната лява клетка, използвана клетка, до дясната долна използвана клетка на активния лист.

1234567 Затъмнете като работен листЗадайте ws = ActiveSheet'$ B $ 2: $ L $ 14, ако L2 е първата клетка с произволна стойност'и L14 е последната клетка с всякаква стойност на'активен листDebug.Print ws.UsedRange.Address

CurrentRegion

Свойството CurrentRegion ви дава непрекъснат правоъгълен диапазон от горната лява клетка до дясно-долната използвана клетка, съдържаща референтната клетка/диапазон.

1234567891011 Затъмнете myRange As RangeЗадайте myRange = Range ("D4: F6")'Отпечатва $ B $ 2: $ L $ 14„Ако има пълен път от D4: F16 до B2 И L14Debug.Print myRange.CurrentRegion.Address„Можете да се обърнете и към една начална клеткаSet myRange = Range ("D4") 'Отпечатва $ B $ 2: $ L $ 14

Свойства на диапазона

Можете да получите адрес, номер на ред/колона на клетка и брой редове/колони в диапазон, както е дадено по -долу:

123456789101112131415161718192021 Затъмнете myRange As RangeЗадайте myRange = Range ("A1: F10")'Отпечатва $ A $ 1: $ F $ 10Отстраняване на грешки. Отпечатайте myRange.AddressЗадайте myRange = Range ("F10")„Отпечатва 10 за ред 10Debug.Print myRange.Row„Отпечатва 6 за колона FОтстраняване на грешки. Отпечатайте myRange.ColumnЗадайте myRange = Range ("E1: F5")„Отпечатва 5 за брой редове в обхватаDebug.Print myRange.Rows.Count'Отпечатва 2 за брой колони в обхватаDebug.Print myRange.Columns.Count

Последна клетка в лист

Можеш да използваш Редове. Брой и Колони. Брой имоти с Клетки обект, за да получите последната клетка на листа:

1234567891011 'Отпечатайте номера на последния ред„Отпечатва 1048576Debug.Print "Rows in the sheet:" & Rows.Count'Отпечатайте номера на последната колона„Отпечатва 16384Debug.Print "Columns in the sheet:" & Columns.Count'Отпечатайте адреса на последната клетка„Отпечатва $ XFD $ 1048576Debug.Print "Адрес на последната клетка в листа:" & Cells (Rows.Count, Columns.Count)

Последно използван номер на ред в колона

Свойството END ви отвежда последната клетка в диапазона, а End (xlUp) ви отвежда до първата използвана клетка от тази клетка.

123 Dim lastRow As LonglastRow = Клетки (Rows.Count, "A"). End (xlUp) .Row

Последно използван номер на колона в ред

123 Dim LastCol As LonglastCol = клетки (1, колони. брой). край (xlToLeft). колона

Свойството END ви отвежда последната клетка в диапазона, а End (xlToLeft) ви отвежда наляво до първата използвана клетка от тази клетка.

Можете също да използвате свойствата xlDown и xlToRight, за да навигирате до първите долни или десни използвани клетки на текущата клетка.

Свойства на клетката

Общи свойства

Ето код за показване на често използвани свойства на клетката

12345678910111213141516171819202122 Затъмняване на клетката като обхватЗадаване на клетка = Обхват ("A1")клетка.АктивирайтеDebug.Print cell.Address„Отпечатайте $ A $ 1Debug.Print cell.Value„Печат 456„АдресОтстраняване на грешки. Печат на клетка. Формула'Отпечатъци = SUM (C2: C3)'КоментирайтеDebug.Print cell.Comment.Text'СтилDebug.Print cell.Style'Формат на клеткатаDebug.Print cell.DisplayFormat.NumberFormat

Клетъчен шрифт

Обектът Cell.Font съдържа свойства на Cell Font:

1234567891011121314151617181920 Затъмняване на клетката като обхватЗадаване на клетка = Обхват ("A1")„Обикновен, курсив, удебелен и удебелен курсивcell.Font.FontStyle = "Удебелен курсив"' Същото катоcell.Font.Bold = Вярноcell.Font.Italic = Вярно'Задайте шрифт на Куриерcell.Font.FontStyle = "Куриер"'Задайте цвят на шрифтаcell.Font.Color = vbBlue' илиcell.Font.Color = RGB (255, 0, 0)'Задайте размер на шрифтаcell.Font.Size = 20

Копиране и поставяне

Поставяне на всички

Диапазоните/клетките могат да бъдат копирани и поставени от едно място на друго. Следният код копира всички свойства на изходния диапазон до целевия диапазон (еквивалентен на CTRL-C и CTRL-V)

1234567 „Просто копиеДиапазон ("A1: D20"). КопиранеРаботни листове ("Sheet2"). Диапазон ("B10"). Поставяне'или„Копиране от текущия лист на лист с име„ Sheet2 “Обхват ("A1: D20"). Дестинация за копиране: = Работни листове ("Sheet2"). Диапазон ("B10")

Специална паста

Избраните свойства на обхвата на източника могат да бъдат копирани до местоназначението с помощта на опцията PASTESPECIAL:

123 'Поставете диапазона само като стойностиДиапазон ("A1: D20"). КопиранеРаботни листове ("Sheet2"). Диапазон ("B10"). PasteSpecial Paste: = xlPasteValues

Ето възможните опции за опцията Поставяне:

12345678910111213 „Поставяне на специални типовеxlPasteAllxlPasteAllExceptBordersxlPasteAllMergingConditionalFormatsxlPasteAllUsingSourceThemexlPasteColumnWidthsxlPasteCommentsxlPasteFormatsxlPasteFormulasxlPasteFormulasAndNumberFormatsxlPasteValidationxlPasteValuesxlPasteValuesAndNumberFormats

Съдържание на AutoFit

Размерът на редовете и колоните може да бъде променен, за да пасне на съдържанието, като използвате кода по -долу:

12345 „Променете размера на редове от 1 до 5, за да отговарят на съдържаниетоРедове („1: 5“). AutoFit„Променете размера на колоните от А до В, за да пасне на съдържаниетоКолони ("A: B"). AutoFit

Още примери за диапазон

Препоръчително е да използвате Macro Recorder, докато извършвате необходимите действия чрез GUI. Това ще ви помогне да разберете различните налични опции и как да ги използвате.

За всеки

По -лесно е да преминете през диапазон с помощта За всеки конструирайте, както е показано по -долу:

123 За всяка клетка в обхвата ("A1: B100")- Направи нещо с клеткатаСледващата клетка

При всяка итерация на цикъла една клетка в диапазона се присвоява на променливата c и инструкциите в цикъла For се изпълняват за тази клетка. Цикълът излиза, когато се обработят всички клетки.

Вид

Сортирането е метод на Range обект. Можете да сортирате диапазон, като посочите опции за сортиране към Range.Sort. Кодът по -долу ще сортира колоните A: C въз основа на ключ в клетка C2. Редът за сортиране може да бъде xlAscending или xlDcecending. Заглавка: = xl Да, трябва да се използва, ако първият ред е заглавният ред.

12 Колони ("A: C"). Клавиш за сортиране1: = Диапазон ("C2"), _order1: = xlAscending, Header: = xlДа

намирам

Find също е метод на Range Object. Той намира първата клетка със съдържание, отговарящо на критериите за търсене, и връща клетката като обект Range. Връща се Нищо ако няма съвпадение.

Използвайте Намери следващото метод (или FindPrevious) за намиране на следващо (предишно) възникване.

Следният код ще промени шрифта на „Arial Black“ за всички клетки в диапазона, които започват с „John“:

12345 За всеки c в обхват ("A1: A100")Ако c Като "Джон*", тогаваc.Font.Name = "Arial Black"Край АкоСледващ c

Следният код ще замени всички събития от „To test“ на „Passed“ в посочения диапазон:

12345678910 С обхват ("a1: a500")Задайте c = .Find ("За тестване", LookIn: = xlValues)Ако не c Няма нищоfirstaddress = c.АдресНаправетеc.Value = "Премина"Задайте c =. FindNext (c)Цикъл, докато не е c Нищо и c.Адрес firstaddressКрай АкоКрай с

Важно е да се отбележи, че трябва да посочите диапазон, за да използвате FindNext. Също така трябва да предоставите условие за спиране, в противен случай цикълът ще се изпълнява завинаги. Обикновено адресът на първата намерена клетка се съхранява в променлива и цикълът се спира, когато достигнете отново до тази клетка. Трябва също да проверите за случай, когато нищо не е намерено, за да спре цикъла.

Адрес на обхвата

Използвайте Range.Address, за да получите адреса в стил A1

123 MsgBox Range ("A1: D10"). Адрес' илиDebug.Print Range ("A1: D10"). Адрес

Използвайте xlReferenceStyle (по подразбиране е xlA1), за да получите адреси в стил R1C1

123 MsgBox Range ("A1: D10"). Адрес (ReferenceStyle: = xlR1C1)' илиDebug.Print Range ("A1: D10"). Адрес (ReferenceStyle: = xlR1C1)

Това е полезно, когато се занимавате с диапазони, съхранявани в променливи и искате да обработвате само за определени адреси.

Обхват до масив

По -бързо и лесно е да се прехвърли диапазон в масив и след това да се обработят стойностите. Трябва да декларирате масива като вариант, за да избегнете изчисляването на размера, необходим за попълване на диапазона в масива. Размерите на масива са зададени да съвпадат с броя на стойностите в диапазона.

123456789 Dim DirArray като вариант'Съхранявайте стойностите в диапазона до масиваDirArray = Диапазон ("a1: a5"). Стойност'Цикъл за обработка на стойноститеЗа всеки c В DirArrayОтстраняване на грешки Печат cСледващия

Масив за обхват

След обработката можете да запишете масива обратно в диапазон. За да напишете масива в горния пример в диапазон, трябва да посочите диапазон, чийто размер съвпада с броя на елементите в масива.

Използвайте кода по -долу, за да запишете масива в диапазона D1: D5:

123 Диапазон ("D1: D5"). Стойност = DirArrayДиапазон ("D1: H1"). Стойност = Приложение. Транспониране (DirArray)

Моля, обърнете внимание, че трябва да транспонирате масива, ако го записвате в ред.

Обхват на сумата

12 SumOfRange = Application.WorksheetFunction.Sum (Диапазон ("A1: A10"))Отстраняване на грешки. Отпечатайте SumOfRange

Можете да използвате много функции, налични в Excel във вашия VBA код, като посочите Application.WorkSheetFunction. преди Името на функцията, както в горния пример.

Графичен диапазон

1234567 „Пребройте броя на клетките с числа в диапазонаCountOfCells = Application.WorksheetFunction.Count (Обхват ("A1: A10"))Debug.Print CountOfCells'Брой Брой непразни клетки в диапазонаCountOfNonBlankCells = Application.WorksheetFunction.CountA (Range ("A1: A10"))Debug.Print CountOfNonBlankCells

Написано от: Винамра Чандра

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave