Введение
Это третья статья, посвященная трем основным элементам VBA. Этими тремя элементами являются Workbooks, Worksheets и Ranges/Cells. Cells, безусловно, самая важная часть Excel. Почти все, что вы делаете в Excel, начинается и заканчивается ячейками.
Вы делаете три основных вещи с помощью ячеек:
- Читаете из ячейки.
- Пишите в ячейку.
- Изменяете формат ячейки.
В Excel есть несколько методов для доступа к ячейкам, таких как Range, Cells и Offset. Можно запутаться, так как эти функции делают похожие операции.
В этой статье я расскажу о каждом из них, объясню, почему они вам нужны, и когда вам следует их использовать.
Давайте начнем с самого простого метода доступа к ячейкам — с помощью свойства Range рабочего листа.
Чтение значения из ячейки
Есть 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.
Обращение к конкретной ячейке
Прежде чем читать или записывать значение в ячейке, нужно определиться с тем, как можно указать какая именно ячейка нам необходима.
Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:
- С помощью Range
- С помощью Cells
Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1
Однако, как правило, полный путь редко используется, т.к. макрос работает с Книгой, в которой он записан и часто на активном листе. Поэтому путь к ячейке можно сократить и написать просто:
Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе
Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).
Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.
Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.
Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.
Загрузить файлы Excel в виде фреймов Pandas
Все, среда настроена, вы готовы начать импорт ваших файлов.
Один из способов, который вы часто используете для импорта ваших файлов для обработки данных, — с помощью библиотеки Pandas. Она основана на NumPy и предоставляет простые в использовании структуры данных и инструменты анализа данных Python.
Эта мощная и гибкая библиотека очень часто используется дата-инженерами для передачи своих данных в структуры данных, очень выразительных для их анализа.
Если у вас уже есть Pandas, доступные через Anaconda, вы можете просто загрузить свои файлы в Pandas DataFrames с помощью pd.Excelfile():
Если вы не установили Anaconda, просто выполните pip install pandas, чтобы установить библиотеку Pandas в вашей среде, а затем выполните команды, которые включены в фрагмент кода выше.
Проще простого, да?
Для чтения в файлах .csv у вас есть аналогичная функция для загрузки данных в DataFrame: read_csv(). Вот пример того, как вы можете использовать эту функцию:
Разделитель, который будет учитывать эта функция, по умолчанию является запятой, но вы можете указать альтернативный разделитель, если хотите. Перейдите к документации, чтобы узнать, какие другие аргументы вы можете указать для успешного импорта!
Обратите внимание, что есть также функции read_table() и read_fwf() для чтения файлов и таблиц с фиксированной шириной в формате DataFrames с общим разделителем. Для первой функции разделителем по умолчанию является вкладка, но вы можете снова переопределить это, а также указать альтернативный символ-разделитель
Более того, есть и другие функции, которые вы можете использовать для получения данных в DataFrames: вы можете найти их .
Как записать Pandas DataFrames в файлы Excel
Допустим, что после анализа данных вы хотите записать данные обратно в новый файл. Есть также способ записать ваши Pandas DataFrames обратно в файлы с помощью функции to_excel().
Но, прежде чем использовать эту функцию, убедитесь, что у вас установлен XlsxWriter, если вы хотите записать свои данные в несколько листов в файле .xlsx:
Обратите внимание, что в приведенном выше фрагменте кода вы используете объект ExcelWriter для вывода DataFrame. Иными словами, вы передаете переменную Writer в функцию to_excel() и также указываете имя листа
Таким образом, вы добавляете лист с данными в существующую рабочую книгу: вы можете использовать ExcelWriter для сохранения нескольких (немного) разных DataFrames в одной рабочей книге
Иными словами, вы передаете переменную Writer в функцию to_excel() и также указываете имя листа. Таким образом, вы добавляете лист с данными в существующую рабочую книгу: вы можете использовать ExcelWriter для сохранения нескольких (немного) разных DataFrames в одной рабочей книге.
Все это означает, что если вы просто хотите сохранить один DataFrame в файл, вы также можете обойтись без установки пакета XlsxWriter. Затем вы просто не указываете аргумент движка, который вы передаете в функцию pd.ExcelWriter(). Остальные шаги остаются прежними.
Аналогично функциям, которые вы использовали для чтения в файлах .csv, у вас также есть функция to_csv() для записи результатов обратно в файл, разделенный запятыми. Он снова работает так же, как когда вы использовали его для чтения в файле:
Если вы хотите иметь файл, разделенный табуляцией, вы также можете передать \ t аргументу sep
Обратите внимание, что есть другие функции, которые вы можете использовать для вывода ваших файлов. Вы можете найти их все
Обращение к ячейке по адресу
Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.
В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:
1 |
Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Range(«C5») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).Cells(5,3) Workbooks(«Книга2.xlsm»).Sheets(«Лист2″).Cells(5,»C») Workbooks(«Книга2.xlsm»).Sheets(«Лист2»).C5 |
Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные
Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть
Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:
1 |
ActiveCell Range(«A1») Cells(1,1) Cells(1,»A») A1 |
Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».
Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:
1 |
‘по основному имени листа ‘по имени ярлыка Sheets(«Имя ярлыка»).Cells(3,8) |
Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.
Активная ячейка в 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
Комментарии в VBA
Самое важное для написания аккуратного и понятного кода – чаще оставлять комментарии. Комментарии – это строки в коде, которые исполняют роль заметок и помогают разобраться, какие действия выполняет та или иная часть кода
Комментарии не участвуют в процессе выполнения программы и не влияют на результат работы макроса. Каждая строка, начинающаяся апострофом (‘), будет считаться в VBA комментарием. Редактор VBA в Excel выделит такую строку зелёным цветом шрифта, чтобы с первого взгляда было понятно, что это комментарий, который не будет выполняться.
Ниже продемонстрировано, как при помощи комментариев поясняется работа простой процедуры Sub:
Не расстраивайтесь, если какую-то часть кода, показанного выше, не удалось понять – далее в учебнике мы рассмотрим эту тему подробнее. Цель приведённого примера – продемонстрировать, как при помощи комментариев поясняется каждый блок кода.
Часто программисты ленятся добавлять подробные комментарии к своему коду, но, поверьте, затраченные усилия оправдают себя с избытком! Несколько минут, потраченных на написание понятного комментария, могут сэкономить Вам долгие часы в будущем.
Давайте рассмотрим объектную модель Excel
Для того, чтобы начать программировать достаточно знать несколько объектов из которых состоит Excel.
Основные объекты это:
- Application — непосредственно приложение Excel (по аналогии это коробка Lego);
- Workbook — рабочая книга Excel (это например один из видов деталей Lego);
- Worksheet — рабочий лист Excel (группа деталей, которая составляет вид деталей Lego);
- Range — диапазон ячеек (или одна ячейка) рабочего листа Excel (это уже конкретные детали каждой группы деталей Lego).
Все объекты имеют свои свойства и методы.
Свойство — это какая либо характеристика объекта (например общие свойства, такие как Name — есть у всех объектов, некоторые свойства имеют только определенные объекты, свойство Color (цвет) могут иметь такие объекты как Range и Font и т.д.).
Методы — это действия, которые вы пожете делать с объектами. Это может быть переименование объекта (рабочей книги, рабочего листа, диапазона ячеек), изменение цвета, размера шрифта и т.д.
Давайте рассмотрим каждый из этих объектов и их свойства и методы
Для того чтобы войти в редактор VBA вам нужно нажать на комбинацию клавиш Alt+F11 или добавив на ленту приложения вкладку «Разработчик» нажать на кнопку Visual Basic
Чтобы на вашей ленте появилась вкладка «Разработчик» вам нужно выполнить следующие действия
1. Перейдите на вкладку «Файл» — выделено красной рамкой
2 — Выберите «Параметры»
3. Выберите «Настроить ленту»
1. Перейдите на вкладку «Файл» — выделено красной рамкой
Application — это так сказать корневой объект в приложении Excel.
С помощью этого объекта можно получить доступ к любому объекту приложения и выполнить с ними какие-либо действия. Правда большей частью, при работе в одном приложении этот объект в коде не прописывают.
Введите для примера этот код:
После запуска кода у вас будет вот такой результат
Обращаться к рабочей книге можно следующим образом:
- Напрямую с помощью команды ThisWorkbook;
- Назначив переменную, которой будет присваиваться значение соответствующее рабочей книге.
Примеры:
Этот пример выводит на экран сообщение с названием рабочей книги.
Аналогично имя книги можно получить следующим образом:
Здесь мы выполнили следующие действия:
1. создали переменную Dim wb As Workbook
2. присвоили ей значение текущей рабочей книги: wb = ThisWorkbook
3. вывели в окно имя этой рабочей книги: MsgBox wb.Name
Объект Workbookотносится к классу Workbooks. Используя этот класс, мы можем определить количество открытых рабочих книг и получить имя каждой рабочей книги. Это может пригодится в случае, когда вам необходимо выполнить например в одной книге получить какое либо значение и вставить это значение в другую книгу.
Примеры:
В этих двух строчках такой смысл:
в первой строке мы задаем переменную wb, которой будут присваиваться значения рабочих книг
во второй строке инициируется цикл, который можно перевести так:
For (Для) Each (Каждой) wb In (В) Workbooks (Классе «Рабочие книги»)
с помощью которого последовательно перебираются все открытые файлы Excel и их имена выводятся в окно сообщения.
WorkSheet — объект «Рабочий лист»
У этого объекта как и у рабочей книги есть имя. Также как и с рабочей книгой, используя класс WorkSheets можно получить имена всех рабочих листов в рабочей книге и поочередно перейти к каждому листу.
Пример:
С помощью этой процедуры вы последовательно будете переходить по каждому листу и получать в сообщении имя активного листа, аналогично тому примеру, который был описан для рабочих книг.
Range — объект ячейка (диапазон ячеек)
Это один из основных объектов, с которым вам придется работать. С помощью свойств и методов этого объекта можно выполнять все действия с ячейками и их значениями, размерами, цветом ячеек, т.е. все то, что вы делаете вручную при редактировании ячеек.
Вот несколько примеров работы с ячейками.
1. Получение адреса выделенной ячейки (диапазона ячеек)
2. Вставить в каждую ячейку выделенного диапазона значение 5
В этом примере также присутствует код «Цикла»
с помощью которого поочередно происходит переход по всем ячейкам выделенного диапазона.
В этой статье мы рассмотрели самые основные объекты приложения Excel и самые рассмотрели как получить некоторые свойства этих объектов, а также поменять содержимое объекта Range. Более подробно со свойствами и методами работы с объектной моделью приложения Excel мы будем рассматривать в других статьях канала.
Основные действия с диапазонами
Выделение диапазонов
О том как выделять ячейки и группы ячеек уже рассказывалось в одной из наших публикаций. Также ранее рассматривалась тема о том как выделять строки в рабочих листах Excel, но строка является одним из частных видов диапазона ячеек. Рассмотрим несколько способов выделения диапазонов ячеек в общем виде.
Способ первый: для выделения небольшого диапазона ячеек, находящихся рядом, можно просто провести по ним курсор мыши в виде широкого белого креста при нажатой левой кнопке мыши. Первая ячейка диапазона при этом останется неподсвеченной и готовой к вводу информации.
Способ второй: для выделения большого диапазона ячеек необходимо щелкнуть по первой ячейке диапазона, после чего при нажатой клавише Shift, щелкнуть по последней ячейке диапазона. При этом можно использовать горячие клавиши для перехода в начало или конец строки, а также для перехода в начало или конец рабочего листа.
Способ третий: для выделения диапазона можно просто написать адрес этого диапазона в адресном окошке строки формул, а если диапазон именованный, то достаточно в адресном окошке написать его имя.
Сравнение диапазонов
Сравнение диапазонов — это одна из классических задач в Excel, которую рано или поздно приходится решать любому пользователю Excel. Задача по сравнению диапазонов может быть поставлена по разному. Когда-то нужно найти различия или совпадения в диапазонах при построчном их сравнении, а когда-то необходимо узнать есть ли что-то общее в сравниваемых диапазонах вообще. В зависимости от поставленной задачи различаются и методики её решения.
Например, для построчного сравнения часто используется логическая функция «ЕСЛИ» и какой-либо из операторов сравнения (также можно использовать и другие функции, например «СЧЕТЕСЛИ» из категории статистические для проверки вхождения элементов одного списка в другой).
Также для поиска отличий по столбцам или по строкам используется стандартное средство Excel, которое находится на вкладке «Главная», в группе кнопок «Редактирование», в меню кнопки «Найти и выделить». Если в этом меню выбрать пункт «Перейти» и далее нажать кнопку «Выделить», то в диалоговом окне «Выделение группы ячеек» можно выбрать одну из опций «Отличия по строкам» или «Отличия по столбцам».
Для поиска повторяющихся или уникальных значений в двух диапазонах можно использовать условное форматирование.
Сравнение диапазонов можно провести и при помощи надстройки для Excel, которая позволяет находить и подсвечивать заливкой различия или совпадения в двух заданных диапазонах.
Изменение (преобразование) диапазонов значений
Одним из способов преобразования диапазона значений является транспонирование. Транспонирование — это такое преобразование диапазона значений, при котором данные, расположенные построчно перемещаются в столбцы и наоборот с сохранением порядка, то есть первая строка становится первым столбцом, вторая строка — вторым столбцом и так далее.
Транспонирование можно осуществить при помощи функции «=ТРАНСП(Диапазон)», которая находится в категории «Ссылки и массивы». Есть и другой способ — копирование диапазона значений с последующей специальной вставкой, при которой ставится флажок в поле «Транспонировать».
Есть еще одна возможность изменения выбранного диапазона значений. При помощи надстройки для Excel можно значения исходного диапазона разложить по заданному количеству строк либо столбцов.
Функция ДВССЫЛ Excel — возможные ошибки и проблемы
Как показано в приведенных выше примерах, функция ДВССЫЛ весьма полезна при работе со ссылками на ячейки и диапазоны. Однако не все пользователи Excel охотно принимают этот подход, в основном потому, что постоянное использование ДВССЫЛ приводит к отсутствию прозрачности формул Excel и несколько затрудняет их понимание. Функцию ДВССЫЛ сложно просмотреть и проанализировать ее работу, поскольку ячейка, на которую она ссылается, не является конечным местоположением значения, используемого в формуле. Это действительно довольно запутанно, особенно при работе с большими сложными формулами.
В дополнение к сказанному выше, как и любая другая функция Excel, ДВССЫЛ может вызвать ошибку, если вы неправильно используете аргументы функции. Вот список наиболее типичных ошибок и проблем:
Ошибка #ССЫЛКА!
Чаще всего функция ДВССЫЛ возвращает ошибку #ССЫЛКА! в следующих случаях:
- Аргумент ссылка_на_ячейку не является допустимой ссылкой Excel. Если вы пытаетесь передать функции текст, который не может обозначать ссылку на ячейку (например, «A1B0»), то формула приведет к ошибке #ССЫЛКА!. Во избежание возможных проблем проверьте аргументы функции ДВССЫЛ .
- Превышен предел размера диапазона. Если аргумент ссылка_на_ячейку вашей формулы ДВССЫЛ ссылается на диапазон ячеек за пределами строки 1 048 576 или столбца 16 384, вы также получите ошибку #ССЫЛКА в Excel 2007 и новее. Более ранние версии Excel игнорируют превышение этого лимита и действительно возвращают некоторое значение, хотя часто не то, что вы ожидаете.
- Используемый в формуле лист или рабочая книга закрыты.Если ваша формула с ДВССЫЛ адресуется на другую книгу или лист Excel, то эта другая книга или электронная таблица должны быть открыты, иначе ДВССЫЛ возвращает ошибку #ССЫЛКА! . Впрочем, это требование характерно для всех формул, которые ссылаются на другие рабочие книги Excel.
Ошибка из-за несовпадения региональных настроек.
Также распространенная проблема заключается не в названии функции ДВССЫЛ, а в различных региональных настройках для разделителя списка.
В европейских странах запятая зарезервирована как десятичный символ, а в качестве разделителя списка используется точка с запятой.
В стандартной конфигурации Windows для Северной Америки и некоторых других стран разделителем списка по умолчанию является запятая.
В результате при копировании формулы между двумя разными языковыми стандартами Excel вы можете получить сообщение об ошибке « Мы обнаружили проблему с этой формулой… », поскольку разделитель списка, используемый в формуле, отличается от того, что установлен на вашем компьютере. Если вы столкнулись с этой ошибкой при копировании какой-либо НЕПРЯМОЙ формулы из этого руководства в Excel, просто замените все запятые (,) точками с запятой (;) (либо наоборот). В обычных формулах Excel эта проблема, естественно, не возникнет. Там Excel сам поменяет разделители исходя из ваших текущих региональных настроек.
Чтобы проверить, какие разделитель списка и десятичный знак установлены на вашем компьютере, откройте панель управления и перейдите в раздел «Регион и язык» > «Дополнительные настройки».
Надеемся, что это руководство пролило свет для вас на использование ДВССЫЛ в Excel. Теперь, когда вы знаете ее сильные стороны и ограничения, пришло время попробовать и посмотреть, как функция ДВССЫЛ может упростить ваши задачи в Excel. Спасибо за чтение!
Вот еще несколько статей по той же теме:
Запись значений в ячейку
Для начала откроем редактор, добавим модуль, скопируем туда этот макрос:
Мы обратились к ячейке A1 . Теперь давайте попробуем управлять данной ячейкой. Чтобы увидеть, что мы можем сделать, добавим точку после Range («A1»).
Выберите значение Value и нажмите Tab. Получим такой код:
Значение Value отображает содержимое ячейки.
Теперь давайте запишем значение 35 в ячейку A1:
Попробуем теперь записать текст в ячейку (когда присваиваем текстовое значение, его нужно брать в двойные кавычки «»):
Заметим, что макрос будет отображать значение в том листе, который вы последний раз открывали. Поэтому, чтобы управлять содержимым ячейки на любом листе книги, нам нужно будет прописать полный путь к ячейке, а именно добавить впереди кода название листа, например:
Вариант 1. Обращаемся по названию листа — Sheets(«Sheet2»).
Вариант 2. Обращаемся не по названию листа, а по его порядковому номеру — Sheets(2).
Аналогично, если мы хотим обратиться к ячейке в другой книге, нам нужно в начале кода прописать название книги:
Хотя мы указываем параметр Value в наших примерах, на самом деле его можно не использовать, поскольку он стоит по умолчанию. То есть, эти две строки кода будут эквивалентными:
Как использовать пользовательскую функцию в формуле?
Когда вы создали пользовательскую, она становится доступной так же, как и другие стандартные функции Excel. Сейчас мы узнаем, как создавать с ее помощью собственные формулы.
Чтобы использовать ее, у вас есть две возможности.
Первый способ. Нажмите кнопку в строке формул. Среди появившихся категорий вы увидите новую группу — Определённые пользователем. И внутри этой категории вы можете увидеть нашу новую пользовательскую функцию CountWords.
Второй способ. Вы можете просто записать эту функцию в ячейку так же, как вы это делаете обычно. Когда вы начинаете вводить имя, Excel покажет вам имя пользовательской в списке соответствующих функций. В приведенном ниже примере, когда я ввел = cou , Excel показал мне список подходящих функций, среди которых вы видите и CountWords.
Можно посчитать этой же функцией и количество слов в диапазоне. Запишите в ячейку С3:
Нажмите .
Мы только что указали функцию и установили диапазон, и вот результат подсчета: 14 слов.
Для сравнения в C1 я записал формулу массива, при помощи которой мы также можем подсчитать количество слов в диапазоне.
Как видите, результаты одинаковы. Только использовать CountWords() гораздо проще и быстрее.
Введите данные в следующую пустую ячейку (используя поле ввода)
Вы можете использовать поля ввода, чтобы пользователь мог вводить данные.
Например, предположим, что у вас есть набор данных ниже, и вы хотите ввести запись о продажах, вы можете использовать поле ввода в VBA. Используя код, мы можем убедиться, что он заполняет данные в следующей пустой строке.
Sub EnterData () Dim RefRange As Range Set RefRange = Range ("A1"). End (xlDown) .Offset (1, 0) Set ProductCategory = RefRange.Offset (0, 1) Set Quantity = RefRange.Offset (0, 2 ) Set Amount = RefRange.Offset (0, 3) RefRange.Value = RefRange.Offset (-1, 0) .Value + 1 ProductCategory.Value = InputBox ("Категория продукта") Quantity.Value = InputBox ("Количество") Amount.Value = InputBox ("Amount") End Sub
Приведенный выше код использует поле ввода VBA для получения входных данных от пользователя, а затем вводит их в указанные ячейки.
Обратите внимание, что мы не использовали точные ссылки на ячейки. Вместо этого мы использовали свойства End и Offset, чтобы найти последнюю пустую ячейку и заполнить ее данными
Этот код нельзя использовать. Например, если вы вводите текстовую строку, когда поле ввода запрашивает количество или сумму, вы заметите, что Excel позволяет это. Вы можете использовать условие If, чтобы проверить, является ли значение числовым или нет, и затем разрешить его соответственно.
Продолжаем знакомство
Запущенный LibreOffice Writer по умолчанию создает на экране пустой документ. На этом чистом листе и попробуем набрать какой-то текст, а потом сравнить возможности бесплатного и платного пакетов.
Видим, что настройки по умолчанию: Liberation Serif 12 кегль. Ничего не меняя, набираем текст:
Рис. 2. Первый текст
Все просто и понятно. Впрочем, в большинстве текстовых редакторов, набор текста не представляет из себя никакой сложности.Посмотрим, что может сделать с набранным текстом LibreOffice Writer
.
Обратим внимание на два меню: «Стандартная»
и «Форматирование». Они активны по умолчанию и при первом запуске программы находятся в верхней части экрана
Рис. 3. Меню «Стандартная» и «Форматирование»
Если этих меню на месте нет (маловероятно, но возможно), следует выполнить команду Вид → Панель инструментов
. И проставить галочки на строчках Стандартная и Форматирование.
Рис. 4. Включаем необходимые меню
Для этого потребовалось написать 2 коротеньких алгоритма (макроса):
Первый макрос — производит удаление данных из ячейки и выглядит следующим образом:
Sub noll() On Error Resume Next ActiveSheet.Cells(2, 2).Value = «» End Sub
Этот макрос следует записать в поле раздела «module» — в «контейнер» модуля.
Выглядит код вызывающий (запускающий ) макрос по клику на ячейку, следующим образом:
Private Sub Worksheet_SelectionChange (ByVal Target As Range) Dim u As String On Error Resume Next If Not Intersect(Target, Range(«B1»)) Is Nothing Then Call noll End If End Sub
Этот код нужно записывать не в контейнер «module», а непосредтвенно в лист. Для этого следует в меню разработчика в просмотре кода:
- Кликнуть двойным щелчком по названию листа.
- После двойного клика будет открыто поле для внесения кода аналогичное полю модуля (module).
Код стал выглядеть следующим образом:
Private Sub Worksheet_Change(ByVal Target As Range) Dim u As String On Error Resume Next If Not Intersect(Target, Range(«B1»)) Is Nothing Then Call noll End If End Sub
Теперь макрос стал запускаться только при изменении первой ячейки, например, при выборе нового значения из выпадающего списка.
голоса
Рейтинг статьи
Как запустить макрос на основе значения ячейки в Excel?
Предположим, у меня есть несколько кодов макросов в моей книге, и теперь я хочу запускать эти коды на основе значения ячейки. В этой статье я расскажу о нескольких ситуациях, с которыми вы можете столкнуться в повседневной работе при использовании Excel.
Например, если значение в ячейке A1 находится в диапазоне от 10 до 50, запустите macro1, а если значение больше 50, запустите macro2. Чтобы решить эту задачу в Excel, примените следующий код VBA.
1. Щелкните правой кнопкой мыши вкладку листа, на которой вы хотите выполнить макрос на основе значения ячейки, а затем выберите Просмотреть код из контекстного меню, а в открывшемся Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустой модуль:
Код VBA: запуск макроса, если значение ячейки больше или меньше:
Внимание: В приведенном выше коде:
A1 это ячейка, которая содержит конкретное значение, на основе которого вы хотите запустить макрос;
Случай с 10 по 50: Macro1: это означает, что если значение находится между 10 и 50, запустить Macro1;
Случай> 50: Macro2: это означает, что если значение больше 50, запустить Macro2.
Пожалуйста, измените названия макросов и критерии по своему усмотрению, и вы также можете добавить дополнительные критерии после Коробка скрипты.
2. Затем сохраните и закройте это окно кода, теперь, когда значение, которое вы вводите в ячейке A10, составляет от 50 до 1, будет запущен макрос Macro1, если введенное значение больше 50, выполняется макрос Macro2.
Запустить или запустить макрос, если значение ячейки равно определенному тексту с кодом VBA
Если вы хотите запускать макрос на основе определенного текста в ячейке, например, для запуска макроса 1, если введен текст «Удалить», и запуска макроса 2, если введен текст «Вставить». Следующий код может оказать вам услугу.
1. Щелкните правой кнопкой мыши лист, на котором вы хотите выполнить макрос на основе значения ячейки, а затем выберите Просмотреть код из контекстного меню, а в открывшемся Microsoft Visual Basic для приложений окна, скопируйте и вставьте следующий код в пустой модуль:
Код VBA: запустить макрос, если значением ячейки является определенный текст
Внимание: В приведенном выше коде «Удалить(Основной ключ) и Вставить»- это тексты ячеек, на основе которых вы хотите запускать макросы, и Macro1 и Macro2 макросы, которые вы хотите выполнить на основе текста. Пожалуйста, измените их по своему усмотрению
2. Затем сохраните этот код и закройте окно, теперь при вводе текста «Удалить» в ячейку A1 срабатывает макрос 1, если вводится текст «Вставить», выполняется макрос 2.
Создание новых стилей
Если встроенных стилей Excel недостаточно, вы можете создавать свои собственные стили. Сделать это довольно просто:
- Выделите ячейку и отформатируйте ее по своему усмотрению. В будущем мы сохраним форматирование этой ячейки как именованный стиль. Вы можете использовать любое форматирование, доступное в диалоговом окне «Форматирование ячеек.
- Перейдите на вкладку «Главная» -> «Стили ячеек» и выберите «Новый стиль ячеек». Откроется диалоговое окно «Стиль.
- Выберите название стиля, который вы будете использовать в будущем.
- Выберите параметры, которые нужно применить к выбранному стилю (по умолчанию выбраны все параметры). Если вам не нужны какие-либо параметры, например, вы не хотите изменять шрифт ячейки, снимите выделение с него.
- Щелкните кнопку ОК.
В результате к активной книге будет добавлен новый пользовательский стиль, который будет доступен в меню «Стили ячеек.