Skip to content
При написании формулы Excel знак $ в ссылке на ячейку сбивает с толку многих пользователей. Но объяснение очень простое: это всего лишь способ ее зафиксировать. Знак доллара в данном случае служит только одной цели — он указывает, следует ли изменять ссылку при копировании. И это короткое руководство предоставляет полную информацию о том, какими способами можно закрепить адрес ячейки, чтобы он не менялся при копировании формулы.
Если вы создаете формулу только для одной клетки вашей таблицы Excel, то проблема как зафиксировать ячейку вас не волнует. А вот если её нужно копировать или перемещать по таблице, то здесь-то и скрываются подводные камни. Чтобы не сломать расчеты, некоторые ячейки следует зафиксировать в формулах, чтобы их адреса уже не менялись.
Как упоминалось ранее, относительные ссылки на ячейки являются основными по умолчанию для любой формулы, созданной в Excel. Но их главная особенность — изменение при копировании и перемещении. Во многих же случаях необходимо зафиксировать адрес ячейки в формуле, чтобы не потерять эту ссылку при изменении таблицы. Ниже мы рассмотрим следующие способы:
- Как зафиксировать ячейку вручную.
- Использование функциональной клавиши.
- Выборочная фиксация по строке или столбцу.
- Закрепите адрес ячейки при помощи имени.
Чтобы предотвратить изменение ссылок на ячейку, строку или столбец, используют абсолютную адресацию , которая отличается тем, что перед координатой строки или столбца ставится знак доллара $.
Поясним на простом примере.
=A1*B1
Здесь используются относительные ссылки. Если переместить это выражение на 2 ячейки вниз и 2 вправо, то мы увидим уже
=C3*D3
На 2 позиции изменилась буква столбца и на 2 единицы – номер строки.
Если в ячейке A1 у нас записана информация, которую нам нужно использовать во многих клетках нашей таблицы (например, курс доллара, размер скидки и т.п.), то желательно зафиксировать ее, чтобы ссылка на ячейку A1 никогда не «сломалась»:
=$A$1*B1
В результате, если мы повторим предыдущую операцию, то получим в результате формулу
=$A$1*D3
Ссылка на A1 теперь не относительная, а абсолютная. Более подробно об относительных и абсолютных ссылках вы можете прочитать в этой статье на нашем блоге.
В этом и состоит решение проблемы фиксации ячейки — нужно превратить ссылку в абсолютную.
А теперь рассмотрим подробнее, какими способами можно закрепить ячейку, строку или столбец в формуле.
Как вручную зафиксировать ячейку в формуле.
Предположим, у нас уже имеется формула в одной из клеток нашей таблицы.
В ячейке D2 подсчитаем сумму скидки:
=B2*F2
Записывать подобный расчет для каждого товара — хлопотно и нерационально. Хочется скопировать его из C2 вниз по столбцу. Но при этом ссылка на F2 не должна измениться. Иначе наши расчеты окажутся неверными.
Поэтому ссылку на ячейку F2 в нашем расчёте нужно каким-то образом зафиксировать, чтобы предотвратить ее изменение. Для этого мы при помощи знаков $ превратим ее из относительной в абсолютную.
Самый простой выход – отредактировать C2, для чего можно дважды кликнуть по ней мышкой, либо установить в нее курсор и нажать функциональную клавишу F2.
Далее при помощи курсора и клавиатуры вставляем в нужные места знак $ и нажимаем Enter. Получаем:
=B2*$F$2
Другими словами, использование $ в ссылках на ячейки делает их фиксированными и позволяет перемещать формулу в Excel без их изменения. Вот теперь можно и копировать, как показано на скриншоте ниже.
Фиксируем ячейку при помощи функциональной клавиши.
Вновь открываем ячейку для редактирования и устанавливаем курсор на координаты нужной нам ячейки.
Нажимаем функциональную клавишу F4 для переключения вида ссылки.
Неоднократно нажимая F4, вы будете переключать ссылки в следующем порядке:
Для того, чтобы зафиксировать ссылку на ячейку, достаточно нажать F4 всего один раз.
Думаю, это несколько удобнее, чем вводить знак доллара вручную.
Частичная фиксация ячейки по строке или по столбцу.
Часто случается, что необходимо зафиксировать только строку или столбец в адресе ячейки. Для этого используются смешанные ссылки.
Вы можете использовать два вида смешанных ссылок:
- Строка фиксируется, а столбец изменяется при копировании.
- Столбец блокируется, а строка изменяется при копировании.
Смешанная ссылка содержит одну относительную и одну абсолютную координату, например $A1 или A$1. Проще говоря, знак доллара используется только единожды.
Получить такую ссылку вы можете любым из описанных выше способов. Либо вручную выбираете место и устанавливаете знак $, либо нажимаете F4 не один, а два или три раза. Вы это видите на рисунке чуть выше.
В результате мы имеем следующее:
В таблице ниже показано, как может быть закреплена ссылка на ячейку.
Зафиксированная ячейка | Что происходит при копировании или перемещении | Клавиши на клавиатуре |
$A$1 | Столбец и строка не меняются. | Нажмите F4. |
A$1 | Строка не меняется. | Дважды нажмите F4. |
$A1 | Столбец не изменяется. | Трижды нажмите F4. |
Рассмотрим пример, когда нужно закрепить только одну координату: либо столбец, либо строку. И все это в одной формуле.
Предположим, нужно рассчитать цены продажи при разных уровнях наценки. Для этого нужно умножить колонку с ценами (столбец В) на 3 возможных значения наценки (записаны в C2, D2 и E2). Вводим выражение для расчёта в C3, а затем копируем его сначала вправо по строке, а затем вниз:
=$B3*(1+C$2)
Так вы можете использовать силу смешанной ссылки для расчета всех возможных цен с помощью всего одной формулы.
В первом множителе мы зафиксировали в координатах ячейки адрес столбца. Поэтому при копировании вправо по строке адрес $B3 не изменится: ведь строка по-прежнему третья, а буква столбца у нас зафиксирована и меняться не может.
А вот во втором множителе знак доллара мы поставили перед номером строки. Поэтому при копировании вправо координаты столбца изменятся и вместо C$2 мы получим D$2. В результате в D3 у нас получится выражение:
=$B3*(1+D$2)
А когда будем копировать вниз по столбцу, всё будет наоборот: $B3 изменится на $B4, $B5 и т.д. А вот D$2 не изменится, так как «заморожена» строка. В результате в С4 получим:
=$B4*(1+C$2)
Самый приятный момент заключается в том, что формулу мы записываем только один раз, а потом просто копируем ее. Одним махом заполняем всю таблицу и экономим очень много времени.
И если ваши наценки вдруг изменятся, просто поменяйте числа в C2:E2, и проблема пересчёта будет решена почти мгновенно.
В случае, если вам нужно поменять относительные ссылки на абсолютные (или наоборот) в группе ячеек, в целом столбце или большой области, то описанный выше способ ручной корректировки может стать весьма обременительным и скучным занятием. При помощи специального инструмента преобразования формул вы можете выделить целый диапазон, а затем преобразовать формулы в этих ячейках в абсолютные либо в относительные ссылки. Или же можно просто заменить все формулы их значениями одним кликом мышки.
Как зафиксировать ячейку, дав ей имя.
Отдельную ячейку или целый диапазон ячеек в Excel также можно определить по имени. Для этого вы просто выбираете нужную ячейку, вводите желаемое имя в поле Имя и нажимаете клавишу Enter.
Вернёмся к нашему примеру со скидками. Давайте попробуем ячейке F2 присвоить собственное имя, чтобы затем использовать его в расчетах.
Установите курсор в F2, а затем присвойте этому адресу имя, как это показано на рисунке выше. При этом можно использовать только буквы, цифры и нижнее подчёркивание, которым можно заменить пробел. Знаки препинания и служебные символы не допускаются. Не будем мудрствовать и назовём его «скидка».
Это имя теперь вы можете использовать в формулах вашей рабочей книги. Это своего рода абсолютная ссылка, поскольку за ним навсегда закрепляются координаты определенной ячейки или диапазона.
Таким образом, ячейку F2 мы ранее фиксировали при помощи абсолютной ссылки и знака $ —
=B2*$F$2
а теперь то же самое делаем при помощи её имени «скидка»:
=B2*скидка
Ячейка так же надёжно зафиксирована, а формула же при этом становится более понятной и читаемой.
Эксель понимает, что если в формуле встречается имя «скидка», то вместо него нужно использовать содержимое ячейки F2.
Вот какими способами можно зафиксировать ячейку в формуле в Excel. Благодарю вас за чтение и надеюсь, что эта информация была полезной!
Содержание
- Excel как сохранить переменную
- VBA Excel. Переменная диапазона ячеек (As Range)
- Присвоение диапазона ячеек переменной
- Адресация ячеек в диапазоне
- Что такое переменная и как правильно её объявить?
Excel как сохранить переменную
_Boroda_, не как раз IP разные))) извиняюсь что так получилось, и почту я тоже не помню. Я понял, я буду писать только с одного аккаунта. Есть вариант еще узнать почту, если найду этот акк можно удалить, сегодня вечером отпишусь
_Boroda_, нашел пароль от почты, можно удалить Головастика
Спасибо большое вам за помощь, да работает отлично, учусь потихоньку благодаря вашему сайту ))
для себя многому уже научился, к сожалению времени и знаний нет другим людям помогать пока
_Boroda_, не как раз IP разные))) извиняюсь что так получилось, и почту я тоже не помню. Я понял, я буду писать только с одного аккаунта. Есть вариант еще узнать почту, если найду этот акк можно удалить, сегодня вечером отпишусь
_Boroda_, нашел пароль от почты, можно удалить Головастика
Спасибо большое вам за помощь, да работает отлично, учусь потихоньку благодаря вашему сайту ))
для себя многому уже научился, к сожалению времени и знаний нет другим людям помогать пока Головастик
Сообщение _Boroda_, не как раз IP разные))) извиняюсь что так получилось, и почту я тоже не помню. Я понял, я буду писать только с одного аккаунта. Есть вариант еще узнать почту, если найду этот акк можно удалить, сегодня вечером отпишусь
_Boroda_, нашел пароль от почты, можно удалить Головастика
Спасибо большое вам за помощь, да работает отлично, учусь потихоньку благодаря вашему сайту ))
для себя многому уже научился, к сожалению времени и знаний нет другим людям помогать пока Автор — Головастик
Дата добавления — 02.11.2018 в 09:42
Источник
VBA Excel. Переменная диапазона ячеек (As Range)
Присвоение диапазона ячеек объектной переменной в VBA Excel. Адресация ячеек в переменной диапазона и работа с ними. Определение размера диапазона. Примеры.
Присвоение диапазона ячеек переменной
Чтобы переменной присвоить диапазон ячеек, она должна быть объявлена как Variant, Object или Range:
Чтобы было понятнее, для чего переменная создана, объявляйте ее как Range.
Присваивается переменной диапазон ячеек с помощью оператора Set:
В выражении Range(Cells(3, 4), Cells(26, 18)) вместо чисел можно использовать переменные.
Для присвоения диапазона ячеек переменной можно использовать встроенное диалоговое окно Application.InputBox, которое позволяет выбрать диапазон на рабочем листе для дальнейшей работы с ним.
Адресация ячеек в диапазоне
К ячейкам присвоенного диапазона можно обращаться по их индексам, а также по индексам строк и столбцов, на пересечении которых они находятся.
Индексация ячеек в присвоенном диапазоне осуществляется слева направо и сверху вниз, например, для диапазона размерностью 5х5:
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
Индексация строк и столбцов начинается с левой верхней ячейки. В диапазоне этого примера содержится 5 строк и 5 столбцов. На пересечении 2 строки и 4 столбца находится ячейка с индексом 9. Обратиться к ней можно так:
Источник
Что такое переменная и как правильно её объявить?
Переменная — это некий контейнер, в котором VBA хранит данные. Если подробнее, то это как коробочка, в которую Вы можете положить что-то на хранение, а затем по мере необходимости достать. Только в данном случае в переменной мы храним число, строку или иные данные, которые затем можем извлекать из неё и использовать в коде по мере необходимости.
Для чего нужна переменная? Чтобы хранить значение и применить его позже в любой момент. Например, в ячейке А1 записана сумма, а нажатием на кнопку запускается обновление отчета. После обновления отчета сумма в А1 изменится. Необходимо сверить сумму до обновления с суммой после и в зависимости от этого сделать какое-либо действие. Переменная как раз позволит запомнить значение ячейки до того, как она обновится и использовать именно это значение после обновления.
Требования к переменным:
В качестве имен переменных можно использовать символы букв и числа, но первой в имени переменной всегда должна быть буква. Не допускается использование точки, запятой, пробела и иных знаков препинания, кроме нижнего подчеркивания. Длина имени не должна превышать 254 символов. Так же нельзя использовать в качестве имен для переменных зарезервированные константы редактора VBA(например Sub, Msgbox, ubound, Date и т.п.). Так же для переменных неважен регистр букв.
Теперь рассмотрим основные декларированные в VBA типы данных, которые можно хранить в переменных:
Тип данных | Занимает байт в памяти | Пределы значений |
---|---|---|
Byte | 1 | Целые числа от 0 до 255 |
Boolean | 2 | True или False |
Integer | 2 | Целые числа от (-32768) до 32767 |
Long | 4 | Целые числа от (-2147483648) до 2147483647 |
Single | 4 | От (–3.402823Е+38) до (–1.401298Е-45) и от 1.401298Е-45 до 3.402823Е+38 |
Double | 8 | От ±1.79769313486232Е+308 до ±4.94065645841247Е-324 |
Decimal | 12 | От ±79228162514264337593543950335 без десятичных знаков до ±7,9228162514264337593543950335 с 28-ю знаками после запятой |
Currency | 8 | От (–922337203685477.5808) до 922337203685477.5807 |
Date | 8 | От 01.01.100 до 31.12.9999(не надо путать с датами в Excel — 01.01.1900 до 31.12.9999) |
String | 10(+длина строки) | От 0 до 65400 символов для фиксированных строк и чуть более 2 млрд. для строк переменной длины |
Object | 4 | Любой объект |
Array | Определяется кол-вом и размером элементов | — |
Variant | от 16-ти | Любой из встроенных типов данных |
Как видно из таблицы больше всего памяти занимает Variant . Притом это если он хранит числовые данные. Если же такая переменная будет хранить данные строкового типа(текст), то размер занимаемой памяти будет измеряться уже начиная с 22 байт + длина строки, хранящейся в переменной. Чем больше памяти занимает переменная, тем дольше она инициализируется в памяти и тем медленнее код будет выполняться. Вот поэтому и важно явно задавать тип данных, хранимых в переменной — это называется объявить переменную.
Тип данных Decimal больше не используется, поэтому объявить переменную данного типа в VBA не получится — подобная попытка приведет к синтаксической ошибке. Для работы с данными типа Decimal переменную необходимо изначально объявить как Variant или вообще без типа (например Dim a), т.к. тип данных Variant используется в VBA по умолчанию и принимает любой тип данных.
Так же переменным можно назначать и другие типы данных, которых нет в таблице выше — это типы, которые поддерживаются объектной моделью приложений, к которым «подключен» VBA. Например, если зайти в VBA из Excel, то библиотека типов объектной модели Excel подключена по умолчанию и для переменных становится доступно множество типов этой объектной модели. Многие из них знакомы всем: Workbook, Worksheet, Range, Cells, Chart и т.д. Т.е. это книги, листы, ячейки, диаграммы. Типов много, почти на каждый объект и коллекцию. Рассматривать здесь все бессмысленно. Могу лишь привести пару строк кода:
Dim rRange as Range ‘назначили переменной тип ячейка/диапазон Set rRange = Range(«A1») ‘присвоили ссылку на ячейку A1 текущего листа
Про объявление переменных подробно написано чуть ниже.
А более подробно про обращение к диапазонам из VBA можно почитать в этой статье: Как обратиться к диапазону из VBA
как объявлять переменные
На самом деле все очень просто. Это делается при помощи операторов области действия: Dim , Public , Static и оператора присвоения типа As . Самый распространенный оператор — Dim . Его и возьмем в качестве примера. Синтаксис объявления:
[оператор области действия] Имя_переменной As [тип данных]
Очень частая ошибка при объявлении переменных, совершаемая начинающими изучать VBA:
Dim MyVar1, MyVar2, MyVar3 As Integer
Вроде бы исходя из логики всем переменным присвоен тип данных Integer . Но это ошибочное суждение. Тип Integer присвоен только последней переменной, к которой он «привязан» оператором As — MyVar3. Все остальные переменные имеют тип данных Variant . Т.е. если Вы не задаете каждой переменной свой тип хранимых данных явно(т.е. не указываете для неё тип данных через As), то VBA сам присваивает для такой переменной тип данных Variant , т.к. он может хранить любой тип данных. А вот так выглядит правильное присвоение типа данных:
Dim MyVar1 As Integer, MyVar2 As Integer, MyVar3 As Integer
Это и есть объявление переменных. Т.е. сначала идет оператор области действия ( Dim , Public , Static ), сразу за ним имя переменной, затем оператор As и тип.
Но это не все. Некоторые типы переменным можно присваивать еще короче — даже без оператора As :
Dim MyVar1%, MyVar2%, MyVar3%
Всего шесть типов, которые можно объявить подобным методом:
! — Single
# — Double
$ — String
% — Integer
& — Long
@ — Currency
На что стоит обратить внимание, при объявлении переменных подобным образом: между именем переменной и знаком типа не должно быть пробелов.
Я лично в большинстве статей предпочитаю использовать первый метод, т.е. полное указание типа. Это читабельнее и понятнее. В каких-то проектах могу использовать краткое указание, в общих(разработка в команде) — полное. В своих кодах Вы вправе использовать удобный Вам метод — ошибки не будет.
Теперь разберемся с операторами области действия( Dim , Public и Static ):
- Dim — данный оператор используется для объявления переменной, значение которой будет храниться только в той процедуре, внутри которой данная переменная объявлена. Во время запуска процедуры такая переменная инициализируется в памяти и использовать её значение можно внутри только этой процедуры, а по завершению процедуры переменная выгружается из памяти(обнуляется) и данные по ней теряются. Переменную, объявленную подобным образом еще называют локальной переменной. Однако с помощью данного оператора можно объявить переменную, которая будет доступна в любой процедуре модуля. Необходимо объявить переменную вне процедуры — в области объявлений(читать как первой строкой в модуле, после строк объявлений типа — Option Explicit ). Тогда значение переменной будет доступно в любой процедуре лишь того модуля, в котором данная переменная была объявлена. Такие переменные называются переменными уровня модуля. Также для использования переменных во всех процедурах и функциях одного конкретного модуля можно использовать оператор Private . Но он в данном случае ничем не отличается от Dim , а пишется длиннее 🙂 Плюс, Private нельзя использовать внутри процедуры или функции(только в области объявлений), что еще больше сужает её применимость. По сути чаще этот оператор применяется к функциям и процедурам(об этом см.ниже)
- Static — данный оператор используется для объявления переменной, значение которой предполагается использовать внутри конкретной процедуры, но не теряя значения данной переменной по завершении процедуры. Переменные данного типа обычно используют в качестве накопительных счетчиков. Такая переменная инициализируется в памяти при первом запуске процедуры, в которой она объявлена. По завершении процедуры данные по переменной не выгружаются из памяти, но однако они не доступны в других процедурах. Как только Вы запустите процедуру с этой переменной еще раз — данные по такой переменной будут доступны в том виде, в котором были до завершения процедуры. Выгружается из памяти такая переменная только после закрытия проекта(книги с кодом).
- Public — данный оператор используется для объявления переменной, значение которой будет доступно в любой процедуре проекта(в обычных модулях, модулях класса, модулях форм, модулях листов и книг). Переменная, объявленная подобным образом, должна быть объявлена вне процедуры — в области объявлений. Такая переменная загружается в память во время загрузки проекта(при открытии книги) и хранит значение до выгрузки проекта(закрытия книги). Использовать её можно в любом модуле и любой процедуре проекта. Важно: объявлять подобным образом переменную необходимо строго в стандартном модуле. Такие переменные называются переменными уровня проекта. В простонародье такие переменные еще называют глобальными(возможно из-за того, что раньше подобные переменные объявлялись при помощи оператора Global, который в настоящее время устарел и не используется).
Для большего понимания того, где и как объявлять переменные уровня проекта два небольших примера.
Неправильное объявление
Option Explicit Sub main() Public MyVariable As String MyVariable = «Глобальная переменная» ‘показываем текущее значение переменной MsgBox MyVariable ‘пробуем изменить значение переменной Call sub_main ‘показываем измененное значение переменной MsgBox MyVariable End Sub ‘доп.процедура изменения значения переменной Sub ChangeMyVariable() MyVariable = «Изменили её значение» End Sub
переменные не будут видны во всех модулях всех процедур и функций проекта, потому что:
1. Оператор Public недопустим внутри процедуры(между Sub и End Sub), поэтому VBA при попытке выполнения такой процедуры обязательно выдаст ошибку — Invalid Attribut in Sub or Function.
2. Даже если Public заменить на Dim — это уже будет переменная уровня процедуры и для других процедур будет недоступна.
3. Т.к. объявление неверное — вторая процедура( ChangeMyVariable ) ничего не знает о переменной MyVariable и естественно, не сможет изменить именно её.
Правильное объявление
‘выше глобальных переменных и констант могут быть только декларации: Option Explicit ‘принудительное объявление переменных Option Base 1 ‘нижняя граница объявляемых массивов начинается с 1 Option Compare Text ‘сравнение текста без учета регистра ‘глобальная переменная — первой строкой, выше всех процедур Public MyVariable As String ‘далее процедуры и функции Sub main() MyVariable = «Глобальная переменная» ‘показываем текущее значение переменной MsgBox MyVariable, vbInformation, «www.excel-vba.ru» ‘пробуем изменить значение переменной Call ChangeMyVariable ‘показываем измененное значение переменной MsgBox MyVariable, vbInformation, «www.excel-vba.ru» End Sub ‘доп.процедура изменения значения переменной Sub ChangeMyVariable() MyVariable = «Изменили её значение» End Sub
Если при этом вместо Public записать Dim , то эта переменная будет доступна из всех функций и процедур того модуля, в котором записана, но недоступна для функций и процедур других модулей.
Переменные уровня проекта невозможно объявить внутри модулей классов( ClassModule , ЭтаКнига(ThisWorkbook) , модулей листов , модулей форм(UserForm) — подробнее про типы модулей: Что такое модуль? Какие бывают модули?)
Операторы области действия так же могут применяться и к процедурам. Для процедур доступен еще один оператор области действия — Private . Объявленная подобным образом процедура доступна только из того модуля, в котором записана и такая процедура не видна в диалоговом окне вызова макросов( Alt + F8 )
‘процедура записана в Module1 ‘эта процедура будет доступна для вызова исключительно из процедур в этом же модуле ‘но не будет доступна при вызове из других модулей Private Sub PrivateMain() MsgBox «Процедура может быть вызвана только из модуля, в котором записана», vbInformation, «www.excel-vba.ru» End Sub ‘другая процедура, записанная в этом же модуле Sub CallPrivate() Call PrivateMain End Sub
‘эта процедура записана в другом модуле — Module2 ‘при попытке вызова этой процедурой получим ошибку ‘ Sub or Function not defined ‘ потому что процедура PrivateMain объявлена только для Module1 Sub CallPrivate_FromModule1() Call PrivateMain End Sub
При этом, если из Excel нажать сочетание клавиш Alt + F8 , то в окне будут доступны только CallPrivate_FromModule1 и CallPrivate. Процедура PrivateMain будет недоступна.
Как правильно назвать переменную:
«Что самое сложное в работе программиста? — выдумывать имена переменным.» 🙂 А ведь придумать имя переменной тоже не так-то просто. Можно, конечно, давать им имена типа: a, d, f, x, y и т.д.(я сам иногда так делаю, но либо в простых кодах, либо для специального запутывания кода). Но стоит задуматься: а как Вы с ними будете управляться в большом коде? Код строк на 10 еще потерпит такие имена, а вот более крупные проекты — не советовал бы я в них оперировать такими переменными. Вы сами запутаетесь какая переменная как объявлена и какой тип данных может хранить и что за значение ей присвоено. Поэтому лучше всего давать переменным осмысленные имена и следовать соглашению об именовании переменных. Что за соглашение? Все очень просто: перед основным названием переменной ставится префикс, указывающий на тип данных, который мы предполагаем хранить в данной переменной. Про имеющиеся типы данных я уже рассказал выше. А ниже приведена примерная таблица соответствий префиксов типам данных:
Префикс | Тип хранимых данных |
---|---|
b | Boolean |
bt | Byte |
i | Integer |
l | Long |
s | Single |
d | Double |
c | Currency |
dt | Date |
str | String |
obj | Object |
v | Variant |
Лично я немного для себя её переделал, т.к. некоторые обозначения мне кажутся скудными. Например Double я обозначаю как dbl, а Single как sgl. Это мне кажется более наглядным.
В чем еще плюс явного указания префикса данных. В VBA есть такие операторы как Def, при помощи которых можно указать тип данных по умолчанию для переменных, первая буква имени которых попадает в заданный в операторе диапазон. Например:
DefBool B Sub test() Dim bCheck End Sub
Автоматически переменной bCheck будет присвоен тип Boolean, т.к. она начинается с буквы b — регистр здесь не имеет значения(впрочем как в VBA в целом). Оператор Def задается в области объявления. Можно задать не одну букву, а целый диапазон букв:
DefBool B-C Sub test() Dim bCheck, cCheck End Sub
Но я считаю, что одной буквы для одного типа вполне достаточно. Можно задать сразу несколько операторов Def.
DefBool B DefStr S Sub test() Dim bCheck, sCheck End Sub
Ниже приведен полный перечень операторов типов и данные, которые задает каждый из них:
DefBool — Задает тип Boolean
DefByte — Задает тип Byte
DefCur — Задает тип Currency
DefDate — Задает тип Date
DefDbl — Задает тип Double
DefInt — Задает тип Integer
DefLng — Задает тип Long
DefObj — Задает тип Object
DefSng — Задает тип Single
DefStr — Задает тип String
DefVar — Задает тип Variant
По умолчанию в VBA применена инструкция DefVar для всех букв(иначе говоря для всех переменных, которым не назначен тип данных явно через оператор As).
Ну и немаловажный момент это непосредственно осмысленное имя переменной. Имя переменной должно примерно отражать то, что в ней будет храниться. Например, Вы создаете отчет и Вам надо объявить две переменные: одна имя листа, другая имя книги. Можно было сделать так: str1, str2. Коротко, здорово. Но если подумать — и как можно понять, какая из этих переменных что хранит? Никак. Надо просматривать код и вспоминать, какой переменной какое значение было присвоено. Не совсем удобно, правда? А если бы Вы задали имена так: strBookName, strSheetName, то вроде как более понятно, что мы в них будем хранить. Это удобно не только вам самим при работе с кодом, но и другим людям, которые, возможно в будущем будут пользоваться Вашим кодом. Им будет удобнее читать код, если он будет оформлен грамотно, а переменные названы осмысленно. И не стоит экономить на длине имени — имя должно быть понятным. Без фанатизма, конечно :-). Хоть VBA и позволяет нам создавать переменные длиной до 254 символов, но читать такую переменную так же неудобно, как и с одним символом. Но здесь уже все зависит от Ваших предпочтений и фантазии.
Небольшое дополнение: лучше привыкать давать названия переменным на латинице(т.е. английский алфавит), т.к. для VBA английский язык «родной» и лучше использовать его.
Небольшой пример использования переменных в кодах:
Sub main() ‘объявляем переменные с назначением конкретных типов ‘As String — текст ‘As Long — целое число Dim sAddress As String, sNewAddress As String, sShName As String Dim lRow As Long Dim rRange as Range ‘назначили переменной тип ячейка/диапазон ‘присвоили переменной rRange ссылку на текущую выделенную ячейку Set rRange = Selection ‘меняем выделение — выделяем ячейку D9 Range(«D9»).Select ‘назначаем переменной адрес выделенных ячеек sAddress = Selection.Address ‘назначаем переменной lRow значение первой строки выделенной области lRow = Selection.Row ‘показываем сообщение MsgBox «Адрес выделенной области: » & sAddress, vbInformation, «www.excel-vba.ru» MsgBox «Номер первой строки: » & lRow, vbInformation, «www.excel-vba.ru» ‘назначаем другой переменной значение адреса ячейки A1 sNewAddress = «A1» ‘выделяем ячейку, заданную переменной sNewAddres Range(sNewAddress).Select MsgBox «Адрес выделенной области: » & sNewAddress, vbInformation, «www.excel-vba.ru» ‘выделяем изначально выделенную ячейку, используя переменную rRange rRange.Select MsgBox «Адрес выделенной области: » & rRange.Address, vbInformation, «www.excel-vba.ru» ‘задаем значение переменной sShName = «excel-vba» ‘переименовываем активный лист на имя, заданное переменной ActiveSheet.Name = sShName End Sub
Просмотреть пошагово выполнение данного кода поможет статья: Отлов ошибок и отладка кода VBA
Важно! Назначение значений переменным задается при помощи знака равно(=). Однако, есть небольшой нюанс: для переменных типа Object (а так же других объектных типов(Workbook, Worksheet, Range, Cells, Chart и т.п.)) присвоение идет при помощи ключевого оператора Set :
‘присвоили переменной rRange ссылку на текущую выделенную ячейку Set rRange = Selection
это так же называется присвоением ссылки на объект. Почему именно ссылки? Все просто: при помещении в переменную непосредственно ячейки или диапазона( Set var = Range(«A1») или Set rRange = Selection ) нет никакого запоминания самой ячейки. В переменную помещается лишь ссылка на эту ячейку(можете считать, что это как ссылка в формулах) со всеми вытекающими: такое назначение не запоминает свойства ячейки до или после — в переменной хранится ссылка на конкретную ячейку и доступ есть исключительно к свойствам ячейки на текущий момент. Чтобы запомнить для этой ячейки значение, цвет или даже адрес (а так же и другие свойства) до её изменения и применить запомненное даже после изменения/перемещения самой ячейки — необходимо запоминать в переменные именно свойства ячейки:
Sub main() Dim val, l_InteriorColor As Long, l_FontColor As Long Dim rRange As Range ‘назначили переменной тип ячейка/диапазон ‘присвоили переменной rRange ссылку на активную ячейку Set rRange = ActiveCell ‘запоминаем свойства ячейки val = rRange.Value ‘значение l_InteriorColor = rRange.Interior.Color ‘цвет заливки l_FontColor = rRange.Font.Color ‘цвет шрифта ‘копируем другую ячейку и вставляем на место активной ActiveSheet.Range(«D1»).Copy rRange ‘проверяем, что rRange теперь имеет совершенно другие свойста — как у D1 MsgBox «Значение rRange: » & rRange.Value & vbNewLine & _ «Цвет заливки rRange: » & rRange.Interior.Color & vbNewLine & _ «Цвет шрифта rRange: » & rRange.Font.Color & vbNewLine, vbInformation, «www.excel-vba.ru» ‘назначаем свойства из сохраненных в переменных rRange.Value = val ‘значение rRange.Interior.Color = l_InteriorColor ‘цвет заливки rRange.Font.Color = l_FontColor ‘цвет шрифта ‘проверяем, что rRange возвращены параметры до копирования MsgBox «Значение rRange: » & rRange.Value & vbNewLine & _ «Цвет заливки rRange: » & rRange.Interior.Color & vbNewLine & _ «Цвет шрифта rRange: » & rRange.Font.Color & vbNewLine, vbInformation, «www.excel-vba.ru» End Sub
Это так же распространяется на все другие объекты. Т.е. те переменные, значения которым назначаются через оператор Set.
Для других же типов Set не нужен и в переменную значение заносится без этих нюансов.
Константы
Так же есть и иной вид «переменных» — константы. Это такая же переменная, только(как следует из её названия) — она не может быть изменена во время выполнения кода, т.к. является величиной постоянной и значение её назначается только один раз — перед выполнением кода.
Const sMyConst As String = «Имя моей программы»
Константам могут быть назначены данные тех же типов, что и для переменных, за исключением типа Object, т.к. Object это всегда ссылка на объект, который как правило обладает «динамическими»(т.е. обновляющимися) свойствами. А изменение для констант недопустимо.
Для дополнительной области видимости/жизни констант используется только Public . Если область видимости не указана, то константа будет доступна только из того модуля, в котором объявлена. Здесь обращаю внимание на то, что Dim уже не используется, т.к. Dim это идентификатор только для переменных. Пару важных отличий объявления констант от объявления переменных:
- при объявлении константы необходимо обязательно указывать явно, что это константа ключевым словом Const
- сразу в момент объявления необходимо назначить константе значение: = «Имя моей программы»
Во всем остальном объявление и применение констант идентично объявлению переменных. Коротко приведу пару примеров.
Если константа объявлена внутри процедуры:
Sub TestConst() Const sMyConst As String = «Имя моей программы» MsgBox sMyConst ‘показываем сообщение с именем программы End Sub
то она не может быть использована в другой процедуре:
Sub TestConst() Const sMyConst As String = «Имя моей программы» MsgBox sMyConst ‘показываем сообщение с именем программы End Sub Sub TestConst2() MsgBox sMyConst ‘вызовет ошибку Variable not defined End Sub
Чтобы использовать одну константу во всех процедурах модуля(того, в котором она объявлена), необходимо объявить её в области объявлений:
Const sMyConst As String = «Имя моей программы» Sub TestConst() MsgBox sMyConst ‘показываем сообщение с именем программы End Sub Sub TestConst2() MsgBox sMyConst ‘уже не вызовет ошибку Variable not defined End Sub
Чтобы использовать одну константу во всех процедурах проекта(книги), необходимо объявить её как Public:
Public Const sMyConst As String = «Имя моей программы» Sub TestConst() MsgBox sMyConst ‘показываем сообщение с именем программы End Sub Sub TestConst2() MsgBox sMyConst ‘не вызовет ошибку Variable not defined, даже если процедура в другом модуле End Sub
Подробнее можно прочитать выше — как я уже писал для констант применяются те же правила, что и для переменных.
Статья помогла? Поделись ссылкой с друзьями!
Источник
Часто так бывает, что при копировании формул, Вам нужно, что бы ссылка на ячейку в формуле осталась такой же, как и была, а не переместилась относительно исходного места. Тогда Вам на помощь придет такая функция в Excel, как фиксация ссылок на ячейки в Экселе. Остановимся подробно на всех вариантах.
1. Способ, как закрепить (зафиксировать) строку и столбец в формуле Excel
Для того, что бы ссылка на ячейку не изменялась полностью, т.е. адрес столбца и строки оставались неизменными, проделайте следующие простые действия:
- Кликните на ячейке с формулой.
- Кликните в строке формул на адрес той ячейке, что Вы хотите закрепить.
- Нажмите F4 один раз.
В результате ссылка на ячейку должна быть дополнена знаками доллара, к примеру у Вас в формуле была ссылка на ячейку B2, то после вышеуказанной операции, ссылка на ячейку должна стать $B$2.
Разберем подробно, что значит знак доллара перед буквой и перед числом:
- Знак доллара перед буквой означает, что при перемещении формулы вправо или влево, т.е. смещая ее по столбцам, ссылка на столбец ячейки в формуле меняться не будет.
- Знак доллара перед числом означает, что при перемещении формулы вверх
или вниз, т.е. смещая ее по строкам, ссылка на строку ячейки в
формуле меняться не будет.
2. Способ, как закрепить (зафиксировать) строку в формуле Excel
Способ полностью аналогичный тому, что описан выше, только Вам нужно будет нажать дважды на F4. К примеру, если у Вас в формуле ссылка на ячейку B2, то Вы получите B$2. Это значит, что теперь при перемещении формулы, будет изменяться буква столбца, а номер строки будет оставаться неизменным.
3. Способ, как закрепить (зафиксировать) столбец в формуле Excel
Все тоже самое, что и в вариантах выше, только нажмите на клавишу F4 трижды. Вы должны получить ссылку на ячейку вида $B2, т.е. теперь при перемещении формулы, будет меняться номер строки, а буква столбца будет неизменной.
4. Способ, как отменить фиксацию ячейки в формуле Excel
В случае если Вам наоборот нужно отменить фиксацию ячейки в формуле, то нажмите F4 несколько раз, так что бы в ссылке на ячейку не осталось знаков $, тогда при перемещении формулы, будет изменяться адрес ячейки как по строкам, так и по столбцам.
Спасибо за внимание. Остались вопросы — задавайте их в комментариях к статье. Подписывайтесь на наши группы Вконтакте, Facebook, Twitter, Google+ и будете получать первыми информацию о новых статьях на сайте.
Распространенный вопрос пользователей Excel — как зафиксировать ячейку в формуле, чтобы она оставалась на одном месте в течение всех дальнейших расчетов. Жмите в нужном месте, кликните по строке формул и жмите F4. Таким способом ссылка получает статус «абсолютная», что видно по символу доллара ($). При двойном / тройном нажатии можно зафиксировать строку / столбец. Ниже рассмотрим, какие способы закрепления существуют, разберем, для чего это необходимо, и какие трудности возникают
Как закрепить ячейку
В вопросе, как зафиксировать ячейку в Экселе в формуле, ключевое значение отдается знаку $. Этот символ сбивает с толку многих пользователей, но по факту он свидетельствует о закреплении данных. Также стоит отметить, что ссылки бывают трех видов, относительная, абсолютная и смешанная. Нас интересует второй вариант, ведь он подразумевает наличие фиксированного адреса для столбца / колонки.
Существует четыре метода, как закрепить ячейку в формуле Эксель. Они очень похожи по исполнению, но имеют ряд особенностей.
Способ №1 (сохранение адреса, ряда и колонки):
- Найдите нужную ячейку с формулой в Excel и станьте на нее курсором.
- Кликните по строке в секции, которую нужно зафиксировать.
- Жмите на F4.
Это наиболее простой способ, как закрепить формулу в Excel. Если все сделано правильно, ссылка ячейки меняется на абсолютную. Распознать правильность сделанной работы можно по появлению значка доллара ($). К примеру, если нажать на А2, а потом на кнопку F4, ссылка получает вид $A$2. Это означает, что она фиксирована, и никуда больше не сместится.
Перед тем как закрепить ячейку в формуле Excel, важно разобраться с расположением знака доллара перед адресом. Это можно интерпретировать следующим образом:
- Размещение перед буквой свидетельствует о том, что ссылка на столбец закрепляется. При этом не имеет значения, в какое место была передвинута формула.
- При размещении значка доллара до цифры можно говорить о фиксации только строки.
Способ №2:
- Чтобы в Excel не менять ячейку в формуле, воспользуйтесь почти таким же способом, как рассмотрен выше.
- Выделите нужную секцию.
- Кликните дважды F4. К примеру, если у вас была А2, она превратится в А$2.
Иными словами, рассмотренный выше способ позволяет зафиксировать в Excel строку. Что касается буквы столбца, она продолжает меняться в обычном режиме.
Используйте такой метод в Эксель, чтобы не менялось значение в таблице, когда необходимо в нижней ячейке вывести данные из второй секции сверху. Таким способом можно избежать многократного создания формулы, ведь удается только раз зафиксировать строку и позволить меняться столбцу.
Способ №3:
- .Перед тем как зафиксировать формулу в Excel, выполните первые два пункта первой инструкции (то есть станьте курсором в необходимое место).
- Жмите кнопку F4 трижды.
Таким способом удается в Экселе зафиксировать формулу, но только для ссылки на колонку. При этом запись будет иметь следующий вид $A2. Следовательно номер строчки будет меняться, а вот буква столбца сохраняется в течение всей работы остается неизменной.
Особенности отмены
Бывают ситуации, когда у вас не меняющаяся ячейка в формуле Excel, но необходимо вернуть ее прежний формат. Для изменения абсолютной ссылки на относительную жмите на F4 то число раз, которое требуется для удаления символа доллара в ссылке. Как только этот значок полностью исчезает, при копировании / смещении формулы меняется и адрес столбца / строки.
Для чего это нужно
Во многих случаях формула создается только для одной клетки таблицы Excel. В таком случае не нужно думать, как зафиксировать конкретную ячейку. По-иному обстоит ситуация, когда данные необходимо копировать / перемещать по таблице. В этом случае и возникает вопрос, как сделать в Эксель, чтобы ячейка не менялась в формуле. Эта опция необходима, чтобы не сломать расчеты и зафиксировать данные без дальнейшего изменения адресов.
Возможные проблемы и пути решения
Зная, как в Excel не изменять ячейку в формуле, можно упростить сложные расчеты и избежать ошибок. При этом могут возникать разные сложности, которые не дают сделать работу:
- Не удается зафиксировать данные. Убедитесь, что вы выполняете работу с учетом приведенной выше инструкции. Попробуйте перезапустить приложение, чтобы исключить временные ошибки. Также может потребоваться перезапуск самого ПК / ноутбука.
- Позиция абсолютной ссылки изменилась во процессе работы. Многие считают, что, если зафиксировать ячейку, ее позиция не изменится. Но это не так. На практике абсолютная ссылка в Excel меняется, когда пользователь добавляет / удаляет строки / столбца на листе. В результате корректируется и расположение фиксированной ячейки. К примеру, если вставить строку вверху таблиц, тогда адрес сместится вниз во всех формулах, с которых идет ссылка. Этот момент необходимо учесть при внесении изменений или вообще отказаться от корректировок.
- При нажатии F4 ничего не происходит. Убедитесь, что функциональная клавиша работает. Иногда для ее активации необходимо нажать комбинацию Fn+F4. Это зависит от типа используемой клавиатуры.
Теперь вы знаете, как в Excel зафиксировать секцию таблицы, чтобы избежать постоянного перемещения данных. Для этого используйте ручной метод и функциональную кнопку F4. Контролировать правильность работы можно по положению символа доллара, который появляется перед цифрой или буквой.
В комментариях расскажите, пригодилась ли вам предложенная инструкция, и какие еще методы можно использовать для решения поставленной задачи.
Отличного Вам дня!
сохранение начальной переменной |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |