Vba excel координаты активной ячейки

Как определить адрес активной ячейки.

Q: Как в макросе узнать и использовать текущее положение курсора (не мышиного, естественно)?

A:Очень просто! :-) ActiveCell.Row и ActiveCell.Column — покажут координаты активной ячейки.

[ Назад ]
[ Оглавление ]
[ Далее ]

Оставить комментарий

Комментарий:

можно использовать BB-коды

Максимальная длина комментария — 4000 символов.

 

Комментарии

1.

Мне нравитсяМне не нравится

17 апреля 2013, 22:49:22

Спасибо, освежило память))

2.

64K

28 сентября 2010 года

Vladlen70

0 / / 28.09.2010

Мне нравитсяМне не нравится

28 сентября 2010, 16:25:13

А не проще ли использовать — ActiveCell.Address или Activecell.AddressLocal?

Active Cell in Excel VBA

The active cell is the currently selected cell in a worksheet. The active cell in VBA can be used as a reference to move to another cell or change the properties of the same active cell or the cell reference provided by the active cell. We can access an active cell in VBA by using the application.property method with the keyword active cell.

Understanding the concept of range object and cell properties in VBACells are cells of the worksheet, and in VBA, when we refer to cells as a range property, we refer to the same cells. In VBA concepts, cells are also the same, no different from normal excel cells.read more is important to work efficiently with VBA codingVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more. One more concept you need to look into in these concepts is “VBA Active Cell.”

In Excel, there are millions of cells, and you are unsure which one is an active cell. For example, look at the below image.

Active cell address

In the above pic, we have many cells. Finding which one is an active cell is very simple; whichever cell is selected. It is called an “active cell” in VBA.

Look at the name boxIn Excel, the name box is located on the left side of the window and is used to give a name to a table or a cell. The name is usually the row character followed by the column number, such as cell A1.read more if your active cell is not visible in your window. It will show you the active cell address. For example, in the above image, the active cell address is B3.

Even when many cells are selected as a range of cells, whatever the first cell is in, the selection becomes the active cell. For example, look at the below image.

Active cell address range

Table of contents
  • Active Cell in Excel VBA
    • #1 – Referencing in Excel VBA
    • #2 – Active Cell Address, Value, Row, and Column Number
    • #3 – Parameters of Active Cell in Excel VBA
    • Recommended Articles

#1 – Referencing in Excel VBA

In our earlier articles, we have seen how to reference the cellsCell reference in excel is referring the other cells to a cell to use its values or properties. For instance, if we have data in cell A2 and want to use that in cell A1, use =A2 in cell A1, and this will copy the A2 value in A1.read more in VBA. By active cell property, we can refer to the cell.

For example, if we want to select cell A1 and insert the value “Hello,” we can write it in two ways. Below is the way of selecting the cell and inserting the value using the VBA “RANGE” object

Code:

Sub ActiveCell_Example1()

    Range("A1").Select
    Range("A1").Value = "Hello"
 
End Sub

VBA Active Cell Example 1

It will first select the cell A1 “Range(“A1″). Select”

Then, it will insert the value “Hello” in cell A1 Range(“A1”).Value = “Hello”

Now, we will remove the line Range(“A1”). Value = “Hello” and use the active cell property to insert the value.

Code:

Sub ActiveCell_Example1()

    Range("A1").Select
    ActiveCell.Value = "Hello"

End Sub

VBA Active Cell Example 1-1

Similarly, first, it will select the cell A1 “Range(“A1”). Select.

But here, we have used ActiveCell.Value = “Hello” instead of Range(“A1”).Value = “Hello”

We have used the active cell property because the moment we select cell A1 it becomes an active cell. So, we can use the Excel VBA active cell property to insert the value.

#2 – Active Cell Address, Value, Row, and Column Number

Let’s show the active cell’s address in the message box to understand it better. Now, look at the below image.

VBA Active Cell Example 2

In the above image, the active cell is “B3,” and the value is 55. So, let us write code in VBA to get the active cell’s address.

Code:

Sub ActiveCell_Example2()

    MsgBox ActiveCell.Address

End Sub

VBA Active Cell Example 2-1

Run this code using the F5 key or manually. Then, it will show the active cell’s address in a message box.

VBA Active Cell Example 2-2

Output:

VBA Active Cell Example 2-3

Similarly, the below code will show the value of the active cell.

Code:

Sub ActiveCell_Example2()

    MsgBox ActiveCell.Value

End Sub

VBA Active Cell Example 2-4

Output:

VBA Active Cell Example 2-5

The below code will show the row number of the active cell.

Code:

Sub ActiveCell_Example2()

  MsgBox ActiveCell.Row

End Sub

VBA Active Cell Example 2-6

Output:

Example 2-7

The below code will show the column number of the active cell.

Code:

Sub ActiveCell_Example2()

MsgBox ActiveCell.Column

End Sub

Example 2-8

Output:

VBA Active Cell Example 2-9

#3 – Parameters of Active Cell in Excel VBA

The active cell property has parameters as well. After entering the property, the active cell opens parenthesis to see the parameters.

VBA Active Cell Formula

Using this parameter, we can refer to another cell as well.

For example, ActiveCell (1,1) means whichever cell is active. If you want to move down one row to the bottom, you can use ActiveCell (2,1). Here 2 does not mean moving down two rows but rather just one row down. Similarly, if you want to move one column to the right, then this is the code ActiveCell (2,2)

Look at the below image.

VBA Active Cell Example 3

In the above image, the active cell is A2. To insert value to the active cell, you write this code.

Code:

ActiveCell.Value = “Hiiii” or ActiveCell (1,1).Value = “Hiiii”

VBA Active Cell Example 3-4

Run this code manually or through the F5 key. It will insert the value “Hiiii” into the cell.

Example 3-7

If you want to insert the same value to the below cell, you can use this code.

Code:

ActiveCell (2,1).Value = “Hiiii”

Example 3-5

It will insert the value to the cell below the active cell.

Example 3-2

You can use this code if you want to insert the value to one column right then.

Code:

ActiveCell (1,2).Value = “Hiiii”

Example 3-6

It will insert “Hiiii” to the next column cell of the active cell.

Example 3-3

Like this, we can reference the cells in VBA using the active cell property.

We hope you have enjoyed it. Thanks for your time with us.

You can download the VBA Active Cell Excel Template here:- VBA Active Cell Template

Recommended Articles

This article has been a guide to VBA Active Cell. Here, we learned the concept of an active cell to find the address of a cell. Also, we learned the parameters of the active cell in Excel VBA along with practical examples and a downloadable template. Below you can find some useful Excel VBA articles: –

  • VBA Selection
  • Excel Edit Cell Shortcut
  • Excel VBA Range Cells
  • Get Cell Value with Excel VBA

Home / VBA / How to use ActiveCell in VBA in Excel

In VBA, the active cell is a property that represents the cell that is active at the moment. When you select a cell or navigate to a cell and that green box covers that cell you can use ACTIVECELL property to refer to that cell in a VBA code. There are properties and methods that come with it.

Use the Active Cell Property

  1. Type the keyword “ActiveCell”.
  2. Type a dot (.) to get the list properties and methods.
  3. Select the property or method that you want to use.
  4. Run the code to perform the activity to the active cell.

Important Points

  • When you use the active cell property VBA refers to the active cell of the active workbook’s active sheet’s, irrespective of how many workbooks are open at the moment.
  • ActiveCell is ultimately a cell that comes with all the properties and methods that a normal cell comes with.

Activate a Cell from the Selected Range

To activate a cell using a VBA code there are two ways that you can use one “Activate” method and “Select” method.

Sub vba_activecell()

'select and entire range
Range("A1:A10").Select

'select the cell A3 from the selected range
Range("A3").Activate

'clears everything from the active cell
ActiveCell.Clear

End Sub

The above code, first of all, selects the range A1:A10 and then activates the cell A3 out of that and in the end, clears everything from the active cell i.e., A3.

Return Value from the Active Cell

The following code returns the value from the active cell using a message box.

MsgBox ActiveCell.Value

Or if you want to get the value from the active cell and paste it into a separate cell.

Range("A1") = ActiveCell.Value

Set Active Cell to a Variable

You can also set the active cell to the variable, just like the following example.

Sub vba_activecell()

'declares the variable as range
Dim myCell As Range

'set active cell to the variable
Set myCell = ActiveCell

'enter value in the active cell
myCell.Value = Done

End Sub

Get Row and Column Number of the ActiveCell

With the active cell there comes a row and column property that you can use to get the row and column number of the active cell.

MsgBox ActiveCell.Row

MsgBox ActiveCell.Column

Get Active Cell’s Address

You can use the address property to get the address of the active cell.

MsgBox ActiveCell.Address

When you run the above code, it shows you a message box with the cell address of the active cell of the active workbook’s active sheet (as I mentioned earlier).

Move from the Active Cell using Offset

With offset property, you can move to a cell which is a several rows and columns away from the active cell.

