Berd
Пользователь
Сообщений: 5
Регистрация: 09.07.2017
#4
09.07.2017 22:05:36
Не вы меня поняли, надо сделать, чтобы в диапазоне от D5:D8 с фамилиями, на одной ячейке J5, отображался результат среди выбранных фамилий при наведении указателя ячейки или нажатии клавиши Enter
Изменено: Berd — 09.07.2017 22:06:57
Всё о работе с ячейками в Excel-VBA: обращение, перебор, удаление, вставка, скрытие, смена имени.
Содержание:
Table of Contents:
- Что такое ячейка Excel?
- Способы обращения к ячейкам
- Выбор и активация
- Получение и изменение значений ячеек
- Ячейки открытой книги
- Ячейки закрытой книги
- Перебор ячеек
- Перебор в произвольном диапазоне
- Свойства и методы ячеек
- Имя ячейки
- Адрес ячейки
- Размеры ячейки
- Запуск макроса активацией ячейки
2 нюанса:
- Я почти везде стараюсь использовать ThisWorkbook (а не, например, ActiveWorkbook) для обращения к текущей книге, в которой написан этот код (считаю это наиболее безопасным для новичков способом обращения к книгам, чтобы случайно не внести изменения в другие книги). Для экспериментов можете вставлять этот код в модули, коды книги, либо листа, и он будет работать только в пределах этой книги.
- Я использую английский эксель и у меня по стандарту листы называются Sheet1, Sheet2 и т.д. Если вы работаете в русском экселе, то замените Thisworkbook.Sheets(«Sheet1») на Thisworkbook.Sheets(«Лист1»). Если этого не сделать, то вы получите ошибку в связи с тем, что пытаетесь обратиться к несуществующему объекту. Можно также заменить на Thisworkbook.Sheets(1), но это менее безопасно.
Что такое ячейка Excel?
В большинстве мест пишут: «элемент, образованный пересечением столбца и строки». Это определение полезно для людей, которые не знакомы с понятием «таблица». Для того, чтобы понять чем на самом деле является ячейка Excel, необходимо заглянуть в объектную модель Excel. При этом определения объектов «ряд», «столбец» и «ячейка» будут отличаться в зависимости от того, как мы работаем с файлом.
Объекты в Excel-VBA. Пока мы работаем в Excel без углубления в VBA определение ячейки как «пересечения» строк и столбцов нам вполне хватает, но если мы решаем как-то автоматизировать процесс в VBA, то о нём лучше забыть и просто воспринимать лист как «мешок» ячеек, с каждой из которых VBA позволяет работать как минимум тремя способами:
- по цифровым координатам (ряд, столбец),
- по адресам формата А1, B2 и т.д. (сценарий целесообразности данного способа обращения в VBA мне сложно представить)
- по уникальному имени (во втором и третьем вариантах мы будем иметь дело не совсем с ячейкой, а с объектом VBA range, который может состоять из одной или нескольких ячеек). Функции и методы объектов Cells и Range отличаются. Новичкам я бы порекомендовал работать с ячейками VBA только с помощью Cells и по их цифровым координатам и использовать Range только по необходимости.
Все три способа обращения описаны далее
Как это хранится на диске и как с этим работать вне Excel? С точки зрения хранения и обработки вне Excel и VBA. Сделать это можно, например, сменив расширение файла с .xls(x) на .zip и открыв этот архив.
Пример содержимого файла Excel:
Далее xl -> worksheets и мы видим файл листа
Содержимое файла:
То же, но более наглядно:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{00000000-0001-0000-0000-000000000000}">
<dimension ref="B2:F6"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="D12" sqref="D12"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="14.4" x14ac:dyDescent="0.3"/>
<sheetData>
<row r="2" spans="2:6" x14ac:dyDescent="0.3">
<c r="B2" t="s">
<v>0</v>
</c>
</row>
<row r="3" spans="2:6" x14ac:dyDescent="0.3">
<c r="C3" t="s">
<v>1</v>
</c>
</row>
<row r="4" spans="2:6" x14ac:dyDescent="0.3">
<c r="D4" t="s">
<v>2</v>
</c>
</row>
<row r="5" spans="2:6" x14ac:dyDescent="0.3">
<c r="E5" t="s">
<v>0</v></c>
</row>
<row r="6" spans="2:6" x14ac:dyDescent="0.3">
<c r="F6" t="s"><v>3</v>
</c></row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
Как мы видим, в структуре объектной модели нет никаких «пересечений». Строго говоря рабочая книга — это архив структурированных данных в формате XML. При этом в каждую «строку» входит «столбец», и в нём в свою очередь прописан номер значения данного столбца, по которому оно подтягивается из другого XML файла при открытии книги для экономии места за счёт отсутствия повторяющихся значений. Почему это важно. Если мы захотим написать какой-то обработчик таких файлов, который будет напрямую редактировать данные в этих XML, то ориентироваться надо на такую модель и структуру данных. И правильное определение будет примерно таким: ячейка — это объект внутри столбца, который в свою очередь находится внутри строки в файле xml, в котором хранятся данные о содержимом листа.
Способы обращения к ячейкам
Выбор и активация
Почти во всех случаях можно и стоит избегать использования методов Select и Activate. На это есть две причины:
- Это лишь имитация действий пользователя, которая замедляет выполнение программы. Работать с объектами книги можно напрямую без использования методов Select и Activate.
- Это усложняет код и может приводить к неожиданным последствиям. Каждый раз перед использованием Select необходимо помнить, какие ещё объекты были выбраны до этого и не забывать при необходимости снимать выбор. Либо, например, в случае использования метода Select в самом начале программы может быть выбрано два листа вместо одного потому что пользователь запустил программу, выбрав другой лист.
Можно выбирать и активировать книги, листы, ячейки, фигуры, диаграммы, срезы, таблицы и т.д.
Отменить выбор ячеек можно методом Unselect:
Selection.Unselect
Отличие выбора от активации — активировать можно только один объект из раннее выбранных. Выбрать можно несколько объектов.
Если вы записали и редактируете код макроса, то лучше всего заменить Select и Activate на конструкцию With … End With. Например, предположим, что мы записали вот такой макрос:
Sub Macro1()
' Macro1 Macro
Range("F4:F10,H6:H10").Select 'выбрали два несмежных диапазона зажав ctrl
Range("H6").Activate 'показывает только то, что я начал выбирать второй диапазон с этой ячейки (она осталась белой). Это действие ни на что не влияет
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535 'залили желтым цветом, нажав на кнопку заливки на верхней панели
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Почему макрос записался таким неэффективным образом? Потому что в каждый момент времени (в каждой строке) программа не знает, что вы будете делать дальше. Поэтому в записи выбор ячеек и действия с ними — это два отдельных действия. Этот код лучше всего оптимизировать (особенно если вы хотите скопировать его внутрь какого-нибудь цикла, который должен будет исполняться много раз и перебирать много объектов). Например, так:
Sub Macro11()
'
' Macro1 Macro
Range("F4:F10,H6:H10").Select '1. смотрим, что за объект выбран (что идёт до .Select)
Range("H6").Activate
With Selection.Interior '2. понимаем, что у выбранного объекта есть свойство interior, с которым далее идёт работа
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Sub Optimized_Macro()
With Range("F4:F10,H6:H10").Interior '3. переносим объект напрямую в конструкцию With вместо Selection
' ////// Здесь я для надёжности прописал бы ещё Thisworkbook.Sheet("ИмяЛиста") перед Range,
' ////// чтобы минимизировать риск любых случайных изменений других листов и книг
' ////// With Thisworkbook.Sheet("ИмяЛиста").Range("F4:F10,H6:H10").Interior
.Pattern = xlSolid '4. полностью копируем всё, что было записано рекордером внутрь блока with
.PatternColorIndex = xlAutomatic
.Color = 55555 '5. здесь я поменял цвет на зеленый, чтобы было видно, работает ли код при поочерёдном запуске двух макросов
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Пример сценария, когда использование Select и Activate оправдано:
Допустим, мы хотим, чтобы во время исполнения программы мы одновременно изменяли несколько листов одним действием и пользователь видел какой-то определённый лист. Это можно сделать примерно так:
Sub Select_Activate_is_OK()
Thisworkbook.Worksheets(Array("Sheet1", "Sheet3")).Select 'Выбираем несколько листов по именам
Thisworkbook.Worksheets("Sheet3").Activate 'Показываем пользователю третий лист
'Далее все действия с выбранными ячейками через Select будут одновременно вносить изменения в оба выбранных листа
'Допустим, что тут мы решили покрасить те же два диапазона:
Range("F4:F10,H6:H10").Select
Range("H6").Activate
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
Единственной причиной использовать этот код по моему мнению может быть желание зачем-то показать пользователю определённую страницу книги в какой-то момент исполнения программы. С точки зрения обработки объектов, опять же, эти действия лишние.
Получение и изменение значений ячеек
Значение ячеек можно получать/изменять с помощью свойства value.
'Если нужно прочитать / записать значение ячейки, то используется свойство Value
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'записать значение ячейки А1 листа "Sheet1" в переменную "a"
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value = 1 'задать значение ячейки А1 (первый ряд, первый столбец) листа "Sheet1"
'Если нужно прочитать текст как есть (с форматированием), то можно использовать свойство .text:
ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text = "1"
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text
'Когда проявится разница:
'Например, если мы считываем дату в формате "31 декабря 2021 г.", хранящуюся как дата
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Value 'эапишет как "31.12.2021"
a = ThisWorkbook.Sheets("Sheet1").Cells (1,1).Text 'запишет как "31 декабря 2021 г."
Ячейки открытой книги
К ячейкам можно обращаться:
'В книге, в которой хранится макрос (на каком-то из листов, либо в отдельном модуле или форме)
ThisWorkbook.Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
ThisWorkbook.Sheets("Sheet1").Cells(1,"A").Value 'По номерам строки и букве столбца
ThisWorkbook.Sheets("Sheet1").Range("A1").Value 'По адресу - вариант 1
ThisWorkbook.Sheets("Sheet1").[A1].Value 'По адресу - вариант 2
ThisWorkbook.Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)
'Те же действия, но с использованием полного названия рабочей книги (книга должна быть открыта)
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,1).Value 'По номерам строки и столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Cells(1,"A").Value 'По номерам строки и букве столбца
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("A1").Value 'По адресу - вариант 1
Workbooks("workbook.xlsm").Sheets("Sheet1").[A1].Value 'По адресу - вариант 2
Workbooks("workbook.xlsm").Sheets("Sheet1").Range("CellName").Value 'По имени ячейки (для этого ей предварительно нужно его присвоить)
Ячейки закрытой книги
Если нужно достать или изменить данные в другой закрытой книге, то необходимо прописать открытие и закрытие книги. Непосредственно работать с закрытой книгой не получится, потому что данные в ней хранятся отдельно от структуры и при открытии Excel каждый раз производит расстановку значений по соответствующим «слотам» в структуре. Подробнее о том, как хранятся данные в xlsx см выше.
Workbooks.Open Filename:="С:closed_workbook.xlsx" 'открыть книгу (она становится активной)
a = ActiveWorkbook.Sheets("Sheet1").Cells(1,1).Value 'достать значение ячейки 1,1
ActiveWorkbook.Close False 'закрыть книгу (False => без сохранения)
Скачать пример, в котором можно посмотреть, как доставать и как записывать значения в закрытую книгу.
Код из файла:
Option Explicit
Sub get_value_from_closed_wb() 'достать значение из закрытой книги
Dim a, wb_path, wsh As String
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
Workbooks.Open Filename:=wb_path
a = ActiveWorkbook.Sheets(wsh).Cells(3, 3).Value
ActiveWorkbook.Close False
ThisWorkbook.Sheets("Sheet1").Cells(4, 3).Value = a
End Sub
Sub record_value_to_closed_wb() 'записать значение в закрытую книгу
Dim wb_path, b, wsh As String
wsh = ThisWorkbook.Sheets("Sheet1").Cells(3, 3).Value
wb_path = ThisWorkbook.Sheets("Sheet1").Cells(2, 3).Value 'get path to workbook from sheet1
b = ThisWorkbook.Sheets("Sheet1").Cells(5, 3).Value 'get value to record in the target workbook
Workbooks.Open Filename:=wb_path
ActiveWorkbook.Sheets(wsh).Cells(4, 4).Value = b 'add new value to cell D4 of the target workbook
ActiveWorkbook.Close True
End Sub
Перебор ячеек
Перебор в произвольном диапазоне
Скачать файл со всеми примерами
Пройтись по всем ячейкам в нужном диапазоне можно разными способами. Основные:
- Цикл For Each. Пример:
Sub iterate_over_cells() For Each c In ThisWorkbook.Sheets("Sheet1").Range("B2:D4").Cells MsgBox (c) Next c End Sub
Этот цикл выведет в виде сообщений значения ячеек в диапазоне B2:D4 по порядку по строкам слева направо и по столбцам — сверху вниз. Данный способ можно использовать для действий, в который вам не важны номера ячеек (закрашивание, изменение форматирования, пересчёт чего-то и т.д.).
- Ту же задачу можно решить с помощью двух вложенных циклов — внешний будет перебирать ряды, а вложенный — ячейки в рядах. Этот способ я использую чаще всего, потому что он позволяет получить больше контроля над исполнением: на каждой итерации цикла нам доступны координаты ячеек. Для перебора всех ячеек на листе этим методом потребуется найти последнюю заполненную ячейку. Пример кода:
Sub iterate_over_cells() Dim cl, rw As Integer Dim x As Variant 'перебор области 3x3 For rw = 1 To 3 ' цикл для перебора рядов 1-3 For cl = 1 To 3 'цикл для перебора столбцов 1-3 x = ThisWorkbook.Sheets("Sheet1").Cells(rw + 1, cl + 1).Value MsgBox (x) Next cl Next rw 'перебор всех ячеек на листе. Последняя ячейка определена с помощью UsedRange 'LastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 'LastCol = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1 'For rw = 1 To LastRow 'цикл перебора всех рядов ' For cl = 1 To LastCol 'цикл для перебора всех столбцов ' Действия ' Next cl 'Next rw End Sub
- Если нужно перебрать все ячейки в выделенном диапазоне на активном листе, то код будет выглядеть так:
Sub iterate_cell_by_cell_over_selection() Dim ActSheet As Worksheet Dim SelRange As Range Dim cell As Range Set ActSheet = ActiveSheet Set SelRange = Selection 'if we want to do it in every cell of the selected range For Each cell In Selection MsgBox (cell.Value) Next cell End Sub
Данный метод подходит для интерактивных макросов, которые выполняют действия над выбранными пользователем областями.
- Перебор ячеек в ряду
Sub iterate_cells_in_row() Dim i, RowNum, StartCell As Long RowNum = 3 'какой ряд StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i) For i = 1 To 10 ' 10 ячеек в выбранном ряду ThisWorkbook.Sheets("Sheet1").Cells(RowNum, i + StartCell).Value = i '(i + StartCell) добавляет 1 к номеру столбца при каждом повторении Next i End Sub
- Перебор ячеек в столбце
Sub iterate_cells_in_column() Dim i, ColNum, StartCell As Long ColNum = 3 'какой столбец StartCell = 0 ' номер начальной ячейки (минус 1, т.к. в цикле мы прибавляем i) For i = 1 To 10 ' 10 ячеек ThisWorkbook.Sheets("Sheet1").Cells(i + StartCell, ColNum).Value = i ' (i + StartCell) добавляет 1 к номеру ряда при каждом повторении Next i End Sub
Свойства и методы ячеек
Имя ячейки
Присвоить новое имя можно так:
Thisworkbook.Sheets(1).Cells(1,1).name = "Новое_Имя"
Для того, чтобы сменить имя ячейки нужно сначала удалить существующее имя, а затем присвоить новое. Удалить имя можно так:
ActiveWorkbook.Names("Старое_Имя").Delete
Пример кода для переименования ячеек:
Sub rename_cell()
old_name = "Cell_Old_Name"
new_name = "Cell_New_Name"
ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub
Sub rename_cell_reverse()
old_name = "Cell_New_Name"
new_name = "Cell_Old_Name"
ActiveWorkbook.Names(old_name).Delete
ThisWorkbook.Sheets(1).Cells(2, 1).Name = new_name
End Sub
Адрес ячейки
Sub get_cell_address() ' вывести адрес ячейки в формате буква столбца, номер ряда
'$A$1 style
txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address
MsgBox (txt_address)
End Sub
Sub get_cell_address_R1C1()' получить адрес столбца в формате номер ряда, номер столбца
'R1C1 style
txt_address = ThisWorkbook.Sheets(1).Cells(3, 2).Address(ReferenceStyle:=xlR1C1)
MsgBox (txt_address)
End Sub
'пример функции, которая принимает 2 аргумента: название именованного диапазона и тип желаемого адреса
'(1- тип $A$1 2- R1C1 - номер ряда, столбца)
Function get_cell_address_by_name(str As String, address_type As Integer)
'$A$1 style
Select Case address_type
Case 1
txt_address = Range(str).Address
Case 2
txt_address = Range(str).Address(ReferenceStyle:=xlR1C1)
Case Else
txt_address = "Wrong address type selected. 1,2 available"
End Select
get_cell_address_by_name = txt_address
End Function
'перед запуском нужно убедиться, что в книге есть диапазон с названием,
'адрес которого мы хотим получить, иначе будет ошибка
Sub test_function() 'запустите эту программу, чтобы увидеть, как работает функция
x = get_cell_address_by_name("MyValue", 2)
MsgBox (x)
End Sub
Размеры ячейки
Ширина и длина ячейки в VBA меняется, например, так:
Sub change_size()
Dim x, y As Integer
Dim w, h As Double
'получить координаты целевой ячейки
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
'получить желаемую ширину и высоту ячейки
w = ThisWorkbook.Sheets("Sheet1").Cells(6, 2).Value
h = ThisWorkbook.Sheets("Sheet1").Cells(7, 2).Value
'сменить высоту и ширину ячейки с координатами x,y
ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight = h
ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth = w
End Sub
Прочитать значения ширины и высоты ячеек можно двумя способами (однако результаты будут в разных единицах измерения). Если написать просто Cells(x,y).Width или Cells(x,y).Height, то будет получен результат в pt (привязка к размеру шрифта).
Sub get_size()
Dim x, y As Integer
'получить координаты ячейки, с которой мы будем работать
x = ThisWorkbook.Sheets("Sheet1").Cells(2, 2).Value
y = ThisWorkbook.Sheets("Sheet1").Cells(3, 2).Value
'получить длину и ширину выбранной ячейки в тех же единицах измерения, в которых мы их задавали
ThisWorkbook.Sheets("Sheet1").Cells(2, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).ColumnWidth
ThisWorkbook.Sheets("Sheet1").Cells(3, 6).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).RowHeight
'получить длину и ширину с помощью свойств ячейки (только для чтения) в поинтах (pt)
ThisWorkbook.Sheets("Sheet1").Cells(7, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Width
ThisWorkbook.Sheets("Sheet1").Cells(8, 9).Value = ThisWorkbook.Sheets("Sheet1").Cells(x, y).Height
End Sub
Скачать файл с примерами изменения и чтения размера ячеек
Запуск макроса активацией ячейки
Для запуска кода VBA при активации ячейки необходимо вставить в код листа нечто подобное:
3 важных момента, чтобы это работало:
1. Этот код должен быть вставлен в код листа (здесь контролируется диапазон D4)
2-3. Программа, ответственная за запуск кода при выборе ячейки, должна называться Worksheet_SelectionChange и должна принимать значение переменной Target, относящейся к триггеру SelectionChange. Другие доступные триггеры можно посмотреть в правом верхнем углу (2).
Скачать файл с базовым примером (как на картинке)
Скачать файл с расширенным примером (код ниже)
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' имеем в виду, что триггер SelectionChange будет запускать эту Sub после каждого клика мышью (после каждого клика будет проверяться:
'1. количество выделенных ячеек и
'2. не пересекается ли выбранный диапазон с заданным в этой программе диапазоном.
' поэтому в эту программу не стоит без необходимости писать никаких других тяжелых операций
If Selection.Count = 1 Then 'запускаем программу только если выбрано не более 1 ячейки
'вариант модификации - брать адрес ячейки из другой ячейки:
'Dim CellName as String
'CellName = Activesheet.Cells(1,1).value 'брать текстовое имя контролируемой ячейки из A1 (должно быть в формате Буква столбца + номер строки)
'If Not Intersect(Range(CellName), Target) Is Nothing Then
'для работы этой модификации следующую строку надо закомментировать/удалить
If Not Intersect(Range("D4"), Target) Is Nothing Then
'если заданный (D4) и выбранный диапазон пересекаются
'(пересечение диапазонов НЕ равно Nothing)
'можно прописать диапазон из нескольких ячеек:
'If Not Intersect(Range("D4:E10"), Target) Is Nothing Then
'можно прописать несколько диапазонов:
'If Not Intersect(Range("D4:E10"), Target) Is Nothing or Not Intersect(Range("A4:A10"), Target) Is Nothing Then
Call program 'выполняем программу
End If
End If
End Sub
Sub program()
MsgBox ("Program Is running") 'здесь пишем код того, что произойдёт при выборе нужной ячейки
End Sub
Updated: 10/07/2019 by
Alternatively called a cell pointer, current cell, or selected cell, an active cell is a rectangular box that highlights the cell in a spreadsheet. An active cell helps identify what cell is being worked with and where data will be entered.
Active cell overview
In the picture below of Microsoft Excel, you can see that the active cell is D8 and is shown in the top-left corner.
Tip
When you first start Excel the active cell is the first cell, which is always A1. You can move the cell pointer by pressing the arrow keys or Enter on your keyboard, or you can click any cell using your computer mouse. If you’re using the keyboard, you can also press the F2 to edit the active cell.
How is an active cell identified?
An active cell or selected cell can be identified many ways. First, as shown in the picture above of Microsoft Excel, the active cell has a bold black box around the cell. Also, the column and row are highlighted. In our example picture, the column header «D» and row header «8» are highlighted in yellow. The active cell is also shown in the top-left portion of the window (Name box), which is «D8» in our example.
Where is the content of the active cell is displayed?
The content of the active cell is shown in the formula bar. In the screenshot above, the formula bar displays the formula in cell D8. The formula, «=SUM(D2:D5)», adds the values of cells D2 through D5 to compute their total value, $162.00. When cell D8 is selected, both the cell and the formula bar display the formula. When any other cell is selected, cell D8 shows the result of its formula, the total $162.00.
How do you change the active cell?
You can change the active cell by clicking any other cell with your left mouse button or with the arrow keys on your keyboard to move the selected cell. If the cell contains no data, you can begin typing to insert new data into that cell. If the cell already contains data, you can click up on the formula bar to change that data or press the F2 on the keyboard.
Which cell is active when Excel is first opened?
When you open a new Excel spreadsheet for the first time, the first cell is selected by default, which is A1 (the first cell of row A and column one). If you’ve worked on an Excel spreadsheet in the past, the active cell is the last active cell position. For example, if you last left the spreadsheet on cell C65, when it is saved and re-opened, it should return to cell C65.
Absolute cell reference, Active, Cell, Name box, Spreadsheet terms
Активной (выделенной, текущей) ячейкой
называется ячейка рабочего листа, с
которой Вы в данный момент работаете.
Активная ячейка всегда отмечается либо
утолщением линий ее границ, когда она
является единственной выделенной
ячейкой, либо инверсией цвета ее фона,
когда она является одной из нескольких
выделенных ячеек (блока ячеек).
По умолчанию ввод данных и многие другие
операции в программе MS
Excelсвязаны именно с активной ячейкой.
15. Интерфейс программы ms Excel
Программа MS Excelнаряду с другими прикладными программамиMSWindows поддерживает как
«мышиный» так и клавиатурный
интерфейс – совокупность средств
управления работой прикладной программы
и приемов обработки информации. Дело в
том, что иногда для выполнения одних
операций заведомо удобнее использовать
мышь, а для других – клавиатуру. Вследствие
этого, пользователю программыMS
Excelполезно знать особенности
применения и обладать навыками работы
как с тем, так и с другим интерфейсом.
Более того, если на компьютере не
установлена мышка или она, в силу разных
причин, работает ненадежно, то единственным
доступным средством управления работой
программыMS Excelявляется именно клавиатура.
Кроме этого, многообразие способов
выполнения одних и тех же операций,
которые программа MS
Excelпредоставляет в распоряжение
пользователя, позволяет ему самостоятельно
формировать свой собственный стиль
работы с этой программой, исходя из
своих личных предпочтений и первичных
навыков работы с ранее освоенным
программным обеспечением ПК.
Лабораторная работа
№1
«ЗНАКОМСТВО С
ПРОГРАММОЙ MS EXCEL»
1.1. Запуск программы ms Excel
Запустите программу MS
Excel, выполнив команду «Пуск /
Программы / (MicrosoftOffice ) /MicrosoftExcel».
В операционной системе MSWindows ярлык программыMS
Excelможет также находиться на рабочем
столе или в панели быстрого запуска.
1.2. Структура и элементы рабочего окна программы ms Excel
Распахните рабочее окно программы MS
Excelво весь экран дисплея. При
стандартной (исходной) настройке
параметров программыMS
Excelее рабочее окно имеет вид,
представленный на рис. 1.
Рис.
1. Структура и элементы рабочего окна
программы MS Excel.
Ниже приводится краткое описание
элементов графического интерфейса
рабочего окна программы MS
Excel.
1. Кнопки системных меню по управлению
поведением окна программы MS
Excel(верхняя кнопка) и окна с активной
рабочей книгой (нижняя кнопка). Двойной
щелчок по любой из этих кнопок закрывает
соответствующее окно.
2. Строка-заголовок, содержащая имя
программы (Microsoft Excel) и наименование
активной рабочей книги (Book 1). Имя рабочей
книги соответствует имени файла, в
котором она хранится. Каждая вновь
создаваемая книга получает по умолчанию
имя: «Book N», где N – порядковый номер
вновь создаваемой рабочей книги в данном
сеансе работы с программой MS
Excel.
3. Строка главного меню программы MS
Excel.
4. Кнопки управления поведением окна
программы MS Excel(верхняя группа кнопок) и окна с активной
рабочей книгой (нижняя кнопка).
5. Строки с панелями инструментов:
«Стандартная» и «Форматирование».
6. Кнопка выделения (выбора) сразу всех
ячеек текущего листа рабочей книги с
помощью одинарного щелчка мышкой.
7. Поле имени. В этом окне отображается
адрес (имя) активной ячейки или блока
ячеек.
8. Строка формул (в ней отображается
вводимая информация в активную ячейку
и выполняется редактирования ранее
введенной информации).
9. Кнопки управления вводом информации
в активную ячейку. Левая кнопка отменяет
текущий ввод информации, средняя кнопка
подтверждает правильность ввода
информации и правая кнопка служит для
внедрения в ячейку нужной функции с
помощью «Мастера функций».
10. Кнопки с заголовками (именами) столбцов.
Служат для выделения (выбора) сразу всех
ячеек столбца или изменения их размера
по ширине.
11. Маркер горизонтального разбиения
листа на две рабочие области.
12. Кнопки с заголовками (именами) строк.
Служат для выделения (выбора) сразу всех
ячеек строки или изменения их размера
по высоте.
13. Активная (выделенная, текущая) ячейка
(С7) на рабочем листе.
14. Кнопки навигирования по листам рабочей
книги. Крайние кнопки служат для быстрого
перемещения в начало или конец списка
листов, а внутренние – для пошагового
перехода в прямом и обратном направлениях.
15. Ярлыки с наименованиями листов рабочей
книги. Имя активного (текущего) листа
отображается полужирным шрифтом на
светлом фоне.
16. Маркер изменения ширины области
отображения ярлыков листов рабочей
книги.
17. Вертикальная и горизонтальная линейки
прокрутки (протяжки).
18. Маркер вертикального разбиения листа
на две рабочие области.
19. Статусная строка состояния. В ней
выводятся сообщения о режиме работы
программы MS Excel, в
котором она в данный момент находится.
20. Область отображения активизированных
режимов работы программы MS
Excel(ВДЛ – работа в режиме клавиатурного
выделения ячеек; CAPS – режим ввода
прописных букв; NUM – режим ввода чисел
с использованием клавиш малой цифровой
клавиатуры; SCRL – режим остановки
прокрутки листа ЭТ при навигировании
в рабочем окне; OVR – ввод информации в
ячейку в режиме замещения ее содержимого).
ЗАДАНИЕ 1.Не
выполняя никаких щелчков мышкой,
поочередно поместите ее курсор на все
описанные выше элементы рабочего окна
программыMS 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?
Функция ЯЧЕЙКА в своей работе использует синтаксис, который состоит из двух аргументов:
- Тип_сведений – текстовое значение, задающее требуемый тип сведений о ячейке. При вводе функции вручную высвечивается выпадающий список где указаны все возможные значения аргумента «тип сведений»:
- Ссылка – необязательный аргумент. Ячейка, сведения о которой требуется получить. Если этот аргумент опущен, сведения, указанные в аргументе тип_сведений, возвращаются для последней измененной ячейки. Если аргумент ссылки указывает на диапазон ячеек, функция ЯЧЕЙКА() возвращает сведения только для левой верхней ячейки диапазона.
Примеры использования функции ЯЧЕЙКА в 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 скачиваний)
Статья помогла? Поделись ссылкой с друзьями!
Поиск по меткам
Поделитесь своим мнением
Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме — добро пожаловать на Форум