Excel как почитать ячейку

Содержание

  1. Чтение и запись значения ячейки в VBA
  2. Обращение к конкретной ячейке
  3. Чтение значения из ячейки
  4. Запись значения в ячейку
  5. Функция ЯЧЕЙКА в Excel и примеры ее использования
  6. Функция значения и свойства ячейки в Excel
  7. Как работает функция ЯЧЕЙКА в Excel?
  8. Примеры использования функции ЯЧЕЙКА в Excel
  9. Как узнать ширину таблицы Excel?
  10. Как получить значение первой ячейки в диапазоне
  11. VBA Excel. Ячейки (обращение, запись, чтение, очистка)
  12. Обращение к ячейке по адресу
  13. Обращение к ячейке по индексу
  14. Обращение к ячейке по имени
  15. Запись информации в ячейку
  16. Извлечение информации о ячейке функцией ЯЧЕЙКА (CELL)
  17. 1.Создание пользовательской функции
  18. 2.Использование пользовательской функции

Чтение и запись значения ячейки в 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 активного листа.

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

Источник

Функция ЯЧЕЙКА в Excel и примеры ее использования

Очень часто при работе в Excel необходимо использовать данные об адресации ячеек в электронной таблице. Для этого была предусмотрена функция ЯЧЕЙКА. Рассмотрим ее использование на конкретных примерах.

Функция значения и свойства ячейки в Excel

Стоит отметить, что в Excel используются несколько функций по адресации ячеек:

Функция ЯЧЕЙКА(), английская версия CELL(), возвращает сведения о форматировании, адресе или содержимом ячейки. Функция может вернуть подробную информацию о формате ячейки, исключив тем самым в некоторых случаях необходимость использования VBA. Функция особенно полезна, если необходимо вывести в ячейки полный путь файла.

Как работает функция ЯЧЕЙКА в Excel?

Функция ЯЧЕЙКА в своей работе использует синтаксис, который состоит из двух аргументов:

  1. Тип_сведений – текстовое значение, задающее требуемый тип сведений о ячейке. При вводе функции вручную высвечивается выпадающий список где указаны все возможные значения аргумента «тип сведений»:
  2. Ссылка – необязательный аргумент. Ячейка, сведения о которой требуется получить. Если этот аргумент опущен, сведения, указанные в аргументе тип_сведений, возвращаются для последней измененной ячейки. Если аргумент ссылки указывает на диапазон ячеек, функция ЯЧЕЙКА() возвращает сведения только для левой верхней ячейки диапазона.

Примеры использования функции ЯЧЕЙКА в Excel

Пример 1. Дана таблица учета работы сотрудников организации вида:

Необходимо с помощью функции ЯЧЕЙКА вычислить в какой строке и столбце находится зарплата размером 235000 руб.

Для этого введем формулу следующего вида:

  • – «строка» и «столбец» – параметр вывода;
  • – С8 – адрес данных с зарплатой.

В результате вычислений получим: строка №8 и столбец №3 (С).

Как узнать ширину таблицы Excel?

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

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

Введем в ячейку С14 формулу для вычисления суммы ширины каждого столбца таблицы:

  • – «ширина» – параметр функции;
  • – А1 – ширина определенного столбца.

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

Пример 3. В условии примера 1 нужно вывести содержимое только из первой (верхней левой) ячейки из диапазона A5:C8.

Введем формулу для вычисления:

Описание формулы аналогичное предыдущим двум примерам.

Источник

VBA Excel. Ячейки (обращение, запись, чтение, очистка)

Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

Обращение к ячейке по адресу

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

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

Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».

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

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.

Обращение к ячейке по индексу

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

Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.

Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):

Обращение к ячейке Range(«A1:C3»).Cells(5) соответствует выражению Range(«B2») .

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

Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.

Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range(«Итого») .

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

Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

Источник

Извлечение информации о ячейке функцией ЯЧЕЙКА (CELL)

Иногда бывает необходимо с помощью формул узнать о какой-либо ячейке подробную информацию и параметры, чтобы использовать это в расчетах. Например, выяснить число или текст в ячейке или какой числовой формат в ней установлен. Сделать это можно, используя функцию ЯЧЕЙКА (CELL) .

Синтаксис у функции следующий:

=ЯЧЕЙКА( Параметр ; Адрес )

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

Давайте рассмотрим пару трюков с применением этой функции на практике.

Например, можно получить имя текущего листа формулой, используя функцию ЯЧЕЙКА с параметром «имяфайла» и извлекающей все символы правее закрывающей квадратной скобки:

Также можно проверить тип данных в ячейке (параметр «тип») и выводить сообщение об ошибке вместо вычислений, если введен текст или ячейка пуста:

Или подсветить условным форматированием все незащищенные ячейки в заданном диапазоне:

Источник

Здраствуйте. Сегодня мы изучим возможность извлечения текста из примечания в ячейку Excel. Может случиться ситуация, когда Вам предоставили файл, где нужные сведения содержатся не в самих ячейках, а в примечаниях к ним. К примеру, Ваш руководитель оставил свои комментарии по прогнозу объема продаж в виде примечаний и Вам нужно сделать сравнение между тем прогнозом, что сделали Вы и Ваш руководитель. Можно конечно руками перебить все значения из примечаний в ячейки, но если таких случаев много – тогда наша инструкция придет на помощь.

К сожалению, встроенной формулы в Экселе на этот случай нет, но нам поможет Visual Basic for Application. В пошаговой инструкции я расскажу Вам, как создать пользовательскую функцию и как ее использовать. Итак, пункт первый:

1.Создание пользовательской функции