ActiveCell.Offset(2, 2).Select

Select a Range from the Active Cell

And you can also select a range starting from the active cell.

Range(ActiveCell.Offset(1, 1), ActiveCell.Offset(5, 5)).Select

More Tutorials

    • Count Rows using VBA in Excel
    • Excel VBA Font (Color, Size, Type, and Bold)
    • Excel VBA Hide and Unhide a Column or a Row
    • Excel VBA Range – Working with Range and Cells in VBA
    • Apply Borders on a Cell using VBA in Excel
    • Find Last Row, Column, and Cell using VBA in Excel
    • Insert a Row using VBA in Excel
    • Merge Cells in Excel using a VBA Code
    • Select a Range/Cell using VBA in Excel
    • SELECT ALL the Cells in a Worksheet using a VBA Code
    • Special Cells Method in VBA in Excel
    • UsedRange Property in VBA in Excel
    • VBA AutoFit (Rows, Column, or the Entire Worksheet)
    • VBA ClearContents (from a Cell, Range, or Entire Worksheet)
    • VBA Copy Range to Another Sheet + Workbook
    • VBA Enter Value in a Cell (Set, Get and Change)
    • VBA Insert Column (Single and Multiple)
    • VBA Named Range | (Static + from Selection + Dynamic)
    • VBA Range Offset
    • VBA Sort Range | (Descending, Multiple Columns, Sort Orientation
    • VBA Wrap Text (Cell, Range, and Entire Worksheet)
    • VBA Check IF a Cell is Empty + Multiple Cells

    ⇠ Back to What is VBA in Excel

    Helpful Links – Developer Tab – Visual Basic Editor – Run a Macro – Personal Macro Workbook – Excel Macro Recorder – VBA Interview Questions – VBA Codes

    Определение активных составляющих книги

    Мне кажется, многие загонялись таким вопросом, как определить активную ячейку (на которой находится курсор), строку или столбец. Или же хотелось получить адрес в формате А1, В4 и т.д. Вот сегодня я и покажу, как это сделать, потому, что очень удобно, когда ты знаешь активные элементы книги.

    Номер активной строки

    Практически все активные элементы определяются при помощи такого слова — Active, кторое записывается перед определением активного элемента. Таким образом, номер активной строки можно вычислить следующим образом:

           Sub Stroka()

               s = ActiveCell.Row

               MsgBox «Активная строка под номером » & s, vbInformation, «Активная строка»

           End Sub

    Номер активного столбца и стороки

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

           Sub Stroka()

               s = ActiveCell.Row

               b = ActiveCell.Column

               MsgBox «Активная строка под номером » & s & » » & _

    vbNewLine & «Активный столбец под номером » & b, vbInformation, «адрес»

           End Sub

    Определяем номер последней заполненной строки и столбца

    Sub Last_Stroka_and_Stolbec()

    ‘ищем последнюю заполненную строку и столбец и выводим сообщение о номере

        Stroka = ActiveSheet.Cells.Find(What:=»*», SearchDirection:=xlPrevious, _

              SearchOrder:=xlByRows).Row

        Stolbec = ActiveSheet.Cells.Find(What:=»*», SearchDirection:=xlPrevious,         _SearchOrder:=xlByRows).Column

    MsgBox «Последняя строка под номером » & Stroka & » » & _

               vbNewLine & «Последний столбец под номером » _

               & Stolbec, vbInformation, «Адрес»

    End Sub

    Определяем активную ячейку

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

          Sub yacheika()

              sk = ActiveCell.Row

              st = ActiveCell.Column

              MsgBox «Активная ячейка имеет координаты Cells(» & sk & «,» & st & «)», _

                      vbInformation, «Активная ячейка»

          End Sub

    Адрес активной ячейки

    Многие думали, а как получить адрес активной ячейки? Очень просто, делается это так:

          Sub adres()

              A = ActiveCell.Address

              MsgBox «Абсолютный адрес активной ячейки — » & A, vbInformation, «Адрес»

          End Sub

    Но такая запись может не устроить некоторых, потому что вней присутствуют $, т.е. абсолютное значение, а не относительное. Но и это можно поправить. Доллары уберутся, если записать код так:

          Sub adress()

              A = ActiveCell.Address(0, 0)

              MsgBox «Относительный адрес активной ячейки — » & A, vbInformation, «Адрес»

          End Sub

    В скобках оператора Address указано какое именно значение должно быть относительным, а какое абсолютным. Если Address(0,0), то и строка и столбец записаны относительными (первый ноль отвечает за строку, второй ноль — это столбец). Если в строке поставить вместо ноля еденицу, то строка будет абсолютным значением, а столбец относительным. Причём значения следующих записей равнозначны:

    Address(1, 0) = Address(True, False)

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

    Адрес выделенного диапазона можно получить следующим образом

          Sub diapazon()

    ‘используйте любую переменную для определения адреса

              A = Selection.Rows.Address(0, 0)    ‘Через строку

              b = Selection.Columns.Address(0, 0) ‘Через столбец

              c = Selection.Address(0, 0)

              MsgBox «Выделенный диапазон — » & A, vbInformation, «Адрес»

          End Sub

    Координаты выделенного диапазона

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

          Sub Kdiapazon()

              a = Selection.Row

              b = Selection.Column

              K1 = Cells(a, b).Address(0, 0)

              aa = a + Selection.Rows.Count — 1

              bb = b + Selection.Columns.Count — 1

              K2 = Cells(aa, bb).Address(0, 0)

              MsgBox «Первая координата выделенного диапазона — » & K1 & vbNewLine & _

              «Вторая координата выделенного диапазона — » & K2, vbInformation, «Координаты»

          End Sub

    a — Определяет номер первой строки выделенного диапазона;
    b — Определяет номер первого столбца выделенного диапазона;
    K1 — Определяем первую координату выделенного диапазона;
    aa — Определяем номер последней строки выделенного диапазона;
    bb — Определяем номер пследнего столбца выделенного диапазона;
    K2 — Определяем вторую координату выделенного диапазона;

    Selection.Rows.Count — определяет количество строк в выделенном диапазоне;
    Selection.Columns.Count — определяет количество столбцов в выделенном диапазоне;

    У многих возник вопрос: А почему вычитаем единицу? Всё потому, что первая координата входит в выделенный диапазон и нам её надо не потерять.

    Имя активной книги

    Имя активной книги возможно вычислить такой записью:

          Sub WorkbookName()

              Name = ActiveWorkbook.Name

              MsgBox «Имя активной книги — » & Name, vbInformation, «Имя активной книги»

          End Sub

    Имя активного листа

    Имя активного листа можно определить так:

          Sub SheetsName()

              Name = ActiveSheet.Name

              MsgBox «Имя активного листа — » & Name, vbInformation, «Имя активного листа»

          End Sub

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

    Получить адрес активной ячейки с формулой
    Получить адрес активной ячейки с кодом VBA
    Отображение адреса активной ячейки в указанной ячейке с кодом VBA
    Динамически отображать адрес активной ячейки с помощью удивительного инструмента


    Получить адрес активной ячейки с формулой

    В этом разделе мы предоставим вам формулу легкого получения адреса активной ячейки.

    1. Выберите ячейку, чтобы сделать ее активной.

    2. Введите в нее приведенную ниже формулу и нажмите Enter .

    =ADDRESS(ROW(),COLUMN())

    Затем вы можете увидеть, что адрес текущей выбранной ячейки сразу отображается в ячейке.

    Внимание: Если вы выберете другую ячейку, адрес не изменится автоматически. Чтобы получить динамический адрес при выборе разных ячеек, примените следующие методы.


    Получить адрес активной ячейки с кодом VBA

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

    1. нажмите другой + F11 одновременно открыть Microsoft Visual Basic для приложений окно.

    2. в Microsoft Visual Basic для приложений дважды щелкните имя текущего рабочего листа на левой панели, чтобы открыть редактор кода, затем скопируйте и вставьте приведенный ниже код VBA в редактор кода.

    Код VBA: получить адрес активной ячейки

    Sub selectRange()
    	MsgBox ActiveCell.Address
    End Sub

    3. Затем нажмите Run кнопку для запуска кода.

    4. Затем появится диалоговое окно с адресом активной ячейки, указанным внутри.


    Отображение адреса активной ячейки в указанной ячейке с кодом VBA

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

    1. Откройте Microsoft Visual Basic для приложений окно, нажав другой + F11 одновременно.

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

    Код VBA: отображать адрес активной ячейки в указанной ячейке

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    	Range("A1").Value = ActiveCell.Address
    End Sub

    Внимание: A1 — это ячейка, в которую вы хотите поместить адрес активной ячейки, вы можете изменить его на указанную ячейку для своих нужд.

    3. Затем нажмите Файл > Закройте и вернитесь в Microsoft Excel Для выхода из Microsoft Visual Basic для приложений окно.

    Вы можете видеть, что адрес активной ячейки отображается в ячейке A1, и адрес будет изменяться автоматически в зависимости от изменения активной ячейки. Смотрите скриншот:


    Динамически отображать адрес активной ячейки с помощью удивительного инструмента

    Если вы хотите динамически отображать адрес активной ячейки на листе, я настоятельно рекомендую Расширенная панель редактирования инструмент Kutools for Excel. Давайте посмотрим, как этот инструмент может динамически отображать адрес активной ячейки на листе.

    1. Нажмите Кутулс > Показать спрятать > Расширенная панель редактирования для включения функции.

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

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



    Лучшие инструменты для работы в офисе

    Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

    • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
    • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
    • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
    • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
    • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
    • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
    • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
    • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
    • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

    вкладка kte 201905


    Вкладка Office: интерфейс с вкладками в Office и упрощение работы

    • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
    • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
    • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

    офисный дно

    Активная ячейка в Excel VBA

    Активная ячейка — это текущая выбранная ячейка на листе, активная ячейка в VBA может использоваться как ссылка для перехода к другой ячейке или изменения свойств той же активной ячейки или ссылки на ячейки, предоставленной из активной ячейки, активная ячейка в VBA может можно получить с помощью метода application.property с ключевым словом active cell.

    Для эффективной работы с кодированием VBA важно понимать концепцию объекта диапазона и свойств ячеек в VBA. В этих концепциях есть еще одна концепция, которую вам нужно изучить, это «активная ячейка VBA».

    В Excel есть миллионы ячеек, и вы наверняка сомневаетесь, какая из них является активной. Для примера посмотрите на изображение ниже.

    На самом изображении выше у нас есть много ячеек, чтобы определить, какая из них является активной ячейкой, очень просто, какая бы ячейка не была выбрана прямо сейчас, она называется «Активная ячейка» в VBA.

    Если ваша активная ячейка не видна в вашем окне, посмотрите на поле имени, оно покажет вам адрес активной ячейки, на приведенном выше изображении адрес активной ячейки — B3.

    Даже когда в качестве диапазона ячеек выбрано множество ячеек, любая первая ячейка в выделении становится активной ячейкой. Например, посмотрите на изображение ниже.

    # 1 — Ссылки в Excel VBA

    В наших предыдущих статьях мы видели, как ссылаться на ячейки в VBA. По свойству Active Cell мы можем ссылаться на ячейку.

    Например, если мы хотим выбрать ячейку A1 и вставить значение «Hello», мы можем записать его двумя способами. Ниже приведен способ выбора ячейки и вставки значения с помощью объекта VBA «RANGE».

    Код:

     Sub ActiveCell_Example1 () Диапазон ("A1"). Выберите диапазон ("A1"). Value = "Hello" End Sub 

    Сначала будет выбрана ячейка A1 « Диапазон (« A1 »). Выбрать»

    Затем он вставит значение «Hello» в диапазон ячейки A1 («A1»). Value = «Hello»

    Теперь я удалю строку Range («A1»). Value = «Hello» и использую свойство Active Cell для вставки значения.

    Код:

     Sub ActiveCell_Example1 () Диапазон ("A1"). Выберите ActiveCell.Value = "Hello" End Sub 

    Точно так же сначала он выберет ячейку A1 « Диапазон (« A1 »). Выбрать»

    Но здесь я использовал ActiveCell.Value = «Hello» вместо Range («A1»). Value = «Hello»

    Причина, по которой я использовал свойство Active Cell, потому что в тот момент, когда я выбираю ячейку A1, она становится активной ячейкой. Таким образом, мы можем использовать свойство Excel VBA Active Cell для вставки значения.

    # 2 — Активный адрес ячейки, значение, строка и номер столбца

    Чтобы понять это еще лучше, давайте покажем адрес активной ячейки в окне сообщения. Теперь посмотрите на изображение ниже.

    На изображении выше активной ячейкой является «B3», а значение — 55. Давайте напишем код на VBA, чтобы получить адрес активной ячейки.

    Код:

     Sub ActiveCell_Example2 () MsgBox ActiveCell.Address End Sub 

    Запустите этот код с помощью клавиши F5 или вручную, тогда он покажет адрес активной ячейки в окне сообщения.

    Выход:

    Точно так же код ниже покажет значение активной ячейки.

    Код:

     Sub ActiveCell_Example2 () MsgBox ActiveCell.Value End Sub 

    Выход:

    Код ниже покажет номер строки активной ячейки.

    Код:

     Sub ActiveCell_Example2 () MsgBox ActiveCell.Row End Sub 

    Выход:

    Код ниже покажет номер столбца активной ячейки.

    Код:

     Подложка ActiveCell_Example2 () MsgBox ActiveCell.Column End Sub 

    Выход:

    # 3 — Параметры активной ячейки в Excel VBA

    Свойство Active Cell также имеет параметры. После ввода свойства ActiveCell откройте скобку, чтобы увидеть параметры.

    Используя этот параметр, мы также можем ссылаться на другую ячейку.

    Например, ActiveCell (1,1) означает, какая ячейка активна. Если вы хотите переместиться на одну строку ниже, вы можете использовать ActiveCell (2,1), здесь 2 не означает, что нужно переместиться на две строки вниз, а не только на одну строку вниз. Аналогично, если вы хотите переместить один столбец вправо, тогда это код ActiveCell (2,2)

    Для примера посмотрите на изображение ниже.

    На изображении выше активной ячейкой является A2, чтобы вставить значение в активную ячейку, вы пишете этот код.

    Код:

    ActiveCell.Value = «Hiiii» или ActiveCell (1,1) .Value = «Hiiii»

    Запустите этот код вручную или с помощью клавиши F5, это вставит значение «Hiiii» в ячейку.

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

    Код:

    ActiveCell (2,1) .Value = «Hiiii»

    Это вставит значение в ячейку под активной ячейкой.

    Если вы хотите вставить значение в один столбец справа, вы можете использовать этот код.

    Код:

    ActiveCell (1,2) .Value = «Hiiii»

    Это вставит «Hiiii» в следующую ячейку столбца активной ячейки.

    Таким образом, мы можем ссылаться на ячейки в VBA, используя свойство Active Cell.

    Надеюсь, вам понравилось. Спасибо, что уделили нам время.

    Вы можете скачать шаблон VBA Active Cell Excel здесь: — VBA Active Cell Template

    Всё о работе с ячейками в Excel-VBA: обращение, перебор, удаление, вставка, скрытие, смена имени.

    Содержание:

    Table of Contents:

    • Что такое ячейка Excel?
    • Способы обращения к ячейкам
      • Выбор и активация
      • Получение и изменение значений ячеек
        • Ячейки открытой книги
        • Ячейки закрытой книги 
      • Перебор ячеек
      • Перебор в произвольном диапазоне
    • Свойства и методы ячеек
      • Имя ячейки
      • Адрес ячейки
      • Размеры ячейки
    • Запуск макроса активацией ячейки

    2 нюанса:

    1. Я почти везде стараюсь использовать ThisWorkbook (а не, например, ActiveWorkbook) для обращения к текущей книге, в которой написан этот код (считаю это наиболее безопасным для новичков способом обращения к книгам, чтобы случайно не внести изменения в другие книги). Для экспериментов можете вставлять этот код в модули, коды книги, либо листа, и он будет работать только в пределах этой книги. 
    2. Я использую английский эксель и у меня по стандарту листы называются Sheet1, Sheet2 и т.д. Если вы работаете в русском экселе, то замените Thisworkbook.Sheets(«Sheet1») на Thisworkbook.Sheets(«Лист1»). Если этого не сделать, то вы получите ошибку в связи с тем, что пытаетесь обратиться к несуществующему объекту. Можно также заменить на Thisworkbook.Sheets(1), но это менее безопасно.

    Что такое ячейка Excel?

    В большинстве мест пишут: «элемент, образованный пересечением столбца и строки». Это определение полезно для людей, которые не знакомы с понятием «таблица». Для того, чтобы понять чем на самом деле является ячейка Excel, необходимо заглянуть в объектную модель Excel. При этом определения объектов «ряд», «столбец» и «ячейка» будут отличаться в зависимости от того, как мы работаем с файлом.

    Объекты в Excel-VBA. Пока мы работаем в Excel без углубления в VBA определение ячейки как «пересечения» строк и столбцов нам вполне хватает, но если мы решаем как-то автоматизировать процесс в VBA, то о нём лучше забыть и просто воспринимать лист как «мешок» ячеек, с каждой из которых VBA позволяет работать как минимум тремя способами:

    1. по цифровым координатам (ряд, столбец),
    2. по адресам формата А1, B2 и т.д. (сценарий целесообразности данного способа обращения в VBA мне сложно представить)
    3. по уникальному имени (во втором и третьем вариантах мы будем иметь дело не совсем с ячейкой, а с объектом VBA range, который может состоять из одной или нескольких ячеек). Функции и методы объектов Cells и Range отличаются. Новичкам я бы порекомендовал работать с ячейками VBA только с помощью Cells и по их цифровым координатам и использовать Range только по необходимости.

    Все три способа обращения описаны далее

    Как это хранится на диске и как с этим работать вне Excel? С точки зрения хранения и обработки вне Excel и VBA. Сделать это можно, например, сменив расширение файла с .xls(x) на .zip и открыв этот архив.

    Пример содержимого файла Excel:

    Далее xl -> worksheets и мы видим файл листа

    Содержимое файла:

     То же, но более наглядно:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{00000000-0001-0000-0000-000000000000}">
    	<dimension ref="B2:F6"/>
    	<sheetViews>
    		<sheetView tabSelected="1" workbookViewId="0">
    			<selection activeCell="D12" sqref="D12"/>
    		</sheetView>
    	</sheetViews>
    	<sheetFormatPr defaultRowHeight="14.4" x14ac:dyDescent="0.3"/>
    	<sheetData>
    		<row r="2" spans="2:6" x14ac:dyDescent="0.3">
    			<c r="B2" t="s">
    				<v>0</v>
    			</c>
    		</row>
    		<row r="3" spans="2:6" x14ac:dyDescent="0.3">
    			<c r="C3" t="s">
    				<v>1</v>
    			</c>
    		</row>
    		<row r="4" spans="2:6" x14ac:dyDescent="0.3">
    			<c r="D4" t="s">
    				<v>2</v>
    			</c>
    		</row>
    		<row r="5" spans="2:6" x14ac:dyDescent="0.3">
    			<c r="E5" t="s">
    				<v>0</v></c>
    		</row>
    		<row r="6" spans="2:6" x14ac:dyDescent="0.3">
    			<c r="F6" t="s"><v>3</v>
    		</c></row>
    	</sheetData>
    	<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
    </worksheet>

    Как мы видим, в структуре объектной модели нет никаких «пересечений». Строго говоря рабочая книга — это архив структурированных данных в формате XML. При этом в каждую «строку» входит «столбец», и в нём в свою очередь прописан номер значения данного столбца, по которому оно подтягивается из другого XML файла при открытии книги для экономии места за счёт отсутствия повторяющихся значений. Почему это важно. Если мы захотим написать какой-то обработчик таких файлов, который будет напрямую редактировать данные в этих XML, то ориентироваться надо на такую модель и структуру данных. И правильное определение будет примерно таким: ячейка — это объект внутри столбца, который в свою очередь находится внутри строки в файле xml, в котором хранятся данные о содержимом листа.

    Способы обращения к ячейкам

    Выбор и активация

    Почти во всех случаях можно и стоит избегать использования методов Select и Activate. На это есть две причины:

    1. Это лишь имитация действий пользователя, которая замедляет выполнение программы. Работать с объектами книги можно напрямую без использования методов Select и Activate.
    2. Это усложняет код и может приводить к неожиданным последствиям. Каждый раз перед использованием Select необходимо помнить, какие ещё объекты были выбраны до этого и не забывать при необходимости снимать выбор. Либо, например, в случае использования метода Select в самом начале программы может быть выбрано два листа вместо одного потому что пользователь запустил программу, выбрав другой лист.

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

    Отменить выбор  ячеек можно методом Unselect:

    Selection.Unselect

    Отличие выбора от активации — активировать можно только один объект из раннее выбранных. Выбрать можно несколько объектов.

    Если вы записали и редактируете код макроса, то лучше всего заменить Select и Activate на конструкцию With … End With. Например, предположим, что мы записали вот такой макрос:

    Sub Macro1()
    ' Macro1 Macro
        Range("F4:F10,H6:H10").Select 'выбрали два несмежных диапазона зажав ctrl
        Range("H6").Activate          'показывает только то, что я начал выбирать второй диапазон с этой ячейки (она осталась белой). Это действие ни на что не влияет
        With Selection.Interior       
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 65535            'залили желтым цветом, нажав на кнопку заливки на верхней панели
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End Sub

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

    Sub Macro11()
    '
    ' Macro1 Macro
        Range("F4:F10,H6:H10").Select '1. смотрим, что за объект выбран (что идёт до .Select)
        Range("H6").Activate
        With Selection.Interior       '2. понимаем, что у выбранного объекта есть свойство interior, с которым далее идёт работа
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 65535
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End Sub
    
    
    
    Sub Optimized_Macro()
        With Range("F4:F10,H6:H10").Interior '3. переносим объект напрямую в конструкцию With вместо Selection
    ' ////// Здесь я для надёжности прописал бы ещё Thisworkbook.Sheet("ИмяЛиста") перед Range,
    ' ////// чтобы минимизировать риск любых случайных изменений других листов и книг
    ' ////// With Thisworkbook.Sheet("ИмяЛиста").Range("F4:F10,H6:H10").Interior
            .Pattern = xlSolid               '4. полностью копируем всё, что было записано рекордером внутрь блока with
            .PatternColorIndex = xlAutomatic
            .Color = 55555                   '5. здесь я поменял цвет на зеленый, чтобы было видно, работает ли код при поочерёдном запуске двух макросов
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End Sub

    Пример сценария, когда использование Select и Activate оправдано:

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

    Sub Select_Activate_is_OK()
    Thisworkbook.Worksheets(Array("Sheet1", "Sheet3")).Select 'Выбираем несколько листов по именам
    Thisworkbook.Worksheets("Sheet3").Activate 'Показываем пользователю третий лист
    'Далее все действия с выбранными ячейками через Select будут одновременно вносить изменения в оба выбранных листа
    
    'Допустим, что тут мы решили покрасить те же два диапазона:
    Range("F4:F10,H6:H10").Select
        Range("H6").Activate
        With Selection.Interior       
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 65535
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    
    End Sub

    Единственной причиной использовать этот код по моему мнению может быть желание зачем-то показать пользователю определённую страницу книги в какой-то момент исполнения программы. С точки зрения обработки объектов, опять же, эти действия лишние.

    Получение и изменение значений ячеек

    Значение ячеек можно получать/изменять с помощью свойства value. 

    'Если нужно прочитать / записать значение ячейки, то используется свойство Value
    a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'записать значение ячейки А1 листа "Sheet1" в переменную "a"
    ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value = 1  'задать значение ячейки А1 (первый ряд, первый столбец) листа "Sheet1"
    
    'Если нужно прочитать текст как есть (с форматированием), то можно использовать свойство .text:
    ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text = "1" 
    a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text
    
    'Когда проявится разница:
    'Например, если мы считываем дату в формате "31 декабря 2021 г.", хранящуюся как дата
    a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'эапишет как "31.12.2021"
    a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text  'запишет как "31 декабря 2021 г."

    Ячейки открытой книги

    К ячейкам можно обращаться:

    'В книге, в которой хранится макрос (на каком-то из листов, либо в отдельном модуле или форме)
    ThisWorkbook.Sheets("Sheet1").Cells(1,1).Value        'По номерам строки и столбца
    ThisWorkbook.Sheets("Sheet1").Cells(1,"A").Value      'По номерам строки и букве столбца
    ThisWorkbook.Sheets("Sheet1").Range("A1").Value       'По адресу - вариант 1
    ThisWorkbook.Sheets("Sheet1").[A1].Value              'По адресу - вариант 2
    ThisWorkbook.Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)
    
    'Те же действия, но с использованием полного названия рабочей книги (книга должна быть открыта)
    Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
    Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,"A").Value                'По номерам строки и букве столбца
    Workbooks("workbook.xlsm").Sheets("Sheet1").Range("A1").Value                 'По адресу - вариант 1
    Workbooks("workbook.xlsm").Sheets("Sheet1").[A1].Value                        'По адресу - вариант 2
    Workbooks("workbook.xlsm").Sheets("Sheet1").Range("CellName").Value           'По имени ячейки (для этого ей предварительно нужно его присвоить)
    

    Ячейки закрытой книги

    Если нужно достать или изменить данные в другой закрытой книге, то необходимо прописать открытие и закрытие книги. Непосредственно работать с закрытой книгой не получится, потому что данные в ней хранятся отдельно от структуры и при открытии Excel каждый раз производит расстановку значений по соответствующим «слотам» в структуре. Подробнее о том, как хранятся данные в xlsx см выше.

    Workbooks.Open Filename:="С:closed_workbook.xlsx"    'открыть книгу (она становится активной)
    a = ActiveWorkbook.Sheets("Sheet1").Cells(1,1).Value  'достать значение ячейки 1,1
    ActiveWorkbook.Close False                            'закрыть книгу (False => без сохранения)

    Скачать пример, в котором можно посмотреть, как доставать и как записывать значения в закрытую книгу. 

    Код из файла:

    Option Explicit
    Sub get_value_from_closed_wb() 'достать значение из закрытой книги
    Dim a, wb_path, wsh As String
    wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
    wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
    Workbooks.Open Filename:=wb_path
    a = ActiveWorkbook.Sheets(wsh).Cells(3, 3).Value
    ActiveWorkbook.Close False
    ThisWorkbook.Sheets("Sheet1").Cells(4, 3).Value = a
    End Sub
    
    Sub record_value_to_closed_wb() 'записать значение в закрытую книгу
    Dim wb_path, b, wsh As String
    wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
    wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
    b = ThisWorkbook.Sheets("Sheet1").Cells(5, 3).Value 'get value to record in the target workbook
    Workbooks.Open Filename:=wb_path
    ActiveWorkbook.Sheets(wsh).Cells(4, 4).Value = b 'add new value to cell D4 of the target workbook
    ActiveWorkbook.Close True
    End Sub

    Перебор ячеек

    Перебор в произвольном диапазоне

    Скачать файл со всеми примерами

    Пройтись по всем ячейкам в нужном диапазоне можно разными способами. Основные:

    1. Цикл For Each. Пример:
      Sub iterate_over_cells()
      
      For Each c In ThisWorkbook.Sheets("Sheet1").Range("B2:D4").Cells
      MsgBox (c)
      Next c
      
      End Sub​

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

    2. Ту же задачу можно решить с помощью двух вложенных циклов — внешний будет перебирать ряды, а вложенный — ячейки в рядах. Этот способ я использую чаще всего, потому что он позволяет получить больше контроля над исполнением: на каждой итерации цикла нам доступны координаты ячеек. Для перебора всех ячеек на листе этим методом потребуется найти последнюю заполненную ячейку. Пример кода:
      Sub iterate_over_cells()
      
      Dim cl, rw As Integer
      Dim x As Variant
      
      'перебор области 3x3
      For rw = 1 To 3 ' цикл для перебора рядов 1-3
      
          For cl = 1 To 3 'цикл для перебора столбцов 1-3
              x = ThisWorkbook.Sheets("Sheet1").Cells(rw + 1, cl + 1).Value
              MsgBox (x)
          Next cl
      Next rw
      
      
      
      'перебор всех ячеек на листе. Последняя ячейка определена с помощью UsedRange
      'LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
      'LastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
      'For rw = 1 To LastRow 'цикл перебора всех рядов
      '    For cl = 1 To LastCol 'цикл для перебора всех столбцов
      '        Действия 
      '    Next cl
      'Next rw
      
      
      End Sub​
    3. Если нужно перебрать все ячейки в выделенном диапазоне на активном листе, то код будет выглядеть так:
      Sub iterate_cell_by_cell_over_selection()
          Dim ActSheet As Worksheet
          Dim SelRange As Range
          Dim cell As Range
          
       
          Set ActSheet = ActiveSheet
          Set SelRange = Selection
          
          'if we want to do it in every cell of the selected range
          For Each cell In Selection
          MsgBox (cell.Value)
          
          Next cell
      
      End Sub​

      Данный метод подходит для интерактивных макросов, которые выполняют действия над выбранными пользователем областями.

    4. Перебор ячеек в ряду
      Sub iterate_cells_in_row()
          Dim i, RowNum, StartCell As Long
          
          RowNum = 3 'какой ряд
          StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i)
          
          For i = 1 To 10 ' 10 ячеек в выбранном ряду
          ThisWorkbook.Sheets("Sheet1").Cells(RowNum, i + StartCell).Value = i '(i + StartCell) добавляет 1 к номеру столбца при каждом повторении
          Next i
      
      End Sub
    5. Перебор ячеек в столбце
      Sub iterate_cells_in_column()
          Dim i, ColNum, StartCell As Long
          
          ColNum = 3 'какой столбец
          StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i)
          
          For i = 1 To 10 ' 10 ячеек
          ThisWorkbook.Sheets("Sheet1").Cells(i + StartCell, ColNum).Value = i ' (i + StartCell) добавляет 1 к номеру ряда при каждом повторении
          Next i
      
      End Sub​

    Свойства и методы ячеек

    Имя ячейки

    Присвоить новое имя можно так:

    Thisworkbook.Sheets(1).Cells(1,1).name = "Новое_Имя"

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

    ActiveWorkbook.Names("Старое_Имя").Delete

    Пример кода для переименования ячеек:

    Sub rename_cell()
    
    old_name = "Cell_Old_Name"
    new_name = "Cell_New_Name"
    
    ActiveWorkbook.Names(old_name).Delete
    ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
    End Sub
    
    Sub rename_cell_reverse()
    
    old_name = "Cell_New_Name"
    new_name = "Cell_Old_Name"
    
    ActiveWorkbook.Names(old_name).Delete
    ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
    End Sub

    Адрес ячейки

    Sub get_cell_address() ' вывести адрес ячейки в формате буква столбца, номер ряда
      '$A$1 style
      txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address
      MsgBox (txt_address)
    End Sub
    
    Sub get_cell_address_R1C1()' получить адрес столбца в формате номер ряда, номер столбца
      'R1C1 style
      txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address(ReferenceStyle:=xlR1C1)
      MsgBox (txt_address)
    End Sub
    
      'пример функции, которая принимает 2 аргумента: название именованного диапазона и тип желаемого адреса 
      '(1- тип $A$1 2- R1C1 - номер ряда, столбца)
    Function get_cell_address_by_name(str As String, address_type As Integer)
      '$A$1 style
      Select Case address_type
        Case 1
          txt_address = Range(str).Address
        Case 2
          txt_address = Range(str).Address(ReferenceStyle:=xlR1C1)
        Case Else
          txt_address = "Wrong address type selected. 1,2 available"
        End Select
      get_cell_address_by_name = txt_address
    End Function
    
    'перед запуском нужно убедиться, что в книге есть диапазон с названием, 
    'адрес которого мы хотим получить, иначе будет ошибка
    Sub test_function() 'запустите эту программу, чтобы увидеть, как работает функция
      x = get_cell_address_by_name("MyValue", 2)
      MsgBox (x)
    End Sub

    Размеры ячейки

    Ширина и длина ячейки в VBA меняется, например, так:

    Sub change_size()
    Dim x, y As Integer
    Dim w, h As Double
    
    'получить координаты целевой ячейки
    x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
    y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
    
    'получить желаемую ширину и высоту ячейки
    w = ThisWorkbook.Sheets("Sheet1").Cells(6, 2).Value
    h = ThisWorkbook.Sheets("Sheet1").Cells(7, 2).Value
    
    'сменить высоту и ширину ячейки с координатами x,y
    ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight = h
    ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth = w
    
    
    End Sub

    Прочитать значения ширины и высоты ячеек можно двумя способами (однако результаты будут в разных единицах измерения). Если написать просто Cells(x,y).Width или Cells(x,y).Height, то будет получен результат в pt (привязка к размеру шрифта). 

    Sub get_size()
    Dim x, y As Integer
    'получить координаты ячейки, с которой мы будем работать
    x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
    y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
    
    'получить длину и ширину выбранной ячейки в тех же единицах измерения, в которых мы их задавали
    ThisWorkbook.Sheets("Sheet1").Cells(2, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth
    ThisWorkbook.Sheets("Sheet1").Cells(3, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight
    
    'получить длину и ширину с помощью свойств ячейки (только для чтения) в поинтах (pt)
    ThisWorkbook.Sheets("Sheet1").Cells(7, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Width
    ThisWorkbook.Sheets("Sheet1").Cells(8, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Height
    
    End Sub

    Скачать файл с примерами изменения и чтения размера ячеек

    Запуск макроса активацией ячейки

    Для запуска кода VBA при активации ячейки необходимо вставить в код листа нечто подобное:

    3 важных момента, чтобы это работало:

    1. Этот код должен быть вставлен в код листа (здесь контролируется диапазон D4)

    2-3. Программа, ответственная за запуск кода при выборе ячейки, должна называться Worksheet_SelectionChange и должна принимать значение переменной Target, относящейся к триггеру SelectionChange. Другие доступные триггеры можно посмотреть в правом верхнем углу (2).

    Скачать файл с базовым примером (как на картинке)

    Скачать файл с расширенным примером (код ниже)

    Option Explicit
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
            ' имеем в виду, что триггер SelectionChange будет запускать эту Sub после каждого клика мышью (после каждого клика будет проверяться:
              '1. количество выделенных ячеек и 
              '2. не пересекается ли выбранный диапазон с заданным в этой программе диапазоном.
            ' поэтому в эту программу не стоит без необходимости писать никаких других тяжелых операций
    
        If Selection.Count = 1 Then 'запускаем программу только если выбрано не более 1 ячейки
    
    
        'вариант модификации - брать адрес ячейки из другой ячейки:
        'Dim CellName as String
        'CellName = Activesheet.Cells(1,1).value 'брать текстовое имя контролируемой ячейки из A1 (должно быть в формате Буква столбца + номер строки)
        'If Not Intersect(Range(CellName), Target) Is Nothing Then
        'для работы этой модификации следующую строку надо закомментировать/удалить
    
    
    
            If Not Intersect(Range("D4"), Target) Is Nothing Then 
            'если заданный (D4) и выбранный диапазон пересекаются 
            '(пересечение диапазонов НЕ равно Nothing)
    
            'можно прописать диапазон из нескольких ячеек:
            'If Not Intersect(Range("D4:E10"), Target) Is Nothing Then
            'можно прописать несколько диапазонов:
            'If Not Intersect(Range("D4:E10"), Target) Is Nothing or Not Intersect(Range("A4:A10"), Target) Is Nothing Then
    
                Call program 'выполняем программу
            End If
        End If
    End Sub
    
    Sub program()
    
    MsgBox ("Program Is running") 'здесь пишем код того, что произойдёт при выборе нужной ячейки
    
    
    End Sub
    

    Как с помощью VBA в Excel можно получить координаты определенной ячейки?

    Как с помощью VBA получить значение с ячейки таблицы MS Word в переменую?
    Как с помощью VBA получить значение с ячейки таблицы MS Word в переменую. Range(x,y).

    Можно ли получить доступ к содержимому определенной ячейки стека по адресу?
    Здравствуйте, скажите пожалуйста, могу вывести по определенному адресу из стека, при этом не теряя.

    Получить значение последней записи ячейки определённого столбца VBA Excel
    Приветствую форумчани подскажите кто может как получить последнюю записть определёного столбца q.

    Можно ли с помощью формы в одной книге Excel вносить данные в ячейки двух книг?
    Можно ли с помощью формы в одной книге Excel вносить данные в ячейки двух книг?

    Как я понимаю, вопрос должен звучать так: ‘Как привязать объект к ячейке, т.е. как получить координаты ячейки в пикселях или других физ. величинах, а затем их использовать’?

    На этот вопрос я ответа не знаю: сложение ширин столбцов (так же как и высот строк), например, требуемого результата не даёт.

    Поступать нужно след. образом:

    1.Определить адрес ячейки Cells(k, m).Address.
    2.Пересчитать в циклах суммы Columns(i).Width и Rows(j).Height
    от i = 1 до i = k — 1 (аналогично For j = 1 To m — 1)
    3.X = СУММАi, Y = СУММАj,
    ширина и высота картинки — по размерам ячейки, если это необходимо:
    Picture.Width = Columns(m).Width, Picture.Height = Rows(k).Height

    ThisWorkbook.Sheets(‘Лист1’).Shapes.AddPicture name_of_File, _
    True, True, X, Y, cOLUMNS(nSTOLB).wIDTH, rOWS(nSTROK).hEIGHT

    Здесь (Columns(Nstolb).Width, Rows(Nstrok).Height) размер рисунка
    устанавливается равным размеру ячейки и соответственно, центрируется.
    Что-то не устраивает?

    Вот так всё работает. Правда. длинновато получилось

    Уважаемый, почему молчим? Погряз, решая задачу оптимизации?

    Молчание удивительно, поскольку то, что я второпях набросал,
    содержит несколько ошибок, что, конечно работоспособности коду не добавляет (типы объявленных переменных Long вместо Double,
    использование переменной ‘i’ вместо ‘j’ в цикле
    ‘For j = Nstolb To Nstolb1’).

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

    Убрано всё ‘лишнее’. Теперь код короткий, прозрачный и быстрый.

    Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

    Как программно определить фон определенной ячейки Excel?
    Как программно определить фон определенной ячейки Excel. Заранее спасибо.

    Как получить координаты определенной вкладки в QTabBar?
    Я хочу получить QRect определенной вкладки в QTabBar, то есть её координаты и ширину с высотой.

    Как извлечь текст примечания из определенной ячейки листа Excel?
    Приложение работает с документом Excel. Как извлечь текст примечания из определенной ячейки листа.

    Как получить при нажатии координаты определённой программы?
    Нажав мышкой где-то на другой windows программе, получить той программы x и y, не самого windows, а.

    Чтение и запись значения ячейки в VBA

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

    Обращение к конкретной ячейке

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

    Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

    • С помощью Range
    • С помощью Cells

    Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

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

    Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

    Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).

    Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

    Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

    Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

    Чтение значения из ячейки

    Есть 3 способа получения значения ячейки, каждый из которых имеет свои особенности:

    • Value2 — базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 — самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
    • Value — значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
    • Text — визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде «число месяц прописью год», то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде «#####» то Text вернет вам не само значение, а эти самые «решетки».

    По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

    Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат «14 марта 2001 г.». Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

    Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат «Денежный» с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

    При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка «Type mismatch». Как определить тип значения в ячейке, рассказано в следующей статье.

    Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

    Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

    Запись значения в ячейку

    Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

    Пример 8: Записать в ячейку A1 активного листа значение 123,45

    Все три строки запишут в A1 одно и то же значение.

    Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

    В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

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

    Объекты MS Excel

    Аргументы задают координаты интервала:

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

    Допустимо задание аргументов переменными, выражениями, свойствами или методами, представляющими объект Range — одну ячейку, одну строку или один столбец рабочего листа .

    • Если свойство Range применяется к объекту Range , то ссылка на интервал ячеек считается относительной и возвращается смещенный объект Range .

    Например, если выделен интервал C1:D5, то запись Selection.Range(«B2») возвратит ячейку D2.

    Свойство Cells

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

    Синтаксис object. Cells (RowIndex,ColumnIndex)

    • object — ссылка на объект. Ссылка необязательна. По умолчанию используется активный лист;
    • RowIndex — индекс строки;
    • ColumnIndex — индекс столбца.
    • В свойстве Cells индекс строки является первым аргументом, а индекс столбца — вторым аргументом, тогда как при задании адреса ячейки в стиле A1 сначала указывается столбец, а затем строка.
    • Понятие «индекс» ( Index, ColumnIndex, RowIndex ) всегда подразумевает целое число, целочисленную переменную или выражение, результат вычисления которого есть целое число или может быть преобразован в целое число.
    Свойство Offset

    Свойство Offset позволяет задавать ячейки или интервалы при помощи числа строк и колонок, которые отделяют нужную ячейку от исходной ячейки, т.е. указывая смещение относительно выбранной ячейки. Например, Range(«A5»).Offset(-2,1) возвращает ячейку B3.

    • object — ссылка на объект Range . Ссылка обязательна и определяет объект, относительно которого задается смещение;
    • RowOffset — смещение строки искомой ячейки относительно исходной ячейки;
    • ColumnOffset — смещение столбца искомой ячейки относительно исходной ячейки.

    Необязательные аргументы RowOffset и ColumnOffset — числовые выражения. Если какой-то аргумент не задан, то соответствующее смещение равно нулю.

    Например, если выделен интервал C1:D5, то запись Selection.Offset(2,1).Select выделяет интервал D3:E7.

    Метод Union и свойство Areas

    Метод Union используется для объединения двух и более объектов Range , заданных ссылками на непересекающиеся интервалы, в один объект Range .

    Синтаксис Object. Union (arg1,arg2. )

    • object — всегда объект Application . Ссылка необязательна;
    • arg1,arg2 — интервалы ячеек. Количество аргументов произвольно. Обязательно наличие хотя бы двух аргументов.

    Например, оператор Union (Range(«A1:C5»),Range(«B10:D12»)).Select выделяет несмежные интервалы A1:C5 и B10:D12.

    Свойство Areas выполняет обратное действие, разделяя объединенные интервалы на несколько объектов Range .

    • object — ссылка на объект Range , состоящий из нескольких интервалов;
    • index — номер интервала в объекте. Аргумент необязателен.
    Свойства Column и Row (R/O Integer)

    Свойства возвращают целое число, показывающее индекс первого столбца или первой строки соответственно для заданного объекта. Синтаксис свойств

    • object — обязательная ссылка на объект Range .

    Например, запись Range(«C5»).Column возвращает число 3, а запись Range(«C5»).Row возвращает число 5.

    Свойства Columns и Rows

    Свойство Columns (не путайте со свойством Column !) возвращает объект Range , представляющий колонку или коллекцию колонок в объекте, к которому это свойство было применено.

    • object — ссылка на объект. Указание необязательно, по умолчанию используется активный рабочий лист ;
    • index — индекс колонки в объекте.

    Например, запись Columns(1) возвращает колонку A активного рабочего листа , а запись Range(«C1:D5»).Columns(1) возвращает колонку C заданного интервала, а именно, ячейки C1:C5.

    • Если не указан индекс колонки, то возвращаются все колонки объекта в виде объекта Range .
    • Индекс колонки можно указывать числом или буквой, при этом буква заключается в кавычки. Ссылки Columns(2) и Columns(«B») указывают на одну и ту же колонку B.

    Свойство Rows (не путайте со свойством Row !) возвращает объект Range , представляющий строку или коллекцию строк в объекте, к которому это свойство было применено.

    • object — ссылка на объект. Указание необязательно, по умолчанию используется активный рабочий лист ;
    • index — индекс строки в объекте.
    • Если не указан номер строки, то возвращаются все строки объекта в виде объекта Range .

    Например, оператор nr=Selection.Rows(Selection.Rows.Count).Row позволяет получить номер последней строки в выделенном интервале ячеек.

    Свойство CurrentRegion

    Свойство CurrentRegion определяет объект Range , который соответствует интервалу ячеек, включающему заданную ячейку.

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

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

    Vba excel координаты ячейки

    По материалам эхоконференции RU.EXCEL (за июль-сентябрь 1997 года) Collected by Kirienko Andrew, 2:5020/239.21@fidonet

    Cодержание

    Как определить последнюю запись в таблице Excel?

    Q: Необходимо найти последнюю запись вэлектронной таблице. Какой функцией VB это можно было бы организовать.

    A: Первое что вспомнилось: Application.SpecialCells(xlLastCell)

    Как отменить выделение диапазона ячеек?

    Q: Как управиться с такой болячкой:

    После прекращения работы макроса диапазон остается выделенным. Как это выделение убрать?

    A: Попробуй вот как: Selection.Cells(1).Select Фокус ввода попадёт после этого на первую ячейку ранее выделенного диапазона.

    Как из макроса Excel программно создать таблицу Access?

    Q: Подскажите, пожалуйста, как из под Excel программно создать таблицу Access

    A: Вот фрагмент кода, который создаёт таблицу «BalanceShifr» базе данных MS Access:

    Нint: Не забудьте выставить в Excel ссылки на объекты DAO!
    [VBA] Tools/References/Available References/ [x] MicroSoft DAO. Library ‘ Function CreateTable ‘ Create temporary table «BalanceShifr» into temporary database

    Public Function CreateTable(ByVal dbTemp As Database) As Boolean

    Dim tdfTemр As TableDef
    Dim idx As Index
    Dim fld As Field

    On Error GoTo errhandle

    CreateTable = True
    ‘ CREATE TABLE «BalanceShifr»
    Set tdfTemp = dbTemp.CreateTableDef(«BalanceShifr»)
    Set fld = tdfTemp.CreateField(«ConditionId», dbLong)
    fld.Required = True
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«Account», dbText, 4)
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«SubAcc», dbText, 4)
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«Shifr», dbLong)
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«Date», dbDate)
    fld.Required = True
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«SaldoDeb», dbCurrency)
    tdfTemp.Fields.Append fld
    Set fld = tdfTemp.CreateField(«SaldoKr», dbCurrency)
    tdfTemp.Fields.Append fld
    dbTemp.TableDefs.Append tdfTemp

    ‘ CREATE INDEX «BalanceShifr»
    Set tdfTemp = dbTemp.TableDefs(«BalanceShifr»)
    Set idx = tdfTemp.CreateIndex(«ForeignKey»)
    Set fld = idx.CreateField(«ConditionId»)
    idx.Fields.Append fld
    tdfTemp.Indexes.Append idx
    Exit Function

    errHandle:
    MsgBox «Table creating error!», vbExclamation, «Error»
    CreateTable = False
    End Function

    Удаление листов в зависимости от даты

    Q: Как удалить рабочие листы листов в зависимости от даты?

    A: Вот код функции на Excel VBA, который решает данную проблему:

    ‘ Function DelSheetByDate
    ‘ Удаляет рабочий лист sSheetName в активной рабочей книге,
    ‘ если дата dDelDate уже наступила
    ‘ В случае успеха возвращает True, иначе — False

    Public Function DelSheetByDate(sSheetName As String, _
    dDelDate As Date) As Boolean
    On Error GoTo errHandle

    DelSheetByDate = False
    ‘ Проверка даты
    If dDelDate

    Подавление «горячих» клавиш.

    Q:Как подавить доступ по «горячим» клавишам, имеется ввиду предопределенные в Excel клавиши типа Ctrl-O и т.д.?

    A:Вот малюсенький исходник на Excel VB, который решает такую проблему. 🙂

    Public Sub Auto_Open()
    ‘ Overrride standard accelerators
    With Application
    .OnKey «^o», «Dummy»
    .OnKey «^s», «NewAction»
    .OnKey «^р», «» ‘ Kill hotkey !
    End With
    End Sub

    ‘ ——
    Public Sub Dummy()
    MsgBox «This hotkey redefined!»
    End Sub

    ‘ ——
    Public Sub NewAction()
    SendKeys «^n» ‘ Press + for create new file
    ‘ instead of + !
    End Sub

    Hint: Отлажено в MS Excel ’97 !

    Подсказки к Toolbar

    Q: Как сделать к «само нарисованным» кнопочкам на Toolbar’е подсказки? (Ну, те, что после 2-х секунд молчания мышки появляются)

    A: Сделать можно вот как: (Пример реализации на Excel’97 VBA )

    ‘ Cоздаем тулбар
    Рublic Sub InitToolBar()
    Dim cmdbarSM As CommandBar
    Dim ctlNewBtn As CommandBarButton

    Set cmdbarSM = CommandBars.Add(Name:=»MyToolBar»,
    Position:=msoBarFloating, _
    temporary:=True)
    With cmdbarSM
    ‘ 1) Добавляем кнопку
    Set ctlNewBtn = .Controls.Add(Type:=msoControlButton)
    With ctlNewBtn
    . FaceId = 26
    .OnAction = «OnButton1_Click»
    .TooltipText = «My tooltip message!»
    End With
    ‘ 2) Добавляем ещё кнопку
    Set ctlNewBtn = .Controls.Add(Type:=msoControlButton)
    With ctlNewBtn
    .FaceId = 44
    .OnAction = «OnButton2_Click»
    .TooltipText = «Another tooltip message!»
    End With
    .Visible = True
    End With
    End Sub

    Hint: На VBA для Excel’95 это делается несколько иначе!

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

    Q: Как в макросе узнать и использовать текущее положение курсора (не мышиного, естественно)?

    A: Очень просто! 🙂
    ActiveCell.Row и ActiveCell.Column — покажут координаты активной ячейки.

    Подсчет комментариев на рабочем листе

    Q: Как узнать есть ли хоть один Notes (комментарий) в рабочем листе, кроме как перебором по всем ячейкам? . Без этого не работает:

    A: В Excel’97 эта проблема может быть решена вот как:

    ‘ Function IsCommentsPresent
    ‘ Возвращает TRUE, если на активном рабочем листе имеется хотя бы
    ‘ одна ячейка с комментарием, иначе возвращает FALSE

    Public Function IsCommentsPresent() As Boolean
    IsCommentsPresent = ( ActiveSheet.Comments.Count <> 0 )
    End Function

    Подсказки к Toolbar (Excel’95)

    Q: Как сделать свой собственный Toolbar с tooltip’ами на кнопках в Excel’95?

    A: Вот фрагмент кода для Excel’95, который создаёт toolbar с одной кнопкой с пользовательским tooltiр’ом. Нажатие кнопки приводит к выполнению макроса NothingToDo() .


    ‘ This example creates a new toolbar, adds the Camera button
    ‘ (button index number 228) to it, and then displays the new toolbar.

    Public Sub CreateMyToolBar()
    Dim myNewToolbar As Toolbar
    On Error GoTo errHandle:

    Set myNewToolbar = Toolbars.Add(Name:=»My New Toolbar»)
    With myNewToolbar
    .ToolbarButtons.Add Button:=228, StatusBar:=»Statusbar help string»
    .Visible = True
    With .ToolbarButtons(1)
    .OnAction = «NothingToDo»
    .Name = «My custom tooltiр text!»
    End With
    End With
    Exit Sub
    errНandle:
    MsgBox «Error number » & Err & «: » & Error(Err)
    End Sub


    ‘ Toolbar button on action code

    Рublic Sub NothingToDo()
    MsgBox «Nothing to do!», vbInformation, «Macro running»
    End Sub

    Нint: В Excel’97 этот код тоже работает!

    Запуск Excel с поиском ячейки

    Q: Как запустить Excel, чтобы оказаться на ячейке содержимое которой известно заранее?

    A:Вот как я решил бы твою задачу:

    ‘ Sub GotoFixedCell:
    ‘ Делает активной ячейку, содержащую значение vVariant на
    ‘ рабочем листе sSheetName в активной рабочей книге.

    ‘ Note: Содержимое ячеек интерпретируется как ‘значение’!

    Public Sub GotoFixedCell(vValue As Variant, sSheetName As String)
    Dim c As Range, cStart As Range, cForFind As Range
    Dim i As Integer

    On Error GoTo errhandle:

    Set cForFind = Worksheets(sSheetName).Cells ‘ Диапазон поиска
    With cForFind
    Set c = .Find(What:=vValue, After:=ActiveCell, LookIn:=xlValues, _
    LookAt:= xlРart, SearchOrder:=xlByRows,_
    SearchDirection:=xlNext, MatchCase:=False)
    Set cStart = c
    While Not c Is Nothing
    Set c = .FindNext(c)
    If c.Address = cStart.Address Then
    c.Select
    Exit Sub
    End If
    Wend
    End With
    Exit Sub
    errНandle:
    MsgBox Err.Descriрtion, vbExclamation, «Error #» & Err.Number
    End Sub

    Нint: Достаточно выполнить этот код из макроса Auto_Oрen()!

    Нint: Протестировано и отлажено в Excel’97.

    ThisWorkBook или ActiveWorkBook?

    Q: На листе модулей открытой рабочей книги присутствует процедура, которая копирует некий лист из другой (не активной) рабочей книги. В этом листе в некоторых ячейках находятся определенные пользователем формулы. Процедура работает без проблем.
    Из workbook, содержащей эту процедуру, я делаю надстройку (.xla) и подключаю ее к Excel 95. При вызове вышеописанной процедуры она выдает сообщение:
    Run time error 424 object required
    Kак можно избежать это сообщение?

    A:Вот что я тебе посоветую:
    Посмотри ещё разок код модулей рабочей книги и исправь все ссылки вида ActiveWorkbook.WorkSheets(«.. на ссылки вида ThisWorkBook.WorkSheets(«..

    Дело в том, что когда выполняется код надстройки активной книгой в Excel’е является _не_ сама надстройка! Конструкция ThisWorkbook позволяет сослаться на книгу, в которой в настоящий момент выполняется код Excel VBA.

    Нint: Это общий принцип создание надстроек Excel!

    Как задать имя листу, который будет вставлен?

    Q:Хочy через Excel VBA задать имя листу, который будет вставлен. Но у команды Sheets.Add нет такого параметра ! Как бороться?

    A: Очень просто.

    ‘ Sub CreateSheet
    ‘ Вставляет активную рабочую книгу в рабочий лист с именем sSName.
    ‘ Note: Если параметр bVisible имеет значение False, этот лист становится скрытым.

    Рublic Sub CreateSheet(sSName As String, bVisible As Boolean)
    Dim wsNewSheet As WorkSheet

    On Error GoTo errНandle

    Set wsNewSheet = ActiveWorkBook.Worksheets.Add
    With wsNewSheet
    .Name = sSName
    .Visible = bVisible
    End With
    Exit Sub
    errНandle:
    MsgBox Err.Descriрtion, vbExclamation, «Error #» & Err.Number
    End Sub

    Как проверить существует ли лист?

    Q: А как проверить существует ли лист?

    A: Я бы поступил вот как:

    ‘ Function IsWorkSheetExist
    ‘ Проверяет, имеется ли в активной рабочей книге лист с именем sSName.
    ‘ В случае успеха возвращает True, иначе — False

    Рublic Function IsWorkSheetExist(sSName As String) As Boolean
    Dim c As Object

    On Error GoTo errНandle:
    Set c = sheets(sName)
    ‘ Альтернативный вариант :
    Worksheets(sSName).Cells(1, 1) = Worksheets(sSName).Cells(1, 1)
    IsWorkSheetExist = True
    Exit Function
    errНandle:
    IsWorkSheetExist = False
    End Function

    Нint: Отлажено и протестировано в Excel’97.

    Как обратиться к ячейке по ее имени?

    Q: Как обратиться к ячейки по ее имени? Т.е. есть Лист1 и в нем ячейки с именем Дебет и Кредит. Хочy подсчитать Дебет-Кредит средствами Excel VBA. Попробовал Range(Дебет)-Range(Кредит), ругается, что не описаны переменные.

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

    ‘ Function ValueOfNamedCell
    ‘ Возвращает значение ячейки с именем sCellName. в активной рабочей книге.
    ‘ Note: Если ячейка с именем sCellName не существует — функцией возвращается
    ‘ значение Emрty.

    Рublic Function ValueOfNamedCell(sCellName As String) As Variant
    On Error GoTo errНandle
    ValueOfNamedCell = ActiveWorkbook.Names(sCellName).RefersToRange.Value
    Exit Function
    errНandle:
    ValueOfNamedCell = Emрty
    End Function

    Нint: Отлажено и протестировано в Excel’97.

    Можно ли из программы на Visual Basic создать рабочую книгу Excel?

    Q: Можно ли из программы на Visual Basic создать рабочую книгу Excel?

    Пример того, как из Visual Basic’a через OLE запустить Excel, и создать рабочую книгу.

    ‘ CreateXlBook
    ‘ Вызывает MS Excel, создает рабочую книгу с именем sWbName с одним
    ‘ единственным рабочим листом. Рабочая книга будет сохранена в каталоге
    ‘ sDirName. В случае успеха возвращает True, в противном случае — False.

    Public Function CreateXlBook(sWbName As String, sDirName) As Boolean

    ‘ MS Excel hidden instance
    Dim objXLApp As Object
    Dim objWbNewBook As Object

    Set objXLApp = CreateObject(«Excel.Application»)
    If objXLApp Is Nothing Then Exit Function

    ‘ В новой рабочей книге создавать только один рабочий лист
    objXLApp.SheetsInNewWorkbook = 1

    Set objWbNewBook = objXLApp.Workbooks.Add
    If objWbNewBook Is Nothing Then Exit Function

    ‘ Сохраняем книгу
    If vbNullString = Dir(sDirName, vbDirectory) Then Exit Function

    objWbNewBook.SaveAs (sDirName + «» + sWbName + «.xls»)
    CreateXlBook = True

    ‘ Освобождение памяти
    Set objWbNewBook = Nothing
    objXLApp.Quit
    Set objXLApp = Nothing
    CreateXlBook = True

    Hint: Tested and approved with MS Visual Basic 4.0 Enterprise Edition

    Вопрос 19. VBA. Адресация ячеек в Excel. Ссылка на одиночную ячейку.

    Адресация ячеек в экселе.

    в эксель ячейка строка столбец и диапазон ячеек рассматривается как один обьект Range иногда для обозначения ячейки используется cells для ссылки используется два формата. формат а1-обычный. ссылка состояит из имени столбца и номера строки, например д4

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

    R1 и C1 в данном формате R задает номер строки C номер столбца, ссылка является абсотной. для указания относительной ссылки, задается смещение по отношению к активной ячейке, смещение указывается в квадратных скобках, знак указывает направление смещения.

    Ссылка на одиночную ячейку имеет вид [ обьект.] Range

    например workSheets(лист1) . Range(» A7″)=34

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

    например, для ввода числа 34 неоходима команда sheets(1). cells(7,1). Value=34

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

    для этого напишем процедуру с неявным обьявлением переменных где j- номер строки i-номер столбца.

    Операторы, выражения и операции

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

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

    1.безальтернативную-IF условие THEN

    2 альтернативную -IF условие ELSE

    Если условие принимает значение истина, то выполняется команды оператор 1

    если условие принимает значение лож, то выполняются команды оператор2

    Вопрос №20 VBA. Условный оператор. Примеры.

    Вопрос №21. VBA. Циклы. Примеры.

    Операторы циклов.
    цикл со счетчиком
    For Счётчик цикла=НачальноеЗначение

    To
    КонечноеЗначение [Step Шаг]

    Операторы
    [Exit For]
    Next [счетчик цикла]

    Цикл-это группа операторов, которые прогрмамма многократно выполняет

    В вба существует два основных типов цикла:
    -циклы со счетчиком
    -циклы с условием

    Step(шаг)-число, задающее шаг цикла,т.е. значение на которое увеличивается или уменьшается значение счетчика на каждом шаге. это число может быть отрицательным(в этом случае шаг будет уменьшаться), если слово step отсутствует, то значение шага равно 1.
    Exit For-оператор досрочного выхода из цикла необязательный
    Next-окончание цикла

    Пример 1. Просуммировать четные числа натурального ряда до50 включительно, сумму плместить в ячейку рабочего листа excel

    Sub sum()
    Dim f As Integer, sum As Integer sum=0
    For f=2 To 50 Step 2
    sum=sum+f
    Next
    Range(«A1»).Value=sum
    End sub

    Главной особенностью циклов с условием является условие, которое может принимать значение истины или лжи.
    В вба есть 2 основных типа циклов с условием:
    -Do While. Loop (цикл с предусловием)
    -Do Until..Loop (цикл с постусловием)

    Цикл с предусловием
    Do While/Until выражение
    Операторы
    [Exit do]
    Loop
    Цикл с постусловием
    Вo
    операторы
    [Exit Do]
    Loop While/Until выражение

    В первом случае условие задается в операторе начала цикла, во втором — в операторе конца цикла

    Do, Loop— ключевые слова, обозначающие начало и конец цикла
    While, Until-ключевые слова определяющие тип цикла

    Цикл Do While выполняется до тех пор, пока условие имеет значение истинf
    Цикл Do Until выполняется до тех пор, пока условие имеет значение ложь

    Exit do-принудительный выход из цикла

    Пример 2. Написать программу, суммирующую на рабочем листе Excel. Выпуск продукции значения ежедневных прибылей из столбца D и помещающую результат в отдельную ячейку с поясняющей надписью, как показано на рисунке.

    Понравилась статья? Поделить с друзьями:
  • Vba excel конструкция for
  • Vba excel константы цвета
  • Vba excel конец файла
  • Vba excel конец таблицы
  • Vba excel комментарии в коде