Программным продуктом, незаменимым в офисной работе, является электронная таблица Microsoft Excel. При помощи этого продукта можно анализировать большие массивы данных. В Excel можно использовать более 400 математических, статистических, финансовых и других специализированных функций, связывать различные таблицы между собой, выбирать произвольные форматы представления данных, создавать иерархические структуры. Воистину безграничны методы графического представления данных: помимо нескольких десятков встроенных типов диаграмм, можно создавать свои, настраиваемые типы, помогающие наглядно отразить тематику диаграммы. Те, кто только осваивает работу с Excel, по достоинству оценят помощь «мастеров» — вспомогательных программ, помогающих при создании диаграмм.
Рисунок 1. Создание общей таблицы
Рисунок 2. Поиск решения
Рисунок 3. Добавление ограничений
Рисунок 4. Вывод целевой функции
Листинг программы
program PTransport;
uses
Forms,
UTransport in ‘UTransport.pas’ {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
object Form1: TForm1
Left = 192
Top = 107
Width = 522
Height = 332
Caption = ‘Транспортная задача 1.0 Beta’
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = ‘MS Sans Serif’
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Label1: TLabel
Left = 8
Top = 8
Width = 36
Height = 13
Caption = ‘Строки’
end
object Label2: TLabel
Left = 72
Top = 8
Width = 44
Height = 13
Caption = ‘Столбцы’
end
object SpinEdit1: TSpinEdit
Left = 8
Top = 24
Width = 49
Height = 22
MaxValue = 10
MinValue = 2
TabOrder = 0
Value = 2
end
object SpinEdit2: TSpinEdit
Left = 72
Top = 24
Width = 49
Height = 22
MaxValue = 10
MinValue = 2
TabOrder = 1
Value = 2
end
object Button1: TButton
Left = 48
Top = 56
Width = 75
Height = 25
Caption = ‘Создать’
TabOrder = 2
OnClick = Button1Click
end
object Button2: TButton
Left = 144
Top = 16
Width = 50
Height = 25
Caption = ‘Ввод’
TabOrder = 3
Visible = False
OnClick = Button2Click
end
object Memo1: TMemo
Left = 144
Top = 56
Width = 185
Height = 177
ReadOnly = True
TabOrder = 4
Visible = False
end
end
unit UTransport;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Spin, Mask;
type
TForm1 = class(TForm)
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
c, x : Array [1..10, 1..10] of Integer;
a, b : Array [1..10] of Integer;
F : Integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
i, i1, j1, j : Byte;
s : TControl;
begin
Label1.Hide;
Label2.Hide;
SpinEdit1.Hide;
SpinEdit2.Hide;
Button1.Hide;
Button2.Show;
i:=SpinEdit2.Value;
j:=SpinEdit1.Value;
for i1:=1 to i do
for j1:=1 to j do
begin
s:=TMaskEdit.Create(Form1);
s.Width:=25;
s.Left:=i1*25;
s.Top:=j1*21;
s.Name:=’Matrix’+IntToStr(j1)+IntToStr(i1);
(TControl(s) as TMaskEdit).Text:=»;
(TControl(s) as TMaskEdit).EditMask:=’999;0; ‘;
Form1.InsertControl(s);
end;
for i1:=1 to j do
begin
s:=TMaskEdit.Create(Form1);
s.Width:=25;
s.Left:=i*25+35;
s.Top:=i1*21;
s.Name:=’Matrix’+’0’+IntToStr(i1);
(TControl(s) as TMaskEdit).Text:=»;
(TControl(s) as TMaskEdit).EditMask:=’999;0; ‘;
Form1.InsertControl(s);
end;
for j1:=1 to i do
begin
s:=TMaskEdit.Create(Form1);
s.Width:=25;
s.Left:=j1*25;
s.Top:=j*21+31;
s.Name:=’Matrix’+IntToStr(j1)+’0′;
(TControl(s) as TMaskEdit).Text:=»;
(TControl(s) as TMaskEdit).EditMask:=’999;0; ‘;
Form1.InsertControl(s);
end;
Button2.Left:=i*25+25-Button2.Width;
Button2.Top:=j*21+62;
Memo1.Show;
Memo1.Left:=i*25+75;
Memo1.Top:=21;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s : String;
i, j : Byte;
ss : TControl;
begin
for i:=0 to Form1.ComponentCount-1 do
if (Form1.Components[i] is TMaskEdit) then
begin
s:=Form1.Components[i].Name;
if (s[7]<>’0′) and (s[8]<>’0′) then
begin
ss:=(Form1.Components[i] as TControl);
c[StrToInt(s[8]),StrToInt(s[7])]:=StrToInt((ss as TMaskEdit).Text);
end
else
if (s[7]=’0′) then
begin
ss:=(Form1.Components[i] as TControl);
a[StrToInt(s[8])]:=StrToInt((ss as TMaskEdit).Text);
end
else
if (s[8]=’0′) then
begin
ss:=(Form1.Components[i] as TControl);
b[StrToInt(s[7])]:=StrToInt((ss as TMaskEdit).Text);
end
end;
s:=»;
Memo1.Lines.Add(‘Начальные данные’);
for j:=1 to SpinEdit1.Value do
begin
for i:=1 to SpinEdit2.Value do
s:=s+IntToStr(c[i, j])+’ ‘;
s:=s+IntToStr(a[j]);
Memo1.Lines.Add(s);
s:=»;
end;
for i:=1 to SpinEdit2.Value do
s:=s+IntToStr(b[i])+’ ‘;
Memo1.Lines.Add(s);
for i:=1 to SpinEdit1.Value do
for j:=1 to SpinEdit2.Value do
x[i,j]:=-1;
i:=1;
j:=1;
Repeat
if a[i]>b[j] then
begin
x[j,i]:=b[j];
a[i]:=a[i]-b[j];
b[j]:=0;
Inc(j);
end
else
begin
x[j,i]:=a[i];
b[j]:=b[j]-a[i];
a[i]:=0;
Inc(i);
end;
Until (i>SpinEdit1.Value) and (j>=SpinEdit2.Value);
Memo1.Lines.Add(»);
s:=»;
for j:=1 to SpinEdit1.Value do
begin
for i:=1 to SpinEdit2.Value do
if x[i,j]>=0 then
s:=s+IntToStr(x[i, j])+’ ‘
else
s:=s+’0 ‘;
Memo1.Lines.Add(s);
s:=»;
end;
for i:=1 to SpinEdit2.Value do
for j:=1 to SpinEdit1.Value do
if x[i,j]>0 then
F:=F+x[i,j]*c[i,j];
Memo1.Lines.Add(‘Результат: ‘+IntToStr(F));
end;
end.
Руководство пользователя
Пуск
Запуск из среды Pascal производится нажатием клавиш Ctrl+F9, а из Norton Commander нажатием клавиши Enter на файле Inform.exe.
Ввод данных
Ввод данных производится только с цифровой клавиатуры. Цифры от 0 до 9.
Просмотр результатов.
После ввода цифры (нужного пункта в меню) выводится требуемый результат и после просмотра результата нужно нажать Enter. Затем вновь появится меню на экране.
Выход из программы
Выход из программы в среде Pascal и после запуска PTransport.exe файла производится 0-ым пунктом меню.
Процедуру
необходимо адаптировать к Вашему
проекту.
-
loExcel=CREATEOBJECT(«Excel.Application»)
-
loExcel.displayAlerts=.F.
-
with
loExcel -
.Visible=.t.
-
.WorkBooks.Add
-
.Sheets(1).Select
**
Выполнение запроса для занесения в
таблицу Excel
-
Use data1!rukovoditely
-
SELECT
TRIM(r_fam)+’ ‘+TRIM(r_im)+’ ‘+TRIM(r_ot),TRIM(s_fam)+’
‘+TRIM(s_im)+’ ‘+TRIM(s_ot),TRIM(group); -
From data1!rukovoditely;
-
order
by r_fam; -
Into array a
-
rowsCount=ALEN(a,1)
-
colsCount=ALEN(a,2)
**
Код программы получен как макрос VBA
-
.Columns(«A:A»).ColumnWidth
= 30 -
.Columns(«B:B»).ColumnWidth
= 30 -
.Columns(«C:C»).ColumnWidth
= 14 -
.Range(«A1»).Select
-
.ActiveCell.FormulaR1C1
= «Руководитель» -
.Range(«B1»).Select
-
.ActiveCell.FormulaR1C1
= «Дипломник» -
.Range(«C1»).Select
-
.ActiveCell.FormulaR1C1
= «Группа» -
.Range(«D1»).Select
-
j=2
-
FOR
j=2 TO rowsCount+1 -
.Range(«A1»).Select
-
.Activecell(j,1).FormulaR1C1=
a[j-1,1] -
.Range(«B1»).Select
-
.Activecell(j,1).FormulaR1C1=
a[j-1,2] -
.Range(«C1»).Select
-
.Activecell(j,1).FormulaR1C1
= a[j-1,3] -
ENDFOR
-
Release a
-
Endwith
-
CLOSE
DATA ALL
-
RELEASE
TO Excel
-
RETURN
Макрос
VBA
-
Открыть
Excel -
Включить
VBA
Вид
→
Макросы -
Нажать
Запись
макроса
-
Дать
свое имя или оставить Макрос1,
нажать ОК
-
Установить
ширину колонок (например А,В,С) -
Ввести
наименование колонок
А
→
Руководители
В
→
Дипломник
С
→
Группа
Уйти
на свободную колонку
-
Нажать
Остановить
запись
-
Перейти
по Вид
→ Макросы и
нажать Выполнить
-
Перейти
по Вид
→ Макросы и
нажать Изменить -
Скопировать
код макроса -
Вставить
в VFA
с модификацией
ActiveX → Календарь
-
Создаем
новую форму:
-
Выберем
в
Form Controls кнопку
View Classes
→
ActiveX
-
Выберем
из ActiveX
календарь и разместим его на форме -
Создадим
процедуру
Command1.Click
Thithform.text1.value
= dtoc (date())
-
Создадим
процедуру Olecontrol1.click
Процедура определения календарной даты
-
LPARAMETERS
cur_date
-
cur_day
= ALLTRIM(STR(thisform.olecontrol1.day)) -
cur_mon
= ALLTRIM(STR(thisform.olecontrol1.month)) -
cur_year
= ALLTRIM(STR(thisform.olecontrol1.year))
-
cur_date
= cur_day + «/» + cur_mon + «/» + cur_year
-
thisform.text2.value
= cur_date
Соседние файлы в папке Дополнительные лекции
- #
10.05.2015118.78 Кб274.doc
- #
- #
- #
- #
- #
- #
10.05.2015101.38 Кб26Расписание экзаменов 4 курс 2010.xls
- #
- #
- #
Аннотация: Лекция посвящена описанию частей объектной модели MS Excel, относящихся к книгам — коллекция Workbooks, объект Workbook, и к рабочим листам — коллекция Worksheets, объект Worksheet.
14.1. Коллекция Workbooks — работа с книгами
Основные операции, которые приходится выполнять при работе с книгами — это их автоматическое создание, выбор одной из открытых книг для обработки, открытие книги. Все открытые книги принадлежат коллекции Workbooks.
Практически все часто используемые методы и свойства коллекции Workbooks очень похожи на соответствующие методы и свойства коллекции Documents из объектной модели MS Word.
14.2. Методы Коллекции Workbooks
14.2.1. Add, Close, Open — стандартная работа с книгами
14-01-Excel Workbooks Add.xlsm — пример к п. 14.2.1.
- Add — создает новую книгу. Новая книга становится активной.
- Close — закрывает все открытые книги.
- Open — открывает указанную книгу. Основной параметр метода — имя открываемой книги.
Например, такой код (листинг 14.1.) позволяет создать новую книгу, присвоив ссылку на нее объектной переменной.
Dim obj_Workbook As Workbook Set obj_Workbook = Workbooks.Add
Листинг
14.1.
Создаем новую книгу
14.2.2. OpenText, OpenXML — открытие различных файлов
Эти методы предназначены для открытия текстовых файлов ( OpenText ) и XML-файлов ( OpenXML ) в виде книг MS Excel.
14.3. Свойства коллекции Workbooks
14-02-Excel Workbooks Properties.xlsm — пример к п. 14.3.
14.3.1. Count
Возвращает количество объектов в коллекции. В данном случае — количество открытых книг.
14.3.2. Item
Позволяет обращаться к выбранному элементу (отдельной книге ) в коллекции. В качестве идентификатора книги может использоваться ее индекс или имя.
В листинге 14.2. мы сначала выводим информацию о количестве книг, а потом — отображаем имя каждой открытой книги.
MsgBox "Открыто" + Str(Workbooks.Count) + _ " книг" For i = 1 To Workbooks.Count MsgBox Workbooks.Item(i).Name + _ " имя открытой книги №" + Str(i) Next i
Листинг
14.2.
Вывод информации об открытых книгах
14.4. Объект Workbook
Workbook — книга — это аналог документа ( Document ) в Microsoft Word. Многие свойства и методы Workbook действуют аналогично свойствам объекта Document. Однако книга в объектной модели состоит из листов. Значит, для обращения к данным, хранящимся в книге, нужно сначала обратиться к листу.
14.5. Методы объекта Workbook
Методы объекта Workbook очень похожи на методы объекта Document в MS Word. Поэтому здесь мы лишь перечислим их.
14.5.1. Activate, Close, Save, SaveAs, PrintOut
- Activate — активирует книгу
- Close — закрывает книгу
- Save — сохраняет книгу
- SaveAs — сохраняет книгу с новым именем, в новом формате и т.д.
- PrintOut — выводит книгу на печать
14.6. Свойства объекта Workbook
14.6.1. Свойства ActiveChart, ActiveSheet, Charts, Sheets, Worksheets, Styles, Names
Эти свойства возвращают различные объекты и коллекции объектов. В частности, ActiveChart возвращает активную диаграмму, ActiveSheet — активный лист книги, а Charts и Sheets возвращают, соответсвенно, коллекции листов, содержащих диаграммы, и всех листов книги. В объект Workbook входят и другие подобные коллекции — они очень похожи на коллекции, входящие в Application.
Чаще всего, работая с объектом Workbook, обращаются к коллекциям Sheets и Worksheets — ведь именно они дают доступ к рабочим листам.
14.6.2. Свойства CodeName, FullName, Name
14-03-Excel Workbook Name.xlsm — пример к п. 14.6.2.
Эти свойства возвращают различные имена книги. Так, CodeName — это имя, под которым книга видна в окне Project Explorer (обычно ЭтаКнига ). FullName — имя файла книги вместе с путем. Name — имя файла книги.
В листинге 14.3. вы можете найти пример вывода различных имен книги.
MsgBox "Кодовое имя текущей книги: " + _ ActiveWorkbook.CodeName + Chr(13) + _ "Имя текущей книги: " + _ ActiveWorkbook.Name + Chr(13) + _ "Полное имя книги: " + _ ActiveWorkbook.FullName
Листинг
14.3.
Вывод различных имен книги
14.7. События объекта Workbook
14-04-Excel Workbook Events.xlsm — пример к п. 14.7.
В VBA-проекте, который прикреплен к книге, есть объект ЭтаКнига. Если сделать по нему двойной щелчок — будет открыто окно редактора кода, в котором, по обычной схеме, можно выбрать объект — в данном случае это Workbook, а также события, для которых автоматически будет создан обработчик.
Книги в Microsoft Excel могут реагировать на множество событий, среди них следующие, которые происходят при таких обстоятельствах:
- Activate — при активации книги
- BeforeClose — перед закрытием книги, если книга изменялась и должен появиться запрос на ее сохранение — происходит перед сохранением.
- BeforePrint — перед печатью.
- BeforeSave — перед сохранением.
- Deactivate — при деактивации.
- NewSheet — при добавлении нового листа в книгу.
- Open — при открытии книги.
- SheetActivate — при активации любого листа
- SheetBeforeDoubleClick — после двойного щелчка в книге, до стандартной процедуры обработки.
- SheetBeforeRightClick — перед щелчком правой кнопки мыши.
- SheetCalculate — при пересчете листа или изменении данных, которые отображаются на диаграмме.
- SheetChange — при изменении содержимого ячейки.
- SheetDeactivate — при деактивации листа.
- SheetFollowHyperlink — при щелчке по гиперссылке.
- SheetSelectionChange — при изменении выделения.
Например, листинг 14.4. позволяет вывести в окне сообщения информацию об имени измененной ячейки, имени листа, на котором она расположена, и новом содержимом ячейки.
Private Sub Workbook_SheetChange(ByVal Sh As Object, _ ByVal Target As Range) MsgBox "Вы отредактировали даные на листе: " & _ Sh.Name & ", в ячейке " & Target.Address & _ ". Теперь ячейка содержит следующие данные: " & _ Target.Value End Sub
Листинг
14.4.
Вывод информации об измененной ячейке
Здесь мы воспользовались параметрами, которые передаются в обработчик события. Параметр Sh содержит ссылку на лист, на котором произошли изменения, а Target представляет собой ссылку на измененную ячейку или диапазон.
14.8. Коллекция Worksheets
Коллекция Worksheets содержит листы открытой книги. Ее свойства и методы служат для работы с ними.
14.9. Методы коллекции Worksheets
14.9.1. Add — добавляем листы в книгу
14-05-Excel Worksheets Add.xlsm — пример к п. 14.9.1.
Позволяет добавить в книгу новый лист. Полный вызов метода выглядит так.
Add(Before, After, Count, Type)
Before (До) и After (После) позволяют задавать позицию листа относительно других листов книги (можно использовать лишь один из них), Count задает количество добавляемых листов, а Type — тип листа. Чаще всего этот метод используют без параметров.
Например, листинг 14.5. добавляет новый лист в книгу, в которой хранится макрос, содержащий этот код:
ThisWorkbook.Worksheets.Add
Листинг
14.5.
Добавляем новый лист
А так можно добавить в книгу столько листов, сколько указал пользователь в ответ на вопрос программы (листинг 14.6.).
ActiveWorkbook.Worksheets.Add _ Count:=Val(InputBox("Введите количество листов"))
Листинг
14.6.
Добавляем в книгу указанное количество листов
Обычно листы в книгах MS Excel имеют осмысленные имена. Однако, как вы могли заметить, метод Add не предусматривает задание имени вставляемому листу, оставляя его в значении по умолчанию. Чтобы переименовать добавленный лист, вам придется пользоваться свойством Name объекта Worksheet.
14.9.2. Copy — копируем листы
14-06-Excel Worksheets Copy.xlsm — пример к п. 14.9.2.
Позволяет скопировать лист в новое место книги.
Принимает два параметра — Before и After, которые, соответственно, позволяют задать положение перемещаемого листа до или после какого-то другого листа. Например, листинг 14.7. копирует активный лист в позицию после листа с именем «Данные».
ActiveWorkbook.ActiveSheet.Copy _ After:=Worksheets("Данные")
Листинг
14.7.
Создаем копию листа в пределах книги
Если метод вызвать без параметров, то будет создана новая книга, в которую будет помещена копия листа, для которого вызывался этот метод. Например, так, как в листинге 14.8.
ActiveWorkbook.ActiveSheet.Copy
Листинг
14.8.
Копируем лист в новую книгу
14.9.3. Delete, Move — удаляем и перемещаем листы
14-07-Excel Worksheets Del Mov.xlsm — пример к п. 14.9.3.
Метод Delete удаляет лист. Например, так мы удаляем первый лист в коллекции Workbooks (листинг. 14.9.)
ActiveWorkbook.Worksheets.Item(1).Delete
Листинг
14.9.
Удаляем лист
Обратите внимание на то, что в этом примере мы обращаемся к листу с помощью свойства Item коллекции Worksheets, которое позволяет работать с листом, используя индекс или имя.
Move позволяет переместить лист на новое место в книге. В качестве параметров принимает параметры Before и After, которые задают его положение до или после заданного в них листа. Например, так (листинг 14.10.) мы перемещаем активный лист в книге в позицию, предшествующую листу с именем Данные.
ActiveWorkbook.ActiveSheet.Move _ Before:=Worksheets("Данные")
Листинг
14.10.
Перемещаем лист
Выпадающий список в Excel это, пожалуй, один из самых удобных способов работы с данными. Использовать их вы можете как при заполнении форм, так и создавая дашборды и объемные таблицы. Выпадающие списки часто используют в приложениях на смартфонах, веб-сайтах. Они интуитивно понятны рядовому пользователю.
Ваше имя
Какой-то текст ошибки
Какой-то текст ошибки
Содержание
- Видеоурок
- Как создать выпадающий список в Экселе на основе данных из перечня
- Как сделать выпадающий список в Excel используя ручной ввод данных
- Как создать раскрывающийся список в Эксель с помощью функции СМЕЩ
- Как эта формула работает?
- Как сделать выпадающий список в Excel с подстановкой данных (с использованием функции СМЕЩ)
- Как создать выпадающий список в Excel с автоматической подстановкой данных
- Как скопировать выпадающий список в Excel
- Как выделить все ячейки, содержащие выпадающий список в Экселе
- Как сделать зависимые выпадающие списки в Excel
Видеоурок
Как создать выпадающий список в Экселе на основе данных из перечня
Представим, что у нас есть перечень фруктов:
Для создания выпадающего списка нам потребуется сделать следующие шаги:
- Выбрать ячейку, в которой мы хотим создать выпадающий список;
- Перейти на вкладку «Данные» => раздел «Работа с данными» на панели инструментов => выбираем пункт «Проверка данных«.
- Во всплывающем окне «Проверка вводимых значений» на вкладке «Параметры» в типе данных выбрать «Список«:
- В поле «Источник» ввести диапазон названий фруктов =$A$2:$A$6 или просто поставить курсор мыши в поле ввода значений «Источник» и затем мышкой выбрать диапазон данных:
Если вы хотите создать выпадающие списки в нескольких ячейках за раз, то выберите все ячейки, в которых вы хотите их создать, а затем выполните указанные выше действия. Важно убедиться, что ссылки на ячейки являются абсолютными (например, $A$2), а не относительными (например, A2 или A$2 или $A2).
Как сделать выпадающий список в Excel используя ручной ввод данных
На примере выше, мы вводили список данных для выпадающего списка путем выделения диапазона ячеек. Помимо этого способа, вы можете вводить данные для создания выпадающего списка вручную (необязательно их хранить в каких-либо ячейках).
Например, представим что в выпадающем меню мы хотим отразить два слова «Да» и «Нет». Для этого нам потребуется:
- Выбрать ячейку, в которой мы хотим создать выпадающий список;
- Перейти на вкладку «Данные» => раздел «Работа с данными» на панели инструментов => выбрать пункт «Проверка данных«:
- Во всплывающем окне «Проверка вводимых значений» на вкладке «Параметры» в типе данных выбрать «Список«:
- В поле «Источник» ввести значение «Да; Нет».
- Нажимаем «ОК«
После этого система создаст раскрывающийся список в выбранной ячейке. Все элементы, перечисленные в поле «Источник«, разделенные точкой с запятой будут отражены в разных строчках выпадающего меню.
Если вы хотите одновременно создать выпадающий список в нескольких ячейках — выделите нужные ячейки и следуйте инструкциям выше.
Как создать раскрывающийся список в Эксель с помощью функции СМЕЩ
Наряду со способами описанными выше, вы также можете использовать формулу СМЕЩ для создания выпадающих списков.
Например, у нас есть список с перечнем фруктов:
Для того чтобы сделать выпадающий список с помощью формулы СМЕЩ необходимо сделать следующее:
- Выбрать ячейку, в которой мы хотим создать выпадающий список;
- Перейти на вкладку «Данные» => раздел «Работа с данными» на панели инструментов => выбрать пункт «Проверка данных«:
- Во всплывающем окне «Проверка вводимых значений» на вкладке «Параметры» в типе данных выбрать «Список«:
- В поле «Источник» ввести формулу: =СМЕЩ(A$2$;0;0;5)
- Нажать «ОК«
Система создаст выпадающий список с перечнем фруктов.
Как эта формула работает?
На примере выше мы использовали формулу =СМЕЩ(ссылка;смещ_по_строкам;смещ_по_столбцам;[высота];[ширина]).
Эта функция содержит в себе пять аргументов. В аргументе «ссылка» (в примере $A$2) указывается с какой ячейки начинать смещение. В аргументах «смещ_по_строкам» и «смещ_по_столбцам» (в примере указано значение «0») — на какое количество строк/столбцов нужно смещаться для отображения данных. В аргументе «[высота]» указано значение «5», которое обозначает высоту диапазона ячеек. Аргумент «[ширина]» мы не указываем, так как в нашем примере диапазон состоит из одной колонки.
Используя эту формулу, система возвращает вам в качестве данных для выпадающего списка диапазон ячеек, начинающийся с ячейки $A$2, состоящий из 5 ячеек.
Как сделать выпадающий список в Excel с подстановкой данных (с использованием функции СМЕЩ)
Если вы используете для создания списка формулу СМЕЩ на примере выше, то вы создаете список данных, зафиксированный в определенном диапазоне ячеек. Если вы захотите добавить какое-либо значение в качестве элемента списка, вам придется корректировать формулу вручную. Ниже вы узнаете, как делать динамический выпадающий список, в который будут автоматически загружаться новые данные для отображения.
Для создания списка потребуется:
- Выбрать ячейку, в которой мы хотим создать выпадающий список;
- Перейти на вкладку «Данные» => раздел «Работа с данными» на панели инструментов => выбрать пункт «Проверка данных«;
- Во всплывающем окне «Проверка вводимых значений» на вкладке «Параметры» в типе данных выбрать «Список«;
- В поле «Источник» ввести формулу: =СМЕЩ(A$2$;0;0;СЧЕТЕСЛИ($A$2:$A$100;»<>»))
- Нажать «ОК«
В этой формуле, в аргументе «[высота]» мы указываем в качестве аргумента, обозначающего высоту списка с данными — формулу СЧЕТЕСЛИ, которая рассчитывает в заданном диапазоне A2:A100 количество не пустых ячеек.
Примечание: для корректной работы формулы, важно, чтобы в списке данных для отображения в выпадающем меню не было пустых строк.
Больше лайфхаков в нашем Telegram Подписаться
Как создать выпадающий список в Excel с автоматической подстановкой данных
Для того чтобы в созданный вами выпадающий список автоматически подгружались новые данные, нужно проделать следующие действия:
- Создаем список данных для отображения в выпадающем списке. В нашем случае это список цветов. Выделяем перечень левой кнопкой мыши:
- На панели инструментов нажимаем пункт «Форматировать как таблицу«:
- Из раскрывающегося меню выбираем стиль оформления таблицы:
- Нажав клавишу «ОК» во всплывающем окне, подтверждаем выбранный диапазон ячеек:
- Затем, выделим диапазон данных таблицы для выпадающего списка и присвоим ему имя в левом поле над столбцом «А»:
Таблица с данными готова, теперь можем создавать выпадающий список. Для этого необходимо:
- Выбрать ячейку, в которой мы хотим создать список;
- Перейти на вкладку «Данные» => раздел «Работа с данными» на панели инструментов => выбрать пункт «Проверка данных«:
- Во всплывающем окне «Проверка вводимых значений» на вкладке «Параметры» в типе данных выбрать «Список«:
- В поле источник указываем =»название вашей таблицы». В нашем случае мы ее назвали «Список«:
- Готово! Выпадающий список создан, в нем отображаются все данные из указанной таблицы:
- Для того чтобы добавить новое значение в выпадающий список — просто добавьте в следующую после таблицы с данными ячейку информацию:
- Таблица автоматически расширит свой диапазон данных. Выпадающий список соответственно пополнится новым значением из таблицы:
Как скопировать выпадающий список в Excel
В Excel есть возможность копировать созданные выпадающие списки. Например, в ячейке А1 у нас есть выпадающий список, который мы хотим скопировать в диапазон ячеек А2:А6.
Для того чтобы скопировать выпадающий список с текущим форматированием:
- нажмите левой клавишей мыши на ячейку с выпадающим списком, которую вы хотите скопировать;
- нажмите сочетание клавиш на клавиатуре CTRL+C;
- выделите ячейки в диапазоне А2:А6, в которые вы хотите вставить выпадающий список;
- нажмите сочетание клавиш на клавиатуре CTRL+V.
Так, вы скопируете выпадающий список, сохранив исходный формат списка (цвет, шрифт и.т.д). Если вы хотите скопировать/вставить выпадающий список без сохранения формата, то:
- нажмите левой клавишей мыши на ячейку с выпадающим списком, который вы хотите скопировать;
- нажмите сочетание клавиш на клавиатуре CTRL+C;
- выберите ячейку, в которую вы хотите вставить выпадающий список;
- нажмите правую кнопку мыши => вызовите выпадающее меню и нажмите «Специальная вставка«;
- В появившемся окне в разделе «Вставить» выберите пункт «условия на значения«:
- Нажмите «ОК«
После этого, Эксель скопирует только данные выпадающего списка, не сохраняя форматирование исходной ячейки.
Как выделить все ячейки, содержащие выпадающий список в Экселе
Иногда, сложно понять, какое количество ячеек в файле Excel содержат выпадающие списки. Есть простой способ отобразить их. Для этого:
- Нажмите на вкладку «Главная» на Панели инструментов;
- Нажмите «Найти и выделить» и выберите пункт «Выделить группу ячеек«:
- В диалоговом окне выберите пункт «Проверка данных«. В этом поле есть возможность выбрать пункты «Всех» и «Этих же«. «Всех» позволит выделить все выпадающие списки на листе. Пункт «этих же» покажет выпадающие списки схожие по содержанию данных в выпадающем меню. В нашем случае мы выбираем «всех«:
- Нажмите «ОК«
Нажав «ОК«, Excel выделит на листе все ячейки с выпадающим списком. Так вы сможете привести за раз все списки к общему формату, выделить границы и.т.д.
Как сделать зависимые выпадающие списки в Excel
Иногда нам требуется создать несколько выпадающих списков, причем, таким образом, чтобы, выбирая значения из первого списка, Excel определял какие данные отобразить во втором выпадающем списке.
Предположим, что у нас есть списки городов двух стран Россия и США:
Для создания зависимого выпадающего списка нам потребуется:
- Создать два именованных диапазона для ячеек «A2:A5» с именем “Россия” и для ячеек «B2:B5» с названием “США”. Для этого нам нужно выделить весь диапазон данных для выпадающих списков:
- Перейти на вкладку «Формулы» => кликнуть в разделе «Определенные имена» на пункт «Создать из выделенного«:
- Во всплывающем окне «Создание имен из выделенного диапазона» поставьте галочку в пункт «в строке выше«. Сделав это, Excel создаст два именованных диапазона «Россия» и «США» со списками городов:
- Нажмите «ОК«
- В ячейке «D2» создайте выпадающий список для выбора стран «Россия» или «США». Так, мы создадим первый выпадающий список, в котором пользователь сможет выбрать одну из двух стран.
Теперь, для создания зависимого выпадающего списка:
- Выделите ячейку E2 (или любую другую ячейку, в которой вы хотите сделать зависимый выпадающий список);
- Кликните по вкладке “Данные” => “Проверка данных”;
- Во всплывающем окне «Проверка вводимых значений» на вкладке «Параметры» в типе данных выберите «Список«:
- В разделе “Источник” укажите ссылку: =INDIRECT(D2) или =ДВССЫЛ(D2);
- Нажмите «ОК«
Теперь, если вы выберите в первом выпадающем списке страну «Россия», то во втором выпадающем списке появятся только те города, которые относятся к этой стране. Также и в случае, когда выбираете «США» из первого выпадающего списка.
Группа: Пользователи Ранг: Прохожий Сообщений: 3
Замечаний: |
Привет
Имеется программа написанная в Excel с макросами, расчетов там на несколько листов, много логики, сравнений, одна ячейка рассчитывается по формуле с данными по другой, та в свою очередь по третей…в общем неудобно так искать и выводить ф-лы. Как их можно вытащить в листинг или что-то подобное, чтобы было нагляднее, проще вытаскивать формулы?
спасибо
Чем люди занимаются в офисах? Довольно типовой вариант: собрать из нескольких источников некие данные, произвести некоторые расчёты, проконтролировать какие-то товарно-денежно-сырьевые операции или запланировать эти операции по результатам расчётов, ну и, само собой, взять ответственность за свои расчёты, контроли, прогнозы. В подавляющем большинстве случае всё это делается в Excel.
Так вот — в самом начале этих типовых операций, в процессе объединения нескольких источников данных, как правило, возникает задача выработать базовый список чего-то (материалов, товаров, операций), от которого потом приходится «плясать». Приведу пример из моей недавней статьи, где мы планировали снабжение производства расходными материалами. Для планирования закупок расходных материалов мы должны совместить данные из производственного плана и данные со складов расходных материалов. Эти два источника данных в реальной жизни никогда не совпадут друг с другом. Всегда будут какие-то позиции, которые есть на складах, но они пока (или уже) не участвуют в производстве, а также возможны ситуации, что появился новый расходный материал, который ещё ни разу не закупался, но включен в производственный план. То есть нам позарез нужен базовый список расходных материалов, который бы включал в себя все варианты материалов, которые есть в обоих источниках. Без повторений, отсортированный — всё как положено.
Совершенно точно вам заявляю, что подобные базовые списки формируются в подавляющем большинстве случаев в полуручном режиме. Обычно происходит так: в начале процесса вы при помощи сводных таблиц или руками формируете стартовый базовый список, потом его при помощи формул ВПР выверяете, дополняете, и вот — у вас есть СТАТИЧЕСКИЙ базовый список, который вы постоянно теперь будете сверять с источниками данных на предмет, а не появились ли новые позиции. Вот на такие бессмысленные вещи люди и тратят порой до трети своего рабочего времени…
К слову сказать, я считаю, что один из главных убийц офисной продуктивности, помимо совещаний, носит неброское имя — сверка
Автоматизация создания базового списка
А между тем создание базового списка совсем не трудно автоматизировать и попутно приобрести массу полезных навыков, которые вы сможете применить на других участках своей работы.
Мы с вами будем изучать решение, которое будет одинаково хорошо работать как для десятков записей, так и для десятков тысяч записей.
У нас будет 3 источника данных, на основе которых мы будем строить базовый список. Данные текстовые. В каждой таблице — один единственный столбец, содержащий мужские имена. Во всёх трёх таблицах разное количество строк, имена пересекаются произвольно и могут произврольно повторяться в любых сочетаниях. Мы не предъявляем никаких предварительных условий, кроме того, что данные текстовые и, что мы примерно знаем, с каким количеством строк мы будем иметь дело (формулы должны быть протянуты на достаточную длинну с запасом).
Файл примера
Скачать
Шаг 1 — Оформляем исходные данные
Как обычно, все три исходные таблицы на листе Data делаем умными и даём им идентификаторы tblOne, tblTwo и tblThree.
Шаг 2 — Создаём объединенную таблицу
На листе Trick создаём объединенную умную таблицу tblCommon. Она состоит из трёх столбцов: таблица, строка, значение. Индекс таблицы для столбца Таблица — число от 1 до 3, — извлекаем из вспомогательной таблицы tblStep при помощи формулы ВПР:
=ЕСЛИОШИБКА( ВПР( СТРОКА(1:1); tblStep; 2 ); 0 )
Конструкцию СТРОКА(1:1) мы уже обсуждали тут. Данное использование ВПР для диапазонного поиска обсуждалось здесь. В случае, если ВПР вернёт #Н/Д, то ЕСЛИОШИБКА подставит ноль.
Таблица tblStep адресует к диапазону E1:F5, о котором стоит рассказать подробно. Дело в том, что нам для создания объединенной таблицы — кровь из носа — необходимо знать количество строк в исходных таблицах. Их я легко получаю в ячейках E2:E4 при помощи формулы ЧСТРОК. Для E2 это, к примеру:
=ЧСТРОК( tblOne )
Далее на ячейку E2 я должен был бы сослаться в таблице tblStep в столбце Порог. Однако, если мы так сделаем, то наша таблица будет так тормозить, что между калькуляциями формул можно будет выкуривать по маленькой цигарке. Дело в том, что формула ЧСТРОК летучая (volatile) и пересчитывается при любом нашем шевелении в Excel. А поскольку на E2:E4 завязано буквально всё, то в Excel при любом действии начинается цепная реакция пересчётов формул, что реально занимает массу времени, и с файлом работать при автоматическом пересчёте формул становится практически невозможно.
Поэтому мы идём на хитрость. Для ячеек E2:E4 (заголовок Живые) я создаю двойников в F2:F4 (заголовок Мёртвые). Если на E2 у меня ссылается именованный диапазон rngLiveCountOne, то на F2 — ИД rngDeadCountOne. Двойники не содержат формул, поэтому необходимо следить, чтобы значения в Мёртвых (Dead) диапазонах всегда были равны значениям из Живых (Live) диапазонов. Сами мы следить не хотим, значит поручим это макросу (ниже будет листинг). Ссылаясь в формулах на мёртвые ячейки, я изолирую летучие ячейки, и мой файл начинает при пересчётах вести себя адекватно. Запомните этот приём, он может вам пригодиться.
Формула для столбца Строка вычисляет номер строки таблицы:
=ЕСЛИОШИБКА( СТРОКА(1:1) — ВПР( СТРОКА(1:1); tblStep; 1 ) + 1; 0 )
Теперь мы знаем, из какой таблицы мы будем извлекать данные и из какой строки этой таблицы. Напоминаю, что на этом этапе мы просто берём 3 исходные таблицы tblOne, tblTwo и tblThree и складываем из них одну большую таблицу. Формула для строки Значение:
=ЕСЛИ( [@Таблица] > 0; ИНДЕКС( ВЫБОР( [@Таблица]; tblOne; tblTwo; tblThree); [@Строка] ); «» )
ВЫБОР( [@Таблица]; tblOne; tblTwo; tblThree) — возвращает нам нужную таблицу по её индексу в поле [@Таблица]. Если вы не знакому со структурными ссылками умных таблиц (то что вы видите в квадратных скобках), то почитать о них можно тут. По формуле ИНДЕКС у меня также есть исчерпывающая статья.
Проследнее, что необходимо сделать, это накинуть ИД на получившийся диапазон столбца Значение таблицы tblCommon. Это будет ИД rngCommon:
=tblCommon[ [#Заголовки]; [Значение]]:ИНДЕКС( tblCommon[Значение]; СЧЁТЕСЛИ( tblCommon[Значение]; «*?») )
Данный ИД нам нужен с заголовком, так как мы будем на его основе строить сводную таблицу, а также нам не нужны пустые значения снизу таблицы. Примите во внимание, что конструктция СЧЁТЕСЛИ(tblCommon[Значение];»*?») работает только с текстовыми значениями, для чисел используйте нечто типа СЧЁТЕСЛИ(tblCommon[Значение];»>0″)+1. СЧЁТЗ использовать нельзя, так как в ячейках везде формулы.
Шаг 3 — Перекладываем на сводную таблицу основную работу
Скомпоновав все таблицы в одну, мы со спокойным сердцем натравливаем на неё сводную таблицу, чтобы она нам сделала группировку, сортировку и фильтрацию (если бы нам это надо было). Кто-то скажет, что тоже самое можно было бы сделать при помощи формул-массивов. Наверное, можно. Я не фанат формул-массивов, так как вещь это очень специфическая и на больших объёмах данных так и вовсе бесполезная. Я, в первую очередь, как тренер, не испытываю никакого энтузиазма, глядя на формулу размером в полстраницы, потому что я знаю, что ЕЁ я никогда и никому не смогу объяснить (да и сам забуду через неделю).
Сводная таблица элементарна — единственное поле в области СТРОКИ в макете сводной таблицы. Кроме этого надо отключить ИТОГИ:
На сводную таблицу я также привычно накидываю ИД rngResult, так как именно этот ИД и будет нашим конечным продуктом.
=Trick!$H$2:ИНДЕКС( Trick!$H:$H; СЧЁТЗ( Trick!$H:$H ) )
Стандартнейшая формула.
Шаг 4 — Небольшой макрос
В качестве сервисной функции я прикрепляю к событию Activate листа Result следующий макрос:
Данный макрос следит, чтобы наши «мёртвые» диапазоны всегда были в точности равны «живым» диапазонам. Кроме этого, макрос обновляет сводную таблицу. То есть, переходя на лист Result, вы можете быть уверены, что ваш базовый список содержит корректные данные.
Наслаждаемся результатом
На листе Result построена умная таблица tblWork при помощи ИД rngResult. Столбец Flag сигнализирует нам о том, не кончились ли строки в базовой таблице (значение 1 — означает, что не кончились, и его удобно проверять в формулах =ЕСЛИ([@Flag];»Do something»;»Do nothing»). Формула для столбца Name проста и изящна:
=ЕСЛИ( [@Flag]; ИНДЕКС( rngResult; СТРОКА(1:1) ); «» )
а столбцы One, Two, Three просто иллюстрируют, как наш базовый список связан с исходными таблицами. Я использовал формулы вида:
=ЕСЛИ( [@Flag]; СЧЁТЕСЛИМН( tblOne; [@Name] ); «» )
Если вы не знакомы с великолепными формулами СЧЁТЕСЛИМН, СУММЕСЛИМН, СРЗНАЧЕСЛИМН, то очень рекомендую их изучить.
Общая схема трансформации данных:
Выводы
Самое главное, чему мы сейчас научились — это использовать сводную таблицу в качестве мощного промежуточного инструмента, не требующего никакого внимания от конечного пользователя. Лист Trick даже может быть скрыт без каких-либо последствий. Мы формулами подготовили ИД, на основе которого строилась сводная таблица, и мы формулами же сфотографировали через другой ИД (+ немного VBA) результат деятельности сводной таблицы. Такое использование сводных таблиц открывает перед нами богатейшие возможности по манипулированию данными.
И кроме этого, мы научились создавать динамический базовый список для организации дальнейшей работы с данными. Строки этого списка плавающие, они ни к чему не привязаны, вы можете их совершенно безопасно сортировать и фильтровать. Наша технология создания базового списка отлично масштабируется.
Читайте также:
-
7 причин полюбить именованные диапазоны
-
Усовершенствованные динамические именованные диапазоны
-
В помощь аналитику (часть 1)
-
В помощь аналитику (часть 2)
-
Ценные советы начинающим аналитикам
-
Наиважнейшая формула Excel
-
Элементы планирования работы производства и складов
Под выпадающим списком понимается содержание в одной ячейке нескольких значений. Когда пользователь щелкает по стрелочке справа, появляется определенный перечень. Можно выбрать конкретное.
Очень удобный инструмент Excel для проверки введенных данных. Повысить комфорт работы с данными позволяют возможности выпадающих списков: подстановка данных, отображение данных другого листа или файла, наличие функции поиска и зависимости.
Создание раскрывающегося списка
Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».
Ввести значения, из которых будет складываться выпадающий список, можно разными способами:
- Вручную через «точку-с-запятой» в поле «Источник».
- Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
- Назначить имя для диапазона значений и в поле источник вписать это имя.
Любой из вариантов даст такой результат.
Выпадающий список в Excel с подстановкой данных
Необходимо сделать раскрывающийся список со значениями из динамического диапазона. Если вносятся изменения в имеющийся диапазон (добавляются или удаляются данные), они автоматически отражаются в раскрывающемся списке.
- Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
- Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
- Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:
Протестируем. Вот наша таблица со списком на одном листе:
Добавим в таблицу новое значение «елка».
Теперь удалим значение «береза».
Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.
Теперь сделаем так, чтобы можно было вводить новые значения прямо в ячейку с этим списком. И данные автоматически добавлялись в диапазон.
- Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
- Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
- Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
- Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
- Сохраняем, установив тип файла «с поддержкой макросов».
- Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».
Private Sub Worksheet_Change(ByVal Target As Range) Dim lReply As Long If Target.Cells.Count > 1 Then Exit Sub If Target.Address = "$C$2" Then If IsEmpty(Target) Then Exit Sub If WorksheetFunction.CountIf(Range("Деревья"), Target) = 0 Then lReply = MsgBox("Добавить введенное имя " & _ Target & " в выпадающий список?", vbYesNo + vbQuestion) If lReply = vbYes Then Range("Деревья").Cells(Range("Деревья").Rows.Count + 1, 1) = Target End If End If End If End Sub
Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».
Нажмем «Да» и добавиться еще одна строка со значением «баобаб».
Выпадающий список в Excel с данными с другого листа/файла
Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.
- Делаем активной ячейку, куда хотим поместить раскрывающийся список.
- Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).
Имя файла, из которого берется информация для списка, заключено в квадратные скобки. Этот файл должен быть открыт. Если книга с нужными значениями находится в другой папке, нужно указывать путь полностью.
Как сделать зависимые выпадающие списки
Возьмем три именованных диапазона:
Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.
- Создадим первый выпадающий список, куда войдут названия диапазонов.
- Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
- Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.
- Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
- Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
- Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.
- На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
- Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
- Жмем «Свойства» – открывается перечень настроек.
- Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.
Выбор нескольких значений из выпадающего списка Excel
Бывает, когда из раскрывающегося списка необходимо выбрать сразу несколько элементов. Рассмотрим пути реализации задачи.
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("Е2:Е9")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset(0, 1)) = 0 Then Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("Н2:К2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset(1, 0)) = 0 Then Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then
Application.EnableEvents = False
newVal = Target
Application.Undo
oldval = Target
If Len(oldval) <> 0 And oldval <> newVal Then
Target = Target & "," & newVal
Else
Target = newVal
End If
If Len(newVal) = 0 Then Target.ClearContents
Application.EnableEvents = True
End If
End Sub
Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.
Выпадающий список с поиском
Скачать пример выпадающего списка
При вводе первых букв с клавиатуры высвечиваются подходящие элементы. И это далеко не все приятные моменты данного инструмента. Здесь можно настраивать визуальное представление информации, указывать в качестве источника сразу два столбца.