Function Get_Text_from_Comment(rCell As Range) As String
Dim sTxt As String
Application.Volatile True
On Error Resume Next
sTxt = rCell.Comment.Text
Get_Text_from_Comment = Mid(sTxt, InStr(sTxt, «:») + 2)
End Function

2.Использование пользовательской функции

  • Перейдите назад в книгу Excel.
  • Выделите любую свободную ячейку и вызовите мастер вставки функции
  • Перейдите в категорию «Определенные пользователем», выберите функцию Get_Text_from_Comment и нажмите Ок.
  • Далее укажите ту ячейку, которая содержит комментарий и нажмите Ок.

Готово. Мы получили текст из примечания в ячейку.

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

Не забывайте оставлять Ваши комментарии. Они очень важны для нас.

Источник

МЕНЮ

Company

Руководство пользователя

Установка, начало работы

Глоссарий

Переменные

Параметры скрипта

XPath

Рекомендации по настройке роботов

Релизы | Release notes

Работа с Citrix

Регулярные выражения

Где найти логи?

Работа с Sap Control Element

FlaUInspect

Дерево XPath

PIX BI

Что такое PIX BI

Лицензирование

Системные требования

Установка PIX BI

Обновление PIX BI

Модель данных

Создание дашборда

Changelog

Установка ClickHouse на Linux

Установка PostgreSQL на Linux

Активация лицензий

Установка PIX BI 1.23.227

Часто задаваемые вопросы по установке

PIX PS

Что такое PIX PS

Системные требования

PIX Studio

Системные требования

Описание

Интерфейс студии

Горячие клавиши

Активация

Конкурентная лицензия

Деактивация лицензии

Как добавить платформу PIX в исключения антивируса Dr. Web?

Настройки

Установка расширения Chrome

Web-драйвер Selenium

Разработка собственных активностей

Работа с Git

Подключение к PIX Master

Проект

Шаблон проекта

Загрузка/выгрузка проектов

Подключение к Базе Данных

Конвертер с UiPath на PIX

Типы данных

PIX Agent Host

PIX Master

Системные требования

Архитектура PIX Master

Настройка и использование

Установка PIX Master

Монитор

Агент

Загрузка проекта

Создание задачи

Процессы

Логирование

Создание пользователей

Роли

Аудит

Группы пользователей

Удержание сессии RDP

Данные

Администратор

Активация лицензии Мастер

Обновление PIX Master

Активация конкурентных лицензии

Очереди данных

Очереди задач

API к PIX Master

RabbitMQ

Машины

Подключение почтового сервера

Машины Установка службы управления агентами

Планировщик

Мягкая остановка

Режим обслуживания

Робот

Параметры запуска

Запуск Robot.exe через планировщик Windows

Работа робота в свернутом окне RDP

Примеры роботов

Запрос к 1С

Работа с таблицами

Windows Credential

Отправка писем

Строки (Регулярные выражения)

Парсинг JSON

Web Scraping

Заполнение таблицы в документе Word

Базовые активности

Случайное значение

Присвоить значение

Цикл — Прервать цикл

Цикл — Продолжить

Цикл с … по …

Цикл — Цикл для каждого

Цикл — Цикл пока…

Комментарий

Контейнер

Выполнить

Выполнить скрипт

Условный оператор

Иначе если

Return

Ожидание

Вызвать исключение

Try/Catch

Try/Fix

Записать лог

Окно ввода

Окно сообщения

Получить дату и время

Сравнить дату и время

Дата и время в виде строки

Изменить дату или время

Перейти на шаг | GoTo step

Выполнить Python код

Active Directory

Соединение с Active Directory

Получить отличительное имя

Получить свойства объекта

Коллекции

Список — Создать список

Список — Поместить объект

Список — Содержит объект?

Список — Преобразовать в строку

Список — Очистить список

Список — Удалить из списка

Словарь — Создать словарь

Словарь — Задать значение ключа

Словарь — Ключ существует?

Словарь — Удалить ключ

Словарь — Значение существует?

Словарь — Очистить словарь

Таблица — Создать таблицу

Таблица — Фильтровать таблицу

Таблица — Сортировать таблицу

Таблица — Добавить столбец

Таблица — Удалить столбец

Таблица — Добавить строку

Таблица — Удалить строку

Таблица — Объединенная таблица

Таблица — Таблица в виде строки

Таблица — Очистить таблицу

Капчи

Решить обычную капчу

Отправка отчета

Буфер обмена

Прочитать из буфера

Сохранить в буфер

Windows credential

Создать учётную запись

Получить данные учётной записи

CSV

Прочитать CSV

Записать в CSV

SQL

Создать подключение к БД

Выборка из БД

Выполнить команду

Сохранить таблицу в базу данных

Клавиатура

Нажать hotkey

Ввести текст с клавиатуры

Смена языка

Windows

Клик по UI-элементу

Скриншот

Проверка существования UI-элемента

Найти UI-элементы на экране

Скрыть/развернуть окно

Получить позицию UI-элемента на экране

Получить текст из UI-элемента

Выделить UI-элемент на экране

Навести курсор мыши на UI-элемент

Впечатать в UI-элемент тест

Ожидать UI-элемент

Прокрутить

Впечатать в UI-элемент SecureString

Фокусировка

Получить свойство

RDP

Клик по RDP-элементу

Проверка существования RDP-элемента

Впечатать в RDP-элемент

Найти RDP-элементы на экране

Получить текст из RDP-элемента

Ожидать RDP-элемент

SAP

Клик по элементу Sap Gui

Проверить существование элемента SAP GUI

Найти элемент SAP GUI

Получить элементы выпадающего списка SAP GUI

Извлечь таблицу SAP GUI

Впечатать в элемент Sap Gui

Получить текст из Sap Gui элемента

Выделить элемент Sap Gui на экране

Выбрать элемент в выпадающем списке SAP GUI

Ожидать элемент SAP GUI

Авторизоваться через Logon

Клик по контекстному меню панели инструментов

Клик по кнопке в панели инструментов

Получить свойство

Email

Получить Email (POP3)

Отправить Email (SMTP)

Получить письма (IMAP)

Переместить письма (IMAP)

Получить вложения

Отправить Email (SMTP)+вложение картинки

Получить письма MS Exchange

Удалить письмо MS Exchange

Получить вложения MS Exchange

Переместить письмо MS Exchange

Отправить письмо MS Exchange

Подключение к Exchange

Сохранить письмо

Файлы

Копировать файл/папку

Удалить файл/каталог

Путь существует?

Прочитать файл

Записать файл

Получить пути к файлам/каталогам

Создать папку

Распаковать

Запаковать

FTP

Создать каталог

Копировать в пределах FTP

Удалить элемент

Путь существует?

Скачать файл

Загрузить файл

Получить список файлов

Google Диск

Настройка сервиса Google Диск

Запустить сервис Google Диск

Копировать файл в Google Диск

Загрузить файл из Google Диск

Экспортировать документ Google

Выгрузить файл в Google Диск

Остановить сервис Google Диск

Google Таблицы

Настройка сервиса Google Таблицы

Очистить диапазон ячеек

Получить названия листов

Закрасить диапазон ячеек

Остановить сервис Google Таблицы

Запустить сервис Google Таблицы

Прочитать ячейку

Прочитать диапазон ячеек

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

Записать в диапазон ячеек

Google Документы

Настройка сервиса Google Документы

Запустить сервис Google Документы

Заполнить таблицы

Извлечь таблицы

Заменить текст

Остановить сервис Google Документы

HTTP

Отправить запрос

Изображения

Клик по изображению на экране

Найти картинку на экране

Получить изображение

Изображение на экране?

Ожидать изображение на экране

Распознать штрих-коды

Office — Excel общие

Создать стиль

Создать границу

Создать стиль текста

Office — Excel

Очистить/удалить диапазон ячеек

Прочитать ячейку

Прочитать диапазон ячеек

Закрасить диапазон ячеек

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

Записать в диапазон ячеек

Найти

Установить границы

Добавить комментарий

Считать примечание

Установить стиль

Считать стиль

Добавить / удалить строку

Листы — Добавить новый лист

Листы — Копировать лист

Листы — Список имен листов

Листы — Защитить лист

Листы — Удалить лист

Листы — Переименовать лист

Office — Outlook

Получить вложения

Перемещение письма

Получить письма

Ответить на письмо

Отправить сообщение

Получить список категорий

Задать категорию для писем

Office — Word

Заполнить таблицы в Word

Извлечь таблицы

Прочитать текст из Word

Записать в файл Word

Заменить текст в Word

Сохранить как

Office — Excel interop

Листы — Добавить новый лист

Листы — Копировать лист

Листы — Получить имена листов

Листы — Защитить лист

Листы — Удалить лист

Листы — Переименовать лист

Листы — Снять защиту листа

Открыть excel

Закрыть excel

Дописать диапазон

Создать сводную таблицу

Удалить столбец

Удалить строку

Удалить дубликат

Выделить диапазон

Выделить диапазон

Задать имя диапазону

Удалить | изменить имя диапазона

Парсинг

JSON

XML

Получить свойство JSON элемента

Найти узлы XML

PDF

Конвертировать PDF в изображения

Количество страниц

Получить изображения из PDF

Текст из PDF

Выбрать страницы

Объединить PDF файлы

Процессы Windows

Исполнить скрипт PowerShell

Получить список активных процессов

Завершить процессы

Запустить процесс

PIX Master (активности в PIX Studio)

Подтвердить завершение обработки элемента очереди

Получить элемент из очереди

Получить элементы очереди

Поместить элемент в очередь

Отменить элемент очереди

Получить данные из Master

Записать данные в Master

Получить данные из Master в виде SecureString

Обработать элемент из очереди

Установить комментарий элемента

Отложить элемент очереди

OCR

Dbrain

Microsoft Azure

Tesseract

Яндекс Vision

ABBYY Cloud OCR

Получить проекты

Распознать документ

Строки

Заменить подстроку

Строка содержит подстроку?

Представить объект как строку

Подстрока

Получить длину строки

Регулярное выражение

Разделить строку

Очистить строку от пробелов

Классифицировать

Расстояние Левенштейна

Мессенджеры.Telegram

Создать соединение с Telegram

Закрыть соединение Telegram

Скачать файл бота

Отправить файл в чат

Отправить контакт в чат

Отправить фото в чат

Отправить сообщение в чат

Менеджер Telegram

Машинное обучение

Классифицировать данные

Обучить классификационную модель

Предсказать значение

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

WEB

Клик по веб-элементу

Закрыть браузер

Проверить существование элемента

Выполнить код JavaScript

Найти веб-элементы

Получить значение веб-элемента

Назад

Вперед

Запустить Google Chrome

Запустить Internet Explorer

Запустить Firefox

Запустить браузер (Selenium)

Перейти по URL

Обновить

Извлечь данные

Выбрать опцию из списка

Впечатать значение в веб-элемент

Получить список доступных вкладок

Переключиться на вкладку

Получить атрибут

Ожидать web-элемент

Скачать файл

Java

Клик по элементу Java

Впечатать в элемент Java

Получить текст из Java элемента

Найти Java-элементы

Извлечь данные из таблицы Java

Ожидать Java-элемент

Выполнить запрос к 1С

Создать соединение 1С

Закрыть соединение с 1С

Выполнить код 1С

Changelog

PIX Studio

PIX Master

Прочитать ячейку

Активность находится в разделе Office-Excel.
Позволяет получить значение или формулу из указанной ячейки.

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

В первом случае необходимо заполнить следующие свойства:

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

*При определении ячейки через индексы вместо этого свойства задаются номера строки и колонки.

Иногда бывает необходимо с помощью формул узнать о какой-либо ячейке подробную информацию и параметры, чтобы использовать это в расчетах. Например, выяснить число или текст в ячейке или какой числовой формат в ней установлен. Сделать это можно, используя функцию ЯЧЕЙКА (CELL).

Синтаксис у функции следующий:

=ЯЧЕЙКА(Параметр; Адрес)

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

Параметры функции ЯЧЕЙКА (CELL)

Давайте рассмотрим пару трюков с применением этой функции на практике.

Например, можно получить имя текущего листа формулой, используя функцию ЯЧЕЙКА с параметром «имяфайла» и извлекающей все символы правее закрывающей квадратной скобки:

Имя листа формулой

Также можно проверить тип данных в ячейке (параметр «тип») и выводить сообщение об ошибке вместо вычислений, если введен текст или ячейка пуста:

Проверка содержимого ячейки функцией ЯЧЕЙКА

Или подсветить условным форматированием все незащищенные ячейки в заданном диапазоне:

Подсветка незащищенных ячеек

Ссылки по теме

  • Включение / выключение подсветки незащищенных ячеек макросом
  • Условное форматирование в Excel

Извлечение информации о ячейке функцией ЯЧЕЙКА (CELL)

Иногда бывает необходимо с помощью формул узнать о какой-либо ячейке подробную информацию и параметры, чтобы использовать это в расчетах. Например, выяснить число или текст в ячейке или какой числовой формат в ней установлен. Сделать это можно, используя функцию ЯЧЕЙКА (CELL) .

Синтаксис у функции следующий:

=ЯЧЕЙКА( Параметр ; Адрес )

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

Давайте рассмотрим пару трюков с применением этой функции на практике.

Например, можно получить имя текущего листа формулой, используя функцию ЯЧЕЙКА с параметром «имяфайла» и извлекающей все символы правее закрывающей квадратной скобки:

Также можно проверить тип данных в ячейке (параметр «тип») и выводить сообщение об ошибке вместо вычислений, если введен текст или ячейка пуста:

Или подсветить условным форматированием все незащищенные ячейки в заданном диапазоне:

Функция ЯЧЕЙКА() в MS EXCEL

Функция ЯЧЕЙКА( ) , английская версия CELL(), возвращает сведения о форматировании, адресе или содержимом ячейки. Функция может вернуть подробную информацию о формате ячейки, исключив тем самым в некоторых случаях необходимость использования VBA. Функция особенно полезна, если необходимо вывести в ячейки полный путь файла.

Синтаксис функции ЯЧЕЙКА()

ЯЧЕЙКА(тип_сведений, [ссылка])

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

ссылка — Необязательный аргумент. Ячейка, сведения о которой требуется получить. Если этот аргумент опущен, сведения, указанные в аргументе тип_сведений, возвращаются для последней измененной ячейки. Если аргумент ссылки указывает на диапазон ячеек, функция ЯЧЕЙКА() возвращает сведения только для левой верхней ячейки диапазона.

Использование функции

В файле примера приведены основные примеры использования функции:

Большинство сведений об ячейке касаются ее формата. Альтернативным источником информации такого рода может случить только VBA.

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

Обратите внимание, что если в одном экземпляре MS EXCEL (см. примечание ниже) открыто несколько книг, то функция ЯЧЕЙКА() с аргументами адрес и имяфайла, будет отображать имя того файла, с который Вы изменяли последним. Например, открыто 2 книги в одном окне MS EXCEL: Базаданных.xlsx и Отчет.xlsx. В книге Базаданных.xlsx имеется формула =ЯЧЕЙКА(«имяфайла») для отображения в ячейке имени текущего файла, т.е. Базаданных.xlsx (с полным путем и с указанием листа, на котором расположена эта формула). Если перейти в окно книги Отчет.xlsx и поменять, например, содержимое ячейки, то вернувшись в окно книги Базаданных.xlsx (CTRL+TAB) увидим, что в ячейке с формулой =ЯЧЕЙКА(«имяфайла») содержится имя Отчет.xlsx. Это может быть источником ошибки. Хорошая новость в том, что при открытии книги функция пересчитывает свое значение (также пересчитать книгу можно нажав клавишу F9). При открытии файлов в разных экземплярах MS EXCEL — подобного эффекта не возникает — формула =ЯЧЕЙКА(«имяфайла») будет возвращать имя файла, в ячейку которого эта формула введена.

Примечание: Открыть несколько книг EXCEL можно в одном окне MS EXCEL (в одном экземпляре MS EXCEL) или в нескольких. Обычно книги открываются в одном экземпляре MS EXCEL (когда Вы просто открываете их подряд из Проводника Windows или через Кнопку Офис в окне MS EXCEL). Второй экземпляр MS EXCEL можно открыть запустив файл EXCEL.EXE, например через меню Пуск. Чтобы убедиться, что файлы открыты в одном экземпляре MS EXCEL нажимайте последовательно сочетание клавиш CTRL+TAB — будут отображаться все окна Книг, которые открыты в данном окне MS EXCEL. Для книг, открытых в разных окнах MS EXCEL (экземплярах MS EXCEL) это сочетание клавиш не работает. Удобно открывать в разных экземплярах Книги, вычисления в которых занимают продолжительное время. При изменении формул MS EXCEL пересчитывает только книги открытые в текущем экземпляре.

Другие возможности функции ЯЧЕЙКА() : определение типа значения, номера столбца или строки, мало востребованы, т.к. дублируются стандартными функциями ЕТЕКСТ() , ЕЧИСЛО() , СТОЛБЕЦ() и др.

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

Итак, решая очередную головоломку с закупкой материалов, я встал перед следующей ситуацией:

Даны две таблицы Excel на разных листах:

В таблице №1 строка состоит из пустых полей: уникальный номер товара, наименование, количество и т.п.

В таблице №2 строки непосредственно с данными: номер товара, название товара, цена, комплектность и т.п.

Я хочу связать эти таблички таким образом, чтобы при заполнении уникального номера в колонке таблицы №1 цена и название подтягивались из таблицы №2

Не хочу использовать для этого ни макросы, ни какое либо программирование, а выполнить эту задачу только средствами самого Excel

для этого мне нужно решить две задачи:

1) Найти в таблице строку, в которой находится информация о товаре

2) Используя знания об этой строке, вставить значение из нужного поля(столбца).

Решаем первую задачу:

= ПОИСКПОЗ(G11;Цены!A:A;0)

G11 — это та ячейка, куда мы вбиваем уникальный номер товара,

Цены!A:A — это колонка с уникальными номерами товаров

— формат вывода в абсолютных значениях, оставляем так, либо изучаем вопрос самостоятельно =)

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

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

Например за цену у нас ответственный второй столбец во второй таблице

= АДРЕС( ПОИСКПОЗ(G11;Цены!A:A;0); 2; 1;1; ‘Цены’ )

где тип ссылки абсолютный, то есть 1

и формат адреса ячеек не буквенно-числовые вида A11 B876 и т.д. , а R11C1, R876C2 и т.п

то-есть номера строк и столбцов сразу очевидны за этот формат у нас отвечает последняя 1

Сам адрес мы получаем для вкладки «Цены» , потому не забываем и её указать, иначе поиск значений будет идти на странице с таблицей 1

Мы уже у финиша

Следующая головоломка которую я не решил, зато мне подсказал мой приятель — гений Экселя.

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

Всё просто, это функция

таким образом полная формула получится вида:

=ДВССЫЛ(АДРЕС(ПОИСКПОЗ(G11;Цены!A:A;0); 2 ;1;1;’Цены’)),

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

Теперь не нужно ломать голову по поводу проверки вводимых данных, они берутся полностью из имеющейся таблицы, которую до меня уже проверили ГЫГЫГЫ =)

Функция ЯЧЕЙКА в Excel и примеры ее использования

Очень часто при работе в Excel необходимо использовать данные об адресации ячеек в электронной таблице. Для этого была предусмотрена функция ЯЧЕЙКА. Рассмотрим ее использование на конкретных примерах.

Функция значения и свойства ячейки в Excel

Стоит отметить, что в Excel используются несколько функций по адресации ячеек:

Функция ЯЧЕЙКА(), английская версия CELL(), возвращает сведения о форматировании, адресе или содержимом ячейки. Функция может вернуть подробную информацию о формате ячейки, исключив тем самым в некоторых случаях необходимость использования VBA. Функция особенно полезна, если необходимо вывести в ячейки полный путь файла.

Как работает функция ЯЧЕЙКА в Excel?

Функция ЯЧЕЙКА в своей работе использует синтаксис, который состоит из двух аргументов:

  1. Тип_сведений – текстовое значение, задающее требуемый тип сведений о ячейке. При вводе функции вручную высвечивается выпадающий список где указаны все возможные значения аргумента «тип сведений»:
  2. Ссылка – необязательный аргумент. Ячейка, сведения о которой требуется получить. Если этот аргумент опущен, сведения, указанные в аргументе тип_сведений, возвращаются для последней измененной ячейки. Если аргумент ссылки указывает на диапазон ячеек, функция ЯЧЕЙКА() возвращает сведения только для левой верхней ячейки диапазона.

Примеры использования функции ЯЧЕЙКА в Excel

Пример 1. Дана таблица учета работы сотрудников организации вида:

Необходимо с помощью функции ЯЧЕЙКА вычислить в какой строке и столбце находится зарплата размером 235000 руб.

Для этого введем формулу следующего вида:

  • – «строка» и «столбец» – параметр вывода;
  • – С8 – адрес данных с зарплатой.

В результате вычислений получим: строка №8 и столбец №3 (С).

Как узнать ширину таблицы Excel?

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

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

Введем в ячейку С14 формулу для вычисления суммы ширины каждого столбца таблицы:

  • – «ширина» – параметр функции;
  • – А1 – ширина определенного столбца.

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

Пример 3. В условии примера 1 нужно вывести содержимое только из первой (верхней левой) ячейки из диапазона A5:C8.

Введем формулу для вычисления:

Описание формулы аналогичное предыдущим двум примерам.

Видимое значение ячейки в реальное

Часто из всем известной 1С отчеты выгружаются в Excel. Что не удивительно, ведь многие используют 1С как базу ведения всевозможных данных, а анализ предпочитают производить в Excel. И это удобно, это работает. Но часто при получении файла из 1С форматы ячеек изменены так, что отображается в ячейках одно значение, а на деле там значение совершенно иное:

Чтобы не возникло недопонимания, что это такое на картинках выше. Например, если в ячейку записать число 1077 , то оно и отобразится так же. Однако его визуальное отображение в ячейках можно изменить: выделяем ячейку -правая кнопка мыши —Формат ячеек (Format Cells) -вкладка Число (Number) . Далее в списке слева выбрать Дополнительный (Special) и установить Почтовый индекс. Тогда в ячейке визуально будет отображаться 001077 , в то время как реально в ячейке будет оставаться все то же число 1077 . Тоже и с датами. Реально в ячейке число, а визуально дата в одном из форматов из категории Дата. Подробнее про то, почему так происходит можно прочесть в статье: Как Excel воспринимает данные?
И как это всегда бывает — порой просто необходимо работать не с тем значением, которое реально в ячейке, а именно с теми, которые отображаются в ячейках. Яркий пример такой необходимости — это сцепление данных двух ячеек, в одной из которых записана дата. Например, в A1 записана дата » 06.02.2016 «, а в B1 текст вроде » Отчет по магазину за » и необходимо сцепить текст из B1 с датой из A1 . Если применить просто функцию СЦЕПИТЬ (CONCATENATE) или по простому = B1 & A1 , то результатом будет такой текст: Отчет по магазину за 42406 .
Если формат лишь один — можно стандартно попробовать побороть при помощи функции ТЕКСТ(TEXT). Например, в ячейках столбца А записаны даты в формате 31 января 2016г. Тогда формулу можно записать так:
=ТЕКСТ( A2 ;»[$-F800]ДДДД, ММММ ДД, ГГГГ»)
=TEXT( A2 ,»[$-F800]dddd, MMMM yy, yyyy»)
На примере той же СЦЕПИТЬ (CONCATENATE) :
=СЦЕПИТЬ( B1 ;ТЕКСТ( A1 ;»[$-F800]ДДДД, ММММ ДД, ГГГГ»))
=CONCATENATE( B1 ,TEXT( A1 ,»[$-F800]dddd, MMMM yy, yyyy»))

Сами вид формата для использования в функции ТЕКСТ можно подсмотреть непосредственно в форматах ячеек: правая кнопка мыши на ячейке —Формат ячеек (Format Cells) -вкладка Число (Number) -(все форматы). Там в поле Тип будет как раз приведен применяемый код формата. Можно его просто скопировать оттуда и вставить в функцию ТЕКСТ .
Но если форматы в ячейках различаются и записаны в разнобой. Стандартно этого никак не сделать, кроме как каждую ячейку руками перебивать. Но если прибегнуть к помощи Visual Basic for Applications(VBA), то можно написать простую функцию пользователя(Что такое функция пользователя(UDF)) и применить её:

Function VisualVal_Text(rc As Range) VisualVal_Text = rc.Text End Function

Для применения надо внимательно прочитать про создание функций пользователя. После этого в ячейку останется записать:
=VisualVal_Text( A1 )
и раскопировать ячейку на весь столбец. После этого можно заменить результат функции значениями(Как удалить в ячейке формулу, оставив значения) и все готово. Но и в этой функции есть недостаток. Если в ячейке отображается значение, которое не помещается в границы ячейки, то оно может быть обрезано или вместо значения будут решетки. Например, если дата в указанном формате не помещается в ячейку — вместо значений будут решетки #######:

и функция VisualVal_Text вернет так же решетки. Это тоже решаемо. Можно либо перед применением расширить столбцы с исходными данными так, чтобы значение отображалось правильно и полностью, либо применить чуть другую функцию пользователя:

Function VisualVal(rc As Range) VisualVal = Application.Text(rc.Value, rc.NumberFormat) End Function

Используется и записывается в ячейку так же, как и предыдущая:
=VisualVal( A1 )
Эта функция без всяких танцев с бубном вернет отображаемое форматом ячейки значение.

И вариант применения функции вместе с функцией СЦЕПИТЬ:
=СЦЕПИТЬ( B1 ;VisualVal_Text( A1 ))
=CONCATENATE( B1 ,VisualVal_Text( A1 ))
=СЦЕПИТЬ( B1 ;VisualVal( A1 ))
=CONCATENATE( B1 ,VisualVal( A1 ))
Как видно не надо задумываться о том какой применить формат — будет записано так же, как оно отображается в ячейке.

Все варианты решений можно посмотреть в примере :

Tips_Macro_CellValToVisual.xls (48,5 KiB, 679 скачиваний)

Статья помогла? Поделись ссылкой с друзьями!

Поиск по меткам

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме — добро пожаловать на Форум

Обращение к ячейке на листе Excel из кода VBA по адресу, индексу и имени. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

Обращение к ячейке по адресу

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга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» можно записать следующим образом:

ActiveCell

Range(«A1»)

Cells(1, 1)

Cells(1, «A»)

[A1]

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере – это ячейка «A1».

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

‘по основному имени листа

Лист2.Cells(2, 7)

‘по имени ярлыка

Sheets(«Имя ярлыка»).Cells(3, 8)

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках – имя ярлыка.

Обращение к ячейке по индексу

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

Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе, зависящему от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее.

Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

По индексу можно обращаться к ячейке не только на всем рабочем листе, но и в отдельном диапазоне. Нумерация ячеек осуществляется в пределах заданного диапазона по тому же правилу: слева-направо и сверху-вниз. Вот индексы ячеек диапазона Range(«A1:C3»):

Индексы ячеек в диапазоне Range("A1:C3")

Обращение к ячейке Range("A1:C3").Cells(5) соответствует выражению Range("B2").

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

Если ячейке на рабочем листе Excel присвоено имя (Формулы –> Присвоить имя), то обращаться к ней можно по присвоенному имени.

Допустим одной из ячеек присвоено имя – «Итого», тогда обратиться к ней можно – Range("Итого").

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

Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

Cells(2, 4).Value = 15

Cells(2, 4) = 15

Range(«A1») = «Этот текст записываем в ячейку»

ActiveCell = 28 + 10*36

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

Чтение информации из ячейки

Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:

Sub Test()

Dim a1 As Integer, a2 As Integer, a3 As Integer

Range(«A3») = 6

Cells(2, 5) = 15

a1 = Range(«A3»)

a2 = Cells(2, 5)

a3 = a1 * a2

MsgBox a3

End Sub

Точно также можно обмениваться информацией между ячейками:

Cells(2, 2) = Range(«A4»)

Очистка значения ячейки

Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля. пустой строки или Empty:

Cells(10, 2).ClearContents

Range(«D23») = 0

ActiveCell = «»

Cells(5, «D») = Empty

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

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

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

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

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

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

Workbooks("Книга1.xls").Sheets("Лист1").Range("A3") ' Обратиться к ячейке A3
Workbooks("Книга1.xls").Sheets("Лист1").Cells(3, 1) ' Обратиться к ячейке в 3-й строке и 1-й колонке (A3)

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

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

Range("A1")
Cells(1, 1)

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

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

With Workbooks("Книга1").Sheets("Лист2")
  ' Вывести значение ячейки A1, которая находится на Листе2
  MsgBox .Range("A1")
  ' Вывести значение ячейки B1, которая находится на Листе2
  MsgBox .Range("B1")
End With

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

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

Application.ActiveCell ' полная запись
ActiveCell ' краткая запись

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

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

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

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

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

MsgBox Cells(1, 1)        ' выведет 01.03.2018
MsgBox Cells(1, 1).Value  ' выведет 01.03.2018
MsgBox Cells(1, 1).Value2 ' выведет 43160
MsgBox Cells(1, 1).Text   ' выведет 01 марта 2018 г.

Dim d As Date
d = Cells(1, 1).Value2    ' числовое представление даты преобразуется в тип Date
MsgBox d                  ' выведет 01.03.2018

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

MsgBox Range("C1")        ' выведет 123,4568
MsgBox Range("C1").Value  ' выведет 123,4568
MsgBox Range("C1").Value2 ' выведет 123,456789
MsgBox Range("C1").Text   ' выведет 123,457р.

Dim c As Currency
c = Range("C1").Value2    ' значение преобразуется в тип Currency
MsgBox c                  ' выведет 123,4568

Dim d As Double
d = Range("C1").Value2    ' значение преобразуется в тип Double
MsgBox d                  ' выведет 123,456789

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

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

Dim s As String
Dim i As Integer
s = Range("B1").Value2 ' успех
i = Range("B1").Value2 ' ошибка

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

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

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

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

Range("A1") = 123.45
Range("A1").Value = 123.45
Range("A1").Value2 = 123.45

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

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

Cells(2, 1) = #3/1/2018#
Cells(2, 1).Value = #3/1/2018#
Cells(2, 1).Value2 = #3/1/2018#

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

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

yagami2

21 / 19 / 4

Регистрация: 15.01.2015

Сообщений: 202

1

22.07.2017, 13:53. Показов 10455. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Приветствую. Недавно начал юзать OpenXML сделал все как в справонике https://msdn.microsoft.com/ru-… 98534.aspx
Получилось вот что:

C#
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
        public static string GetCellValue(string fileName, string sheetName, string addressName)
        { 
            string value = null;
        
            // открываем докумен только на чтение
            using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false))
            {
                // Retrieve a reference to the workbook part.
                WorkbookPart wbPart = document.WorkbookPart;
 
                // найти лист по имени
                Sheet theSheet = wbPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName).FirstOrDefault();
 
                // если нет листа
                if (theSheet == null)
                {
                    throw new ArgumentException("sheetName");
                }
 
                // Retrieve a reference to the worksheet part.
                WorksheetPart wsPart = (WorksheetPart)(wbPart.GetPartById(theSheet.Id));
 
                // получаем ссылку на ячейку
                Cell theCell = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault();
 
                if (theCell != null)
                {
                    value = theCell.InnerText;
                    
                    if (theCell.DataType != null)
                    {
                        switch (theCell.DataType.Value)
                        {
                            case CellValues.SharedString:
                                var stringTable = wbPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault();
                                if (stringTable != null)
                                {
                                    value = stringTable.SharedStringTable.ElementAt(int.Parse(value)).InnerText;
                                }
                                break;
                            case CellValues.Boolean:
                                switch (value)
                                {
                                    case "0":
                                        value = "FALSE";
                                        break;
                                    default:
                                        value = "TRUE";
                                        break;
                                }
                                break;
                        }
                    }
                }
            }
            return value;

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

C#
1
2
                // получаем ссылку на ячейку
                Cell theCell = wsPart.Worksheet.Descendants<Cell>().Where(c => c.CellReference == addressName).FirstOrDefault();

Что делаю не так?

PS файл xlsx весом примерно 30мб



0



325 / 304 / 173

Регистрация: 16.11.2010

Сообщений: 1,069

Записей в блоге: 9

22.07.2017, 16:10

2

Цитата
Сообщение от yagami2
Посмотреть сообщение

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

Я как-то делал перебор List<>.ForEach(). Тормозил сильно, заменил на обычный перебор в цикле for вручную, быстрее в 10 раз. Как оказалось Linq хорошопомогают сокращать код, но не всегда оптимизированы по скорости. 100% утверждать не могу, но может быть и тут ручной перебор лучше будет…

Да и файл 30мб — не маленький, нужно сказать. Обычный небольшой файл 1мб считался бы быстрее секунды, и никто бы не заметил…



1



21 / 19 / 4

Регистрация: 15.01.2015

Сообщений: 202

23.07.2017, 08:28

 [ТС]

3

А можете подсказать как перевести это на цикл for? Не догоняю, что именно перебирать нужно…
И можно ли просто считать все ячейки подряд? Как я понял много времени уходит на то чтобы перебрать все ячейки пока не найдем с нужным именем… А если считывать все подряд в массив на потом уже с этим работать



0



Pavel55

971 / 353 / 135

Регистрация: 27.10.2006

Сообщений: 764

23.07.2017, 19:45

4

А вариант через Interop не подойдёт ?

using Excel = Microsoft.Office.Interop.Excel;

Вариант 1 — просто взять значение ячейки А1 с листа «Лист1»

C#
1
2
3
4
5
6
7
Excel.Application xlApp = new Excel.Application(); //Excel
Excel.Workbook xlWB; //рабочая книга            
Excel.Worksheet xlSht; //лист Excel
 
xlWB = xlApp.Workbooks.Open(@"G:C#Test Excel.xlsx"); //название файла Excel                                 
xlSht = xlWB.Worksheets["Лист1"]; //название листа или 1-й лист в книге xlSht = xlWB.Worksheets[1];
string a = xlSht.Range["A1"].Value; //берём значение ячейки в переменную

Вариант 2 — берём данные с листа в массив и что-то делаем с ними

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Excel.Application xlApp = new Excel.Application(); //Excel
Excel.Workbook xlWB; //рабочая книга            
Excel.Worksheet xlSht; //лист Excel            
Excel.Range Rng; //диапазон ячеек            
 
xlWB = xlApp.Workbooks.Open(@"G:C#Test Excel.xlsx"); //название файла Excel                                 
xlSht = xlWB.Worksheets["Лист1"]; //название листа или 1-й лист в книге xlSht = xlWB.Worksheets[1];
int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;  //последняя заполненная строка в столбце А
int iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке
//var arrData = (object[,])xlSht.Range["A1:M" + iLastRow].Value; //берём данные с листа Excel           
var arrData = (object[,])xlSht.Range[xlSht.Range["A1"], xlSht.Cells[iLastRow, iLastCol]].Value; //берём данные с листа Excel в двумерный массив
            
int iTotalRows = arrData.GetUpperBound(0);
int iTotalColumns = arrData.GetUpperBound(1);
 
//цикл по строкам и столбцам массива с данными с листа 
for (int iRow = 1; iRow <= iTotalRows; iRow++) //цикл по строкам
{                
        for (int iCol = 1; iCol <= iTotalColumns; iCol++) //цикл по столбцам
        {
            //что-то делаем с данными
            //arrResult[iRowInResultArray, iCol-1] = arrData[iRow, iCol].ToString(); //перекладываем данные с общего массива в чистый массив
        }            
}



1



21 / 19 / 4

Регистрация: 15.01.2015

Сообщений: 202

25.07.2017, 16:10

 [ТС]

5

Цитата
Сообщение от Pavel55
Посмотреть сообщение

А вариант через Interop не подойдёт ?

увы, но мой босс сказал чтоб никаких com объектов

В итоге забил на openXML и использовал Excel Data Reader, и за пять строчек считал весь файл в dataset. Он конечно при этом 250мб оперативы отжирает, но это давняя дилемма «память vs время»
Если кому надо пример тут https://gist.github.com/Munawwar/924413



0



D_Rinat_S

0 / 0 / 0

Регистрация: 12.03.2012

Сообщений: 20

1

12.03.2012, 19:20. Показов 13450. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Помогите пожалуйста разобраться. Я Открываю Эксель документ через OpenFileDialog1, могу вносить изменения в него но не могу считывать ячейки. Пишу sgBox(AppSheet.Cells(3, 3)) и никакого результата. В чем может быть причина?

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub load_Excel()
        OpenFileDialog1.Filter = "Файлы Excel|*.xlsx|Все файлы|*.*"
        OpenFileDialog1.FileName = Nothing
        OpenFileDialog1.ShowDialog()
        Dim AppExcel As Object
        Dim AppSheet As Object
        On Error Resume Next
        AppExcel = GetObject(, "Excel.Application")
        If Err.Number <> 0 Then AppExcel = CreateObject("Excel.Application")
        AppExcel.Workbooks.Open(OpenFileDialog1.FileName)
        AppSheet = AppExcel.Sheets("Базис")
        AppExcel.visible = True
        AppSheet.Cells(3, 3) = 45
        MsgBox(AppSheet.Cells(3, 3))
 
End Sub



0



1706 / 1194 / 227

Регистрация: 23.12.2010

Сообщений: 1,526

12.03.2012, 19:53

2

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

AppSheet.Cells(3, 3).value — чтобы достучаться до содержимого ячейки. Ну а там уже по месту — либо читаешь из нее (expression=AppSheet.Cells(3, 3).value), либо заносишь в нее (AppSheet.Cells(3, 3).value = expression). Где expression — некая переменная
А так AppSheet.Cells(3, 3) — получаешь ссылку на объект типа Range (см. справку по VBA в excel)



0



0 / 0 / 0

Регистрация: 12.03.2012

Сообщений: 20

12.03.2012, 19:59

 [ТС]

3

Большое спасибо я блин целый час сижу уже)))



0



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