Вывод значений программы в excel

Всем доброго времени суток!)

Я из MS Access создаю Excel-файл. На первом листе создаются и заполняются 2 таблицы (данные для них берутся из БД). Затем на основе первой таблицы создается круговая диаграмма, а на основе второй — линейная, гистограмма и график.
Проблема в том, что у круговой диаграммы съезжают подписи данных:

Вывод данных в ячейки Excel

А у остальных диаграмм, например у гистограммы, съезжает «Легенда»:

Вывод данных в ячейки Excel

Причем! Если данные из таблицы, которые попадают в «Легенду диаграммы», стереть и перебить их вручную, то этот сдвиг пропадает и все ОК.

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

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

Создание раскрывающегося списка

Путь: меню «Данные» — инструмент «Проверка данных» — вкладка «Параметры». Тип данных – «Список».

Создание выпадающего списка.

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

  1. Вручную через «точку-с-запятой» в поле «Источник».
  2. Ввод значений.

  3. Ввести значения заранее. А в качестве источника указать диапазон ячеек со списком.
  4. Проверка вводимых значений.

  5. Назначить имя для диапазона значений и в поле источник вписать это имя.

Имя диапазона.
Раскрывающийся список.

Любой из вариантов даст такой результат.



Выпадающий список в Excel с подстановкой данных

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

  1. Выделяем диапазон для выпадающего списка. В главном меню находим инструмент «Форматировать как таблицу».
  2. Форматировать как таблицу.

  3. Откроются стили. Выбираем любой. Для решения нашей задачи дизайн не имеет значения. Наличие заголовка (шапки) важно. В нашем примере это ячейка А1 со словом «Деревья». То есть нужно выбрать стиль таблицы со строкой заголовка. Получаем следующий вид диапазона:
  4. Выпадающий список.

  5. Ставим курсор в ячейку, где будет находиться выпадающий список. Открываем параметры инструмента «Проверка данных» (выше описан путь). В поле «Источник» прописываем такую функцию:

Ввод значения в источник.

Протестируем. Вот наша таблица со списком на одном листе:

Список и таблица.

Добавим в таблицу новое значение «елка».

Добавлено значение елка.

Теперь удалим значение «береза».

Удалено значение береза.

Осуществить задуманное нам помогла «умная таблица», которая легка «расширяется», меняется.

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

Ввод данных из списка.

  1. Сформируем именованный диапазон. Путь: «Формулы» — «Диспетчер имен» — «Создать». Вводим уникальное название диапазона – ОК.
  2. Создание имени.

  3. Создаем раскрывающийся список в любой ячейке. Как это сделать, уже известно. Источник – имя диапазона: =деревья.
  4. Снимаем галочки на вкладках «Сообщение для ввода», «Сообщение об ошибке». Если этого не сделать, Excel не позволит нам вводить новые значения.
  5. Сообщение об ошибке.

  6. Вызываем редактор Visual Basic. Для этого щелкаем правой кнопкой мыши по названию листа и переходим по вкладке «Исходный текст». Либо одновременно нажимаем клавиши Alt + F11. Копируем код (только вставьте свои параметры).
  7. 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
     
  8. Сохраняем, установив тип файла «с поддержкой макросов».
  9. Сообщение об ошибке.

  10. Переходим на лист со списком. Вкладка «Разработчик» — «Код» — «Макросы». Сочетание клавиш для быстрого вызова – Alt + F8. Выбираем нужное имя. Нажимаем «Выполнить».

Макрос.

Когда мы введем в пустую ячейку выпадающего списка новое наименование, появится сообщение: «Добавить введенное имя баобаб в выпадающий список?».

Нажмем «Да» и добавиться еще одна строка со значением «баобаб».

Выпадающий список в Excel с данными с другого листа/файла

Когда значения для выпадающего списка расположены на другом листе или в другой книге, стандартный способ не работает. Решить задачу можно с помощью функции ДВССЫЛ: она сформирует правильную ссылку на внешний источник информации.

  1. Делаем активной ячейку, куда хотим поместить раскрывающийся список.
  2. Открываем параметры проверки данных. В поле «Источник» вводим формулу: =ДВССЫЛ(“[Список1.xlsx]Лист1!$A$1:$A$9”).

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

Как сделать зависимые выпадающие списки

Возьмем три именованных диапазона:

Три именованных диапазона.

Это обязательное условие. Выше описано, как сделать обычный список именованным диапазоном (с помощью «Диспетчера имен»). Помним, что имя не может содержать пробелов и знаков препинания.

  1. Создадим первый выпадающий список, куда войдут названия диапазонов.
  2. Список диапазонов.

  3. Когда поставили курсор в поле «Источник», переходим на лист и выделяем попеременно нужные ячейки.
  4. Таблица со списком.

  5. Теперь создадим второй раскрывающийся список. В нем должны отражаться те слова, которые соответствуют выбранному в первом списке названию. Если «Деревья», то «граб», «дуб» и т.д. Вводим в поле «Источник» функцию вида =ДВССЫЛ(E3). E3 – ячейка с именем первого диапазона.
  6. Второй раскрывающийся список.

    Выбор нескольких значений из выпадающего списка Excel

    Бывает, когда из раскрывающегося списка необходимо выбрать сразу несколько элементов. Рассмотрим пути реализации задачи.

    1. Создаем стандартный список с помощью инструмента «Проверка данных». Добавляем в исходный код листа готовый макрос. Как это делать, описано выше. С его помощью справа от выпадающего списка будут добавляться выбранные значения.
    2. 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
       
    3. Чтобы выбранные значения показывались снизу, вставляем другой код обработчика.
    4. 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
       
    5. Чтобы выбираемые значения отображались в одной ячейке, разделенные любым знаком препинания, применим такой модуль.

    6. 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

    Не забываем менять диапазоны на «свои». Списки создаем классическим способом. А всю остальную работу будут делать макросы.

    Выпадающий список с поиском

    1. На вкладке «Разработчик» находим инструмент «Вставить» – «ActiveX». Здесь нам нужна кнопка «Поле со списком» (ориентируемся на всплывающие подсказки).
    2. Вставить ActiveX.

    3. Щелкаем по значку – становится активным «Режим конструктора». Рисуем курсором (он становится «крестиком») небольшой прямоугольник – место будущего списка.
    4. Элемент ActiveX.

    5. Жмем «Свойства» – открывается перечень настроек.
    6. Свойства ActiveX.

    7. Вписываем диапазон в строку ListFillRange (руками). Ячейку, куда будет выводиться выбранное значение – в строку LinkedCell. Для изменения шрифта и размера – Font.

    Скачать пример выпадающего списка

    При вводе первых букв с клавиатуры высвечиваются подходящие элементы. И это далеко не все приятные моменты данного инструмента. Здесь можно настраивать визуальное представление информации, указывать в качестве источника сразу два столбца.

Группа: Пользователи

Ранг: Новичок

Сообщений: 41


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Здравствуйте Уважаемые участники форума! Обучаясь программе Excel, я наткнулся на тему БД. И вскоре встал вопрос: как вывести данные из БД, которые удовлетворяют определенным условиям. Я уже научился выводить с простенькими условиями, но хочу научиться и со сложными (может быть, мое условие покажется для вас легким, но для меня это пока что сложно). На ваш суд предлагаю мою таблицу, где присутствует БД, основная таблица и таблица условий. В таблице условий присутствуют две ячейки: начальная дата и конечная дата. Необходимо согласно этому условию вывести из базы данных все значения в основную таблицу.
К теме прилагаю скрин и файл excel.
Заранее благодарю за помощь!

К сообщению приложен файл:

example.xlsx
(13.4 Kb)

Поиск значений в списке данных

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

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

В этой статье

Поиск значений в списке по вертикали по точному совпадению

Для выполнения этой задачи можно использовать функцию ВПР или сочетание функций индекс и ПОИСКПОЗ.

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

Дополнительные сведения можно найти в разделе функция ВПР.

Примеры ИНДЕКСов и СОВПАДЕНИй

=ИНДЕКС(нужно вернуть значение из C2:C10, которое будет соответствовать ПОИСКПОЗ(первое значение «Капуста» в массиве B2:B10))

Формула ищет первое значение в ячейке C2: C10, соответствующее капусты (в B7), и возвращает значение в C7 (100) — первое значение, соответствующее капусты.

Дополнительные сведения можно найти в разделе Функция индекс и функция ПОИСКПОЗ.

Поиск значений в списке по вертикали по приблизительному совпадению

Для этого используйте функцию ВПР.

Важно: Убедитесь, что значения в первой строке отсортированы в возрастающем порядке.

В приведенном выше примере функция ВПР ищет имя учащегося, у которого есть 6 тардиес в диапазоне A2: B7. В таблице нет записи для 6 тардиес, поэтому функция ВПР ищет следующее самое высокое соответствие ниже 6 и находит значение 5, связанное с первым именем Дэйв, и, следовательно, возвращает Дэйв.

Дополнительные сведения можно найти в разделе функция ВПР.

Поиск значений по вертикали в списке неизвестного размера с точным соответствием

Для выполнения этой задачи используйте функции СМЕЩ и ПОИСКПОЗ.

Примечание: Этот подход используется, если данные находятся в диапазоне внешних данных, который вы обновляете каждый день. Вы знаете, что в столбце B есть Цена, но вы не знаете, сколько строк данных возвращает сервер, а первый столбец не отсортирован по алфавиту.

C1 — это верхняя левая ячейка диапазона (также называемая начальной ячейкой).

Match («апельсины»; C2: C7; 0) ищет оранжевый цвет в диапазоне C2: C7. Не следует включать начальную ячейку в диапазон.

1 — количество столбцов справа от начальной ячейки, для которых должно быть возвращено возвращаемое значение. В нашем примере возвращаемое значение находится в столбце D, Sales.

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

Для выполнения этой задачи используется функция ГПР. Ниже приведен пример.

Функция ГПР выполняет поиск по столбцу Sales и возвращает значение из строки 5 в указанном диапазоне.

Дополнительные сведения можно найти в разделе функции ГПР.

Поиск значений в списке по горизонтали с использованием приблизительного совпадения

Для выполнения этой задачи используется функция ГПР.

Важно: Убедитесь, что значения в первой строке отсортированы в возрастающем порядке.

В приведенном выше примере функция ГПР ищет значение 11000 в строке 3 в указанном диапазоне. Он не находит 11000 и, следовательно, ищет следующее наибольшее значение, которое меньше 1100 и возвращает число 10543.

Дополнительные сведения можно найти в разделе функции ГПР.

Создание формулы подстановки с помощью мастера подстановок (толькоExcel 2007 )

Примечание: Надстройка «Мастер подстановок» прекращена в Excel 2010. Эти функциональные возможности заменены мастером функций и доступными функциями поиска и работы со ссылками (ссылками).

В Excel 2007 мастер подстановок создает формулу подстановки на основе данных листа, имеющих заголовки строк и столбцов. Мастер подстановок помогает находить другие значения в строке, когда вы знаете значение в одном столбце, и наоборот. Мастер подстановок использует индекс и СОВПАДЕНИе в создаваемых формулах.

Щелкните ячейку в диапазоне.

На вкладке формулы в группе решения нажмите кнопку Подстановка .

Если команда подстановка недоступна, необходимо загрузить мастер подстановок надстройка программу.

Загрузка программы-надстройки «Мастер подстановок»

Нажмите кнопку Microsoft Office , щелкните Параметры Excelи выберите категорию надстройки.

В поле Управление выберите элемент Надстройки Excel и нажмите кнопку Перейти.

В диалоговом окне надстройки установите флажок Мастер подстановоки нажмите кнопку ОК.

Выборка значений из таблицы Excel по условию

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

Как сделать выборку в Excel по условию

Чтобы определить соответствующие значение первому наименьшему числу нужна выборка из таблицы по условию. Допустим мы хотим узнать первый самый дешевый товар на рынке из данного прайса:

Автоматическую выборку реализует нам формула, которая будет обладать следующей структурой:

В месте «диапазон_данных_для_выборки» следует указать область значений A6:A18 для выборки из таблицы (например, текстовых), из которых функция ИНДЕКС выберет одно результирующие значение. Аргумент «диапазон» означает область ячеек с числовыми значениями, из которых следует выбрать первое наименьшее число. В аргументе «заголовок_столбца» для второй функции СТРОКА, следует указать ссылку на ячейку с заголовком столбца, который содержит диапазон числовых значений.

Естественно эту формулу следует выполнять в массиве. Поэтому для подтверждения ее ввода следует нажимать не просто клавишу Enter, а целую комбинацию клавиш CTRL+SHIFT+Enter. Если все сделано правильно в строке формул появятся фигурные скобки.

Обратите внимание ниже на рисунок, где в ячейку B3 была введена данная формула в массиве:

Выборка соответственного значения с первым наименьшим числом:

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

Как работает выборка по условию

Ключевую роль здесь играет функция ИНДЕКС. Ее номинальное задание – это выбирать из исходной таблицы (указывается в первом аргументе – A6:A18) значения соответственные определенным числам. ИНДЕКС работает с учетом критериев определённых во втором (номер строки внутри таблицы) и третьем (номер столбца в таблице) аргументах. Так как наша исходная таблица A6:A18 имеет только 1 столбец, то третий аргумент в функции ИНДЕКС мы не указываем.

Чтобы вычислить номер строки таблицы напротив наименьшего числа в смежном диапазоне B6:B18 и использовать его в качестве значения для второго аргумента, применяется несколько вычислительных функций.

Функция ЕСЛИ позволяет выбрать значение из списка по условию. В ее первом аргументе указано где проверяется каждая ячейка в диапазоне B6:B18 на наличие наименьшего числового значения: ЕСЛИB6:B18=МИНB6:B18. Таким способом в памяти программы создается массив из логических значений ИСТИНА и ЛОЖЬ. В нашем случаи 3 элемента массива будут содержат значение ИСТИНА, так как минимальное значение 8 содержит еще 2 дубликата в столбце B6:B18.

Следующий шаг – это определение в каких именно строках диапазона находится каждое минимальное значение. Это нам необходимо по причине определения именно первого наименьшего значения. Реализовывается данная задача с помощью функции СТРОКА, она заполняет элементы массива в памяти программы номерами строк листа. Но сначала от всех этих номеров вычитается номер на против первой строки таблицы – B5, то есть число 5. Это делается потому, что функция ИНДЕКС работает с номерами внутри таблицы, а не с номерами рабочего листа Excel. В тоже время функция СТРОКА умеет возвращать только номера строк листа. Чтобы не получилось смещение необходимо сопоставить порядок номеров строк листа и таблицы с помощи вычитанием разницы. Например, если таблица находится на 5-ой строке листа значит каждая строка таблицы будет на 5 меньше чем соответственная строка листа.

После того как будут отобраны все минимальные значения и сопоставлены все номера строк таблицы функция МИН выберет наименьший номер строки. Эта же строка будет содержать первое наименьшее число, которое встречается в столбце B6:B18. На основании этого номера строки функции ИНДЕКС выберет соответствующее значение из таблицы A6:A18. В итоге формула возвращает это значение в ячейку B3 в качестве результата вычисления.

Как выбрать значение с наибольшим числом в Excel

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

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

=70;»»;B6:B18));СТРОКА(B6:B18)-СТРОКА(B5);»»)))’ class=’formula’>

Как в Excel выбрать первое минимальное значение кроме нуля:

Как легко заметить, эти формулы отличаются между собой только функциями МИН и МАКС и их аргументами.

Теперь Вас ни что не ограничивает. Один раз разобравшись с принципами действия формул в массиве Вы сможете легко модифицировать их под множество условий и быстро решать много вычислительных задач.

Вывод отобранных значений в отдельный диапазон в Excel. Бесплатные примеры и статьи.

Пять последних значений в MS EXCEL

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

Удаляем в MS EXCEL пропуски в списке (формулы)

Если список значений содержит пропуски (пустые ячейки), то это может существенно затруднить его дальнейший анализ. С помощью сортировки уберем пустые ячейки из списка, сформировав формулами список в соседнем столбце.

Запрос на выборку данных (формулы) в MS EXCEL

Суть запроса на выборку – выбрать из исходной таблицы строки, удовлетворяющие определенным критериям (подобно применению стандартного Фильтра). Произведем отбор значений из исходной таблицы с помощью формул массива. В отличие от применения Фильтра (CTRL+SHIFT+L или Данные/ Сортировка и фильтр/ Фильтр ) отобранные строки будут помещены в отдельную таблицу.

Отбор уникальных значений (убираем повторы из списка) в MS EXCEL

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

Вывод итогов столбцов по строкам в MS EXCEL

Пусть имеется 5 столбцов с данными. В каждом столбце по 10 чисел, необходимо найти сумму чисел в каждом столбце. Обычно итоговое значение выводится внизу столбца или над его заголовком, поэтому все итоговые значения располагаются в одной строке. Но когда столбцов слишком много, то удобнее итоговые значения столбцов выводить в один отдельный столбец, а не располагать их под данными. Напишем формулу, которая помогает сделать это преобразование.

Отбор неповторяющихся значений со значениями из соседнего столбца в MS EXCEL

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

Отбор неповторяющихся значений в MS EXCEL

Имея список с повторяющимися значениями, создадим список, состоящий только из значений, которые не повторяются.

Отбор повторяющихся значений в MS EXCEL

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

Динамическое разнесение данных по столбцам

Пусть имеется таблица, состоящая из двух столбцов: наименование организации и ее тип (юридическое лицо, индивидуальный предприниматель, физическое лицо). Необходимо разнести организации по разным столбцам в зависимости от типа: Юрлица, ИП и ФЛ должны быть каждый в своем отдельном столбце.При добавлении новых строк в исходную таблицу организации должны динамически попадать в нужный столбец.

Отбор уникальных значений в MS EXCEL с условиями

Продолжим идеи, изложенные в статье Отбор уникальных значений в MS EXCEL. Сначала отберем из таблицы только те строки, которые удовлетворяют заданным условиям, затем из этих строк выберем только уникальные значения из первого столбца. При добавлении новых строк в таблицу, список уникальных значений будет автоматически обновляться.

Запрос на выборку данных в MS EXCEL (на основе элементов управления формы)

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

Отбор неповторяющихся значений из двух диапазонов в MS EXCEL

Имея два списка с однотипными повторяющимися значениями, создадим список, состоящий только из неповторяющихся значений.

Отбор уникальных значений из двух диапазонов в MS EXCEL

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

Поиск ТЕКСТовых значений в MS EXCEL с выводом их в отдельный список. Часть2. Подстановочные знаки

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

Поиск ТЕКСТовых значений в MS EXCEL с выводом их в отдельный список. Часть1. Обычный поиск

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

Поиск ТЕКСТовых значений в MS EXCEL с выводом их в отдельный список. Часть3. Поиск с учетом РЕГИСТРА

Найдем текстовые значения, удовлетворяющие заданному пользователем критерию с учетом РЕгиСТРА. Поиск будем осуществлять в диапазоне с повторяющимися значениями. При наличии повторов, можно ожидать, что критерию будет соответствовать несколько значений. Для их вывода в отдельный диапазон удобно использовать формулы массива.

Отбор уникальных значений с сортировкой в MS EXCEL

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

Поиск ЧИСЛОвых значений и вывод соответствующих значений в отдельный список в MS EXCEL

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

Поиск нескольких значений с максимальной длиной строки в MS EXCEL

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

Отбор повторяющихся значений (дубликатов) со значениями из соседнего столбца в MS EXCEL

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

ВПР с возвратом всех значений

Все, кто сталкивался с функцией ВПР знают, что она умеет возвращать исключительно одно значений — первое найденное. Но что делать, когда надо видеть все значения? К примеру имеется такая таблица:

И из этой таблицы необходимо получить фамилии(поле ФИО) всех сотрудников из отдела Сбыта:

Тут два варианта:

    Вариант 1: все значения необходимо получить в одной ячейке через разделитель(скажем запятую). Такое возможно только через использование VBA(на момент написания статьи). Такую функцию я написал давно: Как сцепить несколько значений в одну ячейку по критерию? СцепитьЕсли

. В результате получим что-то вроде: Александров Иван,Александров Петр,Андреев Алексей .

  • Вариант 2: каждое значение должно быть в отдельной ячейке. Этот вариант мы и рассмотрим более подробно в данной статье. Причем решать задачу будем без использования макросов — только встроенными функциями
  • Здесь надо сразу оговориться — при помощи непосредственно ВПР (VLookup) это сделать ну никак не получится. Но это можно сделать при помощи её родственников — связки ИНДЕКС(ПОИСКПОЗ) (INDEX(MATCH)) . Плюс еще пара функций. В сборе функция выглядит так:
    =ИНДЕКС( $A$12:$G$111 ;НАИМЕНЬШИЙ(ЕСЛИ( $I$12 = $C$12:$C$111 ;СТРОКА( $C$12:$C$111 )-11);СТРОКА( A1 ));1)
    =INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1)
    где:

    • $A$12:$G$111 — таблица с ФИО и всеми данными
    • $I$12 — ячейка с названием отдела
    • $C$12:$C$111 — столбец с названиями отделов в таблице $A$12:$G$111

    А теперь начнем разбирать формулу по кусочкам
    Предлагаю сразу скачать пример файла с данными и формулами — тогда понять будет проще:

    Tips_All_VlookupAllVals.xls (84,5 KiB, 8 651 скачиваний)

    • Первое и самое главное — формула вводится в ячейку как формула массива. Это значит, что для приложенного к статье примера необходимо будет выделить ячейку J12 , записать в неё формулу и завершить ввод нажатием сразу трех клавиш: Ctrl+Shift+Enter. После этого скопировать ячейку, выделить диапазон J13:J39 и вставить туда скопированную ячейку.
    • За отбор ФИО указанного отдела отвечает этот кусок: ЕСЛИ( $I$12 = $C$12:$C$111 ;СТРОКА( $C$12:$C$111 )-11)
      IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11)
      Как видно здесь идет сравнение отдела, записанного в $I$12 со всеми отделами в таблице: $C$12:$C$111 . Если отдел совпадает, то функция возвращает номер строки СТРОКА( $C$12:$C$111 ) . Но нам нужен не номер строки на листе, а номер строки внутри таблицы(потому что в формулу ИНДЕКС (INDEX) у нас передан диапазон $A$12:$G$111 и если передать в его второй аргумент( номер_строки ) 14, то получим не Александров Иван , а Андреев Олег ). Поэтому отнимаем от номера строки 11, чтобы было возвращено число 3(а не 14). Т.к. формула записана формулой массива — ЕСЛИ (IF) возвращает массив из номеров строк и логического ЛОЖЬ (FALSE) (если отдел не совпадает):
      шаг 1: ЕСЛИ(<ЛОЖЬ:ЛОЖЬ: ИСТИНА :ЛОЖЬ:ЛОЖЬ: ИСТИНА :ЛОЖЬ:ЛОЖЬ:ЛОЖЬ>;<12:13: 14 :15:16: 17 :18:19:20>-11)
      шаг 2: ЕСЛИ(<ЛОЖЬ:ЛОЖЬ: ИСТИНА :ЛОЖЬ:ЛОЖЬ: ИСТИНА :ЛОЖЬ:ЛОЖЬ:ЛОЖЬ>;<1:2: 3 :4:5: 6 :7:8:9>)
      шаг 3:
    • Т.к. ЕСЛИ (IF) в данном случае возвращает массив значений, включая ненужные нам ЛОЖЬ (FALSE) — применяем НАИМЕНЬШИЙ (SMALL) , которая будет брать только числа (сначала 3, затем 6 и т.д.), а логические значения ЛОЖЬ (FALSE) будет игнорировать:
      НАИМЕНЬШИЙ(<ЛОЖЬ:ЛОЖЬ: 3 :ЛОЖЬ:ЛОЖЬ: 6 :ЛОЖЬ:ЛОЖЬ:ЛОЖЬ>;СТРОКА(A1))
      SMALL(<ЛОЖЬ:ЛОЖЬ: 3 :ЛОЖЬ:ЛОЖЬ: 6 :ЛОЖЬ:ЛОЖЬ:ЛОЖЬ>;ROW(A1))
      Функция НАИМЕНЬШИЙ (SMALL) отбирает из указанного массива чисел наименьшее. При этом можно отобрать по рангу — первое наименьшее, второе наименьшее, третье наименьшее и т.д.
    1. с первым аргументом разобрались — это уже отобранные записи, где число — строка в таблице с нужной ФИО и ненужные нам логические ЛОЖЬ (FALSE) .
    2. второй аргумент СТРОКА(A1) для каждой следующей строки будет меняться. В приложенном примере первая ячейка с формулой — J12 . В ней СТРОКА(A1) равна 1, т.е. НАИМЕНЬШИЙ (SMALL) вернет первое наименьшее из массива чисел — 3 . В ячейке J13 это уже будет СТРОКА(A2) и она равна 2, а значит НАИМЕНЬШИЙ (SMALL) вернет второе наименьшее из массива чисел — 6 . И т.д. Когда все числа закончатся — НАИМЕНЬШИЙ (SMALL) вернет значение ошибки #ЧИСЛО! (#NUM!)
      ячейка J12
      шаг 1: НАИМЕНЬШИЙ(<ЛОЖЬ:ЛОЖЬ: 3 :ЛОЖЬ:ЛОЖЬ: 6 :ЛОЖЬ:ЛОЖЬ:ЛОЖЬ>;СТРОКА(A1))
      шаг 2: НАИМЕНЬШИЙ(<ЛОЖЬ:ЛОЖЬ: 3 :ЛОЖЬ:ЛОЖЬ: 6 :ЛОЖЬ:ЛОЖЬ:ЛОЖЬ>;1)
      шаг 3: НАИМЕНЬШИЙ( 3 )
      ячейка J13
      шаг 1: НАИМЕНЬШИЙ(<ЛОЖЬ:ЛОЖЬ: 3 :ЛОЖЬ:ЛОЖЬ: 6 :ЛОЖЬ:ЛОЖЬ:ЛОЖЬ>;СТРОКА(A2))
      шаг 2: НАИМЕНЬШИЙ(<ЛОЖЬ:ЛОЖЬ: 3 :ЛОЖЬ:ЛОЖЬ: 6 :ЛОЖЬ:ЛОЖЬ:ЛОЖЬ>;2)
      шаг 3: НАИМЕНЬШИЙ( 6 )
  • И последний штрих — все это передается в функцию ИНДЕКС (INDEX) . Для ячейки J12 это будет значение ячейки, расположенной на пересечении 3-й строки и 1-го столбца диапазона $A$12:$G$111 . На листе это ячейка A14 . Т.е. третья сверху ячейка столбца А в диапазоне $A$12:$G$111 — Александров Иван .

    ячейка J12
    шаг 1: =ИНДЕКС( $A$12:$G$111 ;НАИМЕНЬШИЙ( 3 );1)
    шаг 2: =ИНДЕКС( $A$12:$G$111 ;3;1)
    шаг 3: Александров Иван
    ячейка J13
    шаг 1: =ИНДЕКС( $A$12:$G$111 ;НАИМЕНЬШИЙ( 6 );1)
    шаг 2: =ИНДЕКС( $A$12:$G$111 ;6;1)
    шаг 3: Александров Петр

  • И в довершение неплохо бы убрать ошибку в случае, если ни одно значение не соответствует критерию или значений больше, чем ячеек с формулами. Более подробно подобное решение я описывал в этой статье: Как в ячейке с формулой вместо ошибки показать 0
    Для всех версий Excel:
    =ЕСЛИ(ЕОШ(ИНДЕКС( $A$12:$G$111 ;НАИМЕНЬШИЙ(ЕСЛИ( $I$12 = $C$12:$C$111 ;СТРОКА( $C$12:$C$111 )-11);СТРОКА( A1 ));1));»»;ИНДЕКС( $A$12:$G$111 ;НАИМЕНЬШИЙ(ЕСЛИ( $I$12 = $C$12:$C$111 ;СТРОКА( $C$12:$C$111 )-11);СТРОКА( A1 ));1))
    =IF(ISERR(INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1));»»;INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1))
    Для Excel 2007 и выше:
    =ЕСЛИОШИБКА(ИНДЕКС( $A$12:$G$111 ;НАИМЕНЬШИЙ(ЕСЛИ( $I$12 = $C$12:$C$111 ;СТРОКА( $C$12:$C$111 )-11);СТРОКА( A1 ));1);»»)
    =IFERROR(INDEX($A$12:$G$111;SMALL(IF($I$12=$C$12:$C$111;ROW($C$12:$C$111)-11);ROW(A1));1);»»)
    Плюс к этому в приложенном к статье файле я привел формулу, которая возвращает список всех сотрудников выбранного отдела без повторений и формулу с возможностью просто поменять заголовок в результирующем столбце(в файле это столбец K, ячейка K11 ) на любой из исходной таблицы и данные будут отображены из этого столбца.
    Например, если вместо столбца ФИО записать в K11 Адрес — будут отображены все адреса сотрудников выбранного отдела. Если записать Телефон — все телефоны сотрудников выбранного отдела.

    Tips_All_VlookupAllVals.xls (84,5 KiB, 8 651 скачиваний)

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

    Поиск и подстановка по нескольким условиям

    Постановка задачи

    Если вы продвинутый пользователь Microsoft Excel, то должны быть знакомы с функцией поиска и подстановки ВПР или VLOOKUP (если еще нет, то сначала почитайте эту статью, чтобы им стать). Для тех, кто понимает, рекламировать ее не нужно 🙂 — без нее не обходится ни один сложный расчет в Excel. Есть, однако, одна проблема: эта функция умеет искать данные только по совпадению одного параметра. А если у нас их несколько?

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

    Нужно найти и вытащить цену заданного товара (Нектарин) в определенном месяце (Январь), т.е. получить на выходе152, но автоматически, т.е. с помощью формулы. ВПР в чистом виде тут не поможет, но есть несколько других способов решить эту задачу.

    Способ 1. Дополнительный столбец с ключом поиска

    Это самый очевидный и простой (хотя и не самый удобный) способ. Поскольку штатная функция ВПР (VLOOKUP) умеет искать только по одному столбцу, а не по нескольким, то нам нужно из нескольких сделать один!

    Добавим рядом с нашей таблицей еще один столбец, где склеим название товара и месяц в единое целое с помощью оператора сцепки (&), чтобы получить уникальный столбец-ключ для поиска:

    Теперь можно использовать знакомую функцию ВПР (VLOOKUP) для поиска склеенной пары НектаринЯнварь из ячеек H3 и J3 в созданном ключевом столбце:

    Плюсы : Простой способ, знакомая функция, работает с любыми данными.

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

    Способ 2. Функция СУММЕСЛИМН

    Если нужно найти именно число (в нашем случае цена как раз число), то вместо ВПР можно использовать функцию СУММЕСЛИМН (SUMIFS) , появившуюся начиная с Excel 2007. По идее, эта функция выбирает и суммирует числовые значения по нескольким (до 127!) условиям. Но если в нашем списке нет повторяющихся товаров внутри одного месяца, то она просто выведет значение цены для заданного товара и месяца:

    Плюсы : Не нужен дополнительный столбец, решение легко масштабируется на большее количество условий (до 127), быстро считает.

    Минусы : Работает только с числовыми данными на выходе, не применима для поиска текста, не работает в старых версиях Excel (2003 и ранее).

    Способ 3. Формула массива

    О том, как спользовать связку функций ИНДЕКС (INDEX) и ПОИСКПОЗ (MATCH) в качестве более мощной альтернативы ВПР я уже подробно описывал (с видео). В нашем же случае, можно применить их для поиска по нескольким столбцам в виде формулы массива. Для этого:

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

  • Нажмите в конце не Enter, а сочетание Ctrl+Shift+Enter, чтобы ввести формулу не как обычную, а как формулу массива.
  • Как это на самом деле работает:

    Функция ИНДЕКС выдает из диапазона цен C2:C161 содержимое N-ой ячейки по порядку. При этом порядковый номер нужной ячейки нам находит функция ПОИСКПОЗ. Она ищет связку названия товара и месяца (НектаринЯнварь) по очереди во всех ячейках склеенного из двух столбцов диапазона A2:A161&B2:B161 и выдает порядковый номер ячейки, где нашла точное совпадение. По сути, это первый способ, но ключевой столбец создается виртуально прямо внутри формулы, а не в ячейках листа.

    Плюсы : Не нужен отдельный столбец, работает и с числами и с текстом.

    Минусы : Ощутимо тормозит на больших таблицах (как и все формулы массива, впрочем), особенно если указывать диапазоны «с запасом» или сразу целые столбцы (т.е. вместо A2:A161 вводить A:A и т.д.) Многим непривычны формулы массива в принципе (тогда вам сюда).

  • В процессе вывода знака на экран компьютера производится обратное перекодирование, т. е. преобразование двоичного кода знака в его изображение.
  • Любая процедура состоит из трех частей: ввода, выполнения и вывода. Ввод —
    это информация, необходимая для выполнения процедуры; вывод —
    это то, что получилось в результате выполнения процедуры.

    Свойства объектов, значения ячеек и значения переменных — все это примеры ввода. Данные ввода можно получить во время выполнения процедуры от пользователя. Это называется пользовательским вводом.

    Наиболее простая форма пользовательского ввода — это щелчок на кнопке в окне сообщения. Немного сложнее — это ввод одного значения в поле ввода диалогового окна.

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

    С помощью окна сообщения функции MsgBox() вы можете задать вопрос, а затем, в зависимости от ответа, выполнить то или иное действие.

    Функция MsgBox() имеет пять аргументов:

    MsgBox(Prompt:=[, Buttons:=] [, Title:=] [, HelpFile:=, Context:=])

    АргументPrompt определяет сообщение, которое появится в диалоговом окне. Наберите текст (в кавычках). Используйте переменную типа string или объединенные
    строковые переменные и строки со значком &, например:

    “Этот экран высотой в «& AppIication.UsableHeight &» точек»

    АргументButtons определяет, какие кнопки появятся в окне сообщения. Укажите их, используя такие константы, как vbExclamation или vbOK. Эти константы VBA представляет как числа. Хотя вместо констант можно
    применять числа для обозначения кнопок, однако рекомендуем использовать константы, поскольку при этом вы получите легко читаемый код. Параметры аргумента Button можно разделить на несколько групп. Две наиболее важные — это пиктограммы
    и кнопки.
    В окне сообщения вы можете поместить четыре типа пиктограмм и шесть типов кнопок. Другие параметры определяют, какая кнопка считается нажатой по умолчанию и работа какого приложения приостанавливается, когда появляется диалоговое окно, – только Excel или вообще всех приложений. В таблице 4.1 приведены эти параметры.

    Таблица 4.1 – Значения константы аргумента Button функции MsgBox

    Константа Значение Описание
    VbOKonly Выводит кнопку ОК
    VbOKCancel Выводит кнопки ОК
    и Отмена
    VbAbortRetryIgnore Выводит кнопки Прекратить, Повторить
    и Игнорировать
    VbYesNoCancel Выводит кнопки Да, Нет
    и Отмена
    VbYesNo Выводит кнопки Да
    и Нет
    VbRetryCancel Выводит кнопки Повторить
    и Отмена
    VbCritical Выводит пиктограмму Critical Message (Критическое сообщение)
    VbQuestion Выводит пиктограмму Question mark (Предупреждающий запрос)
    VbExclamation Выводит пиктограмму Exclamation (Предупреждение)
    VbInformation Выводит пиктограмму Information
    VbDefaultButton1 Принимает по умолчанию первую кнопку
    VbDefaultButton2 Принимает по умолчанию вторую кнопку
    VbDefaultButton3 Принимает по умолчанию третью кнопку
    VbApplicationModal Excel прекращает работу закрытия окна сообщения
    VbSystemModal Приостанавливается работа всех приложений до закрытия окна сообщения

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

    Аргумент Title определяет заголовок окна сообщения. Как и Prompt, этот аргумент должен быть строкой, строковой переменной или объединением строк и строковых переменных. Вы можете не указывать этого аргумента, тогда по умолчанию названием окна сообщения будет Microsoft Excel.

    Для того чтобы указать текущую справку, используйте четвертый и пятый аргумент (или проигнорируйте их). Аргумент HelpFile — имя файла справки, а аргумент Context указывает раздел в нем. Если вы указали один из этих аргументов, то должны указать и второй. При этом Excel автоматически добавит кнопку справки в окно сообщения.

    Следующий код отображает два окна сообщения: первое с заголовком — «Системн_информ» — содержит пиктограмму с восклицательным знаком и сообщение об используемой высоте экрана; второе с заголовком — «Системная информация» — содержит сообщение об используемой ширине экрана.

    Sub ShowMessageOK()

    MsgBox Prompt:=» Высота этого экрана составляет» _

    & Application.UsableHeight & » точек», Buttons:=vbExclamation, Title:=»Системн_информ»

    MsgBox «Ширина этого экрана » & Application.UsableWidth & _

    » точек», vbInformation, «Системная информация»

    4.2 Принятие решения

    Очень просто вывести на экран несколько кнопок: используйте константы, указанные в таблице 3.1. Вы можете вывести окна сообщения с кнопками Да и Нет, кнопками Да, Нет и Отмена, а также кнопками Прекратить, Повторить, Игнорировать. Проанализировав в коде значение, возвращенное функцией MsgBox (таблица 4.2), можно определить, какая кнопка нажата, и направить выполнение программы по нужному пути.

    Таблица 4.2 – Значения, возвращаемые функцией MsgBox

    Константа Значение Нажатая кнопка
    VbOK ОК
    VbCansel Отмена
    VbAbort Прервать
    VbRetry Повторить
    VbIgnore Пропустить
    VbYes Да
    VbNo Нет

    Следующий пример кода выводит окно сообщения с кнопками Да и Нет. Если пользователь щелкнет на кнопке Да, то появится другое окно сообщения с надписью «Продолжаю. . . «. Если пользователь щелкнет на кнопке Нет, появится сообщение «Процесс прерван». Второй аргумент использует vbQuestion плюс vbYesNo: окно сообщения будет содержать знак вопроса и кнопки Да и Нет.

    Sub VoprosYesNo()

    Dim Indik As Integer

    Indik = MsgBox(«Хотите продолжать?», vbQuestion + vbYesNo, «Вопрос пользователю»)

    If Indik = vbYes Then

    MsgBox «Продолжаю. . .», vbInformation, «Системное сообщение»

    MsgBox «Процесс прерван», vbCritical, «Системное сообщение»

    В этом примере кода показаны два способа использования функции MsgBox. В первом случае круглые скобки ставятся сразу после слова MsgBox и после третьего аргумента. Это означает, что используется возвращаемое значение функции MsgBox. Следующие две функции не используют возвращаемого значения, поэтому круглые скобки не ставятся. Кнопки, расположенные в окне сообщения, определяют значение возвращаемой величины. Возвращаемое значение функции MsgBox является константой, которая начинается с vb и заканчивается словом, написанным на кнопке, например ОК или Отмена. Если в окне сообщения находятся кнопки Да и Нет, то функция MsgBox возвращает значение vbYes или vbNo.

    В данном коде переменная Indik равна результату функции MsgBox. Команда If проверяет, равняется ли значение Indik vbYes; если да, она выполняет соответствующие действия.

    4.3 Окно ввода

    Функция InputBox() немного сложнее, чем MsgBox(), и позволяет ввести реальное значение или текстовую строку. Поскольку InputBox() получает значение, её бессмысленно применять, не используя введенное значение. Поэтому эта функция всегда записывается с круглыми скобками.

    Функция InputBox() может иметь до семи аргументов:

    InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

    Необходимым является только первый — Prompt, в котором указывается сообщение в окне. Вторым является Title.

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

    Шестой и пятый аргументы определяют файл справки и его раздел. Если вы используете один из них, то необходимо использовать и другой. Тогда Excel добавит к окну ввода кнопку Справка.

    Функция InputBox() всегда возвращает строку. Даже если пользователь введет число – в действительности это строка. В большинстве случаев VBA переводит строку в число. Однако иногда перевод осуществляется неправильно. В таком случае нужно перевести возвращаемое значение в другой тип данных. Используйте для этого одну из функций перевода, например функцию Сint (значение), которая переводит возвращаемое значение в целое число.

    Щелкая на кнопке Отмена, вы ожидаете, что возвращаемой величиной будет vbCancel. Однако это неверно. Поскольку InputBox() возвращает строку, щелчок на кнопке Отмена приведет к тому, что будет возвращена пустая строка
    (набор кавычек — «»). Рассмотрите следующий пример, если ничего не введено (пустая строка), то происходит выход из подпрограммы.

    Sub Vvod_lnputBox()

    Dim s As String, sreal As Single

    s = InputBox(Prompt:=»Какая зарплата?:», _

    Title:=»Вопрос», Default: =550)

    If s = «» Then Exit Sub

    sreal = CSng (s)

    MsgBox «Зарплата составляет» & s & » налоги » & sreal * 0.13

    Иногда необходимо, чтобы пользователь ввел только конкретный тип данных. В этом случае используйте метод InputBox() вместо функции InputBox(). Поставив Application. перед InputBox(), вы укажете VBA, что необходимо использовать метод Excel InputBox(), а не функцию VBA. У метода InputBox() имеется еще и восьмой аргумент — Type. Указав тип, вы тем самым требуете (от пользователя) ввести только определенный тип данных. Чтобы разрешить ввод нескольких типов данных, добавьте значения различных типов данных. Однако если вы используете метод InputBox(), щелчок на кнопке Отмена возвращает значение False, а не пустую строку.

    4.4 Ввод-вывод при помощи ячеек Excel

    Для ввода исходных данных из конкретных ячеек рабочего листа Excel, а также для вывода результатов расчета в ячейки может быть эффективно применен объект ActiveCell. Объект Range используется для указания ячеек. Объект ActiveCell указывает на ячейку (или объект Range), который имеет фокус при вводе данных с клавиатуры. Для этого используется свойство Value. Например, в ячейку с адресом А5 необходимо записать значение переменной Rost:

    Range(“A5”).Select

    ActiveCell.Value = Rost

    Обратная процедура выполняется аналогично:

    Rost = ActiveCell.Value

    Если есть необходимость считывать большое число данных из различных ячеек, адреса которых можно вычислить, целесообразно использование метода Offset(R,C), где R – смещение на R строк вниз относительно строки активной ячейки, C – смещение на С столбцов вправо относительно столбца активной ячейки. Например, следующая строка записывает значение переменной Rost в ячейку В7.

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

    Для
    организации вывода информации используется
    встроенная функция MsgBox
    .

    Рассмотрим
    варианты ее применения.

    1.
    y

    =
    Sqr(16)

    MsgBox y

    2. S
    = 99

    MsgBox
    (“
    S=

    ” &
    S)

    это
    знак
    конкатенации

    амперсанд
    ;

    применяется
    для объединения нескольких строк в
    одну

    3. a
    = 5: b = 101

    MsgBox
    («a=»

    & a & » » & «b=» &

    b)

    4. MsgBox
    («a=»
    & a & Chr(13) & «b=» & b)

    с
    помощью этой функции вводится символ
    перехода

    на
    новую строку
    (преобразует
    число в символ)

    Объектная
    модель Excel

    представляет собой иерархию объектов,
    подчиненных одному объекту Application
    ,
    который соответствует самому

    приложению Excel. Объектами Excel
    являются
    рабочие книги, рабочие листы, диаграммы,
    диапазоны ячеек, ячейки и т. д.

    VBA
    может программно управлять любым из
    этих объектов.

    Каждый
    объект
    обладает
    набором свойств
    ,
    методов

    и событий.

    Свойство

    – это характеристика или параметр
    объекта.

    Метод

    – это действие, которое может выполнять
    объект.

    Событие

    – это действие, на которое объект
    реагирует автоматически.

    Управлять
    объектом в
    VBA

    можно 3 путями:

      изменяя
      свойства объекта;

      активизируя
      метод, связанный с объектом;

      определяя
      процедуру, запуск которой произойдет
      как отклик на событие.

    Вывод
    информации в ячейку Excel

    Ячейка
    как объект Excel в VBA-программе
    обозначается Cells(i,
    j)
    ,
    где i

    номер строки, j

    номер столбца электронной таблицы.

    Y

    Значение
    Y

    будет
    выведено
    на
    активный лист рабочей книги Excel в
    ячейку B
    3


    = 0.01

    Cells(3,
    2) = Y

    С

    Переменной
    B
    будет
    присвоено значение,

    которое
    хранится в ячейке С5

    (т.
    е. содержимое ячейки С5
    )


    читывание информации из
    ячейки Excel

    B = Cells(5,
    3)

    Средство vba для ввода информации

    Ввод
    информации от пользователя осуществляется
    через диалоговое окно ввода. Реализуется
    с помощью встроенной функции InputBox
    .

    Dim
    x As Single

    x= Val (InputBox («Введите
    x»))

    Функция
    InputBox

    возвращает последовательность символов,
    введенную в поле ввода (15
    )
    как данные типа String

    (строковый). Встроенная функция Val()
    преобразует
    строковое значение из поля ввода в
    числовое.

    Линейные вычислительные процессы

    Линейный
    алгоритм

    характеризуется строгой последовательностью
    реализации блоков в порядке их
    расположения в схеме – сверху – вниз.
    Условные блоки отсутствуют. Каждый
    блок выполняется однократно.

    Пример 1

    Вычислить значение функции

    при
    k
    = 33,5 x
    = 17

    1.
    Составим
    алгоритм решения задачи.

    2.
    В
    окне редактора кода введем программный
    код:

    Option
    Explicit

    Sub
    Линейный_процесс
    ()

    Dim
    k As
    Single,
    x As
    Single,
    y As
    Single
    ‘объявление
    переменных

    x
    = Val
    (InputBox
    («Введите
    значение x»))

    y
    = k
    * Exp(Sin(x))

    MsgBox
    «y=»
    & y

    вывод
    результата в диалоговое окно

    End
    Sub

    Команда
    Option
    Explicit
    обязывает
    объявлять все переменные в данной
    программе. Может размещаться только в
    разделе объявлений модуля.

    Лекция
    для ЗФ

    ОПЕРАТОРЫ ВВОДА
    И ВЫВОДА ДАННЫХ.

    ЛИНЕЙНЫЕ
    ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ

    ОПЕРАТОР
    ПРИСВАИВАНИЯ
    LET

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

    Формат оператора:


    Имя_переменной
    = Выражение

    SUMMA=X+COS(X)^2

    Следует различать
    оператор присваивания и алгебраическое
    равенство. Оператор Y
    = A
    + B
    означает для ЭВМ: сложить содержимое
    ячеек памяти, отведенных для размещения
    значений переменных А и В, и поместить
    результат в ячейку памяти, отведенную
    для значения переменной Y.
    В программировании широко используется
    конструкция оператора присваивания
    типа I
    = I
    + 1. К заданному значению переменной I
    прибавляется 1, и результат помещается
    в ту же ячейку, заменив бывшую там
    информацию на новую. С точки зрения
    математики равенство i
    =
    i
    +1

    не имеет смысла.

    При присвоении
    переменным строковых значений их
    необходимо заключать в кавычки:

    T
    = «Параметр 1»,

    а значения типа
    Дата/Время заключать в символы #
    («решетка»):

    D
    = #11/29/2008#

    ОПЕРАТОРЫ
    ВВОДА ДАННЫХ

    Рассмотрим три
    основных способа ввода данных.

    1.

    Запись значений переменных непосредственно
    в тексте программы

    осуществляется с помощью оператора
    присваивания
    .

    Имя_переменной
    = Выражение

    Этот способ
    используется, если исходные данные не
    изменяются

    при нескольких исполнениях программы.

    2.

    Ввод данных из
    ячеек рабочего листа
    Excel
    .

    Для этого используется
    инструкция С
    ells
    (i
    ,
    j
    )
    ,
    которая в данном случае выступает как
    функция ввода данных. Формат использования:

    Имя_переменной
    =
    С
    ells
    (i
    ,
    j
    )
    ,

    где i
    ,
    j

    – порядковые номера соответственно
    строки и столбца (числовые значения!),
    на пересечении которых находится ячейка,
    т. е. адрес ячейки.

    При этом следует
    иметь в виду, что данные на листе Excel
    уже имеются
    .

    Пример: А
    = Сells(1,
    2)

    После
    выполнения этой команды переменной А
    присвоится значение, которое хранится
    в ячейке, находящейся в первой строке
    (первая цифра) и во втором столбце (вторая
    цифра), т. е. в ячейке B1
    электронной таблицы.

    3.

    Ввод данных непосредственно в
    ходе выполнения программы
    ,
    т. е. в диалоговом режиме, выполняется
    с помощью диалогового окна ввода
    информации, реализуемого функцией
    InputBox
    .
    Основной
    формат этой функции:

    Имя_переменной
    =
    InputBox
    (“Сообщение”
    [, “Заголовок”] [, “Значение”])
    .

    В ходе работы
    программы при выполнении данной команды
    на экране монитора появляется диалоговое
    окно с указанным Заголовком

    ,
    содержащее текст Сообщения

    ,
    а также поле ввода с указанным Значением:

    Выполнение программы
    приостанавливается в ожидании ввода
    данных с клавиатуры и нажатия одной из
    кнопок. После ввода информации и нажатия
    на кнопку ОК
    переменной присваивается значение типа
    String

    (строковый тип данных), содержащее текст

    ,
    введенный в поле ввода.

    Пример:
    x
    =
    InputBox(“Введите
    x”,
    “Ввод исходных данных”, “0.15”)

    Имя окна можно
    опустить (при этом местоположение
    запятых сохраняется):

    x
    = InputBox(«Введите
    x», «0.15»)

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

    Имя_переменной
    =
    InputBox
    (“Сообщение”)

    Пример:
    d
    = InputBox(“Введите
    значение диаметра”)

    Если в поле ввода
    в появившемся диалоговом окне ввести
    23, то в переменную d
    будет записан текст “23”, а не число 23.
    Текстовая строка “23” представляет
    собой лишь визуальное отображение
    числа, но не является числом в буквальном
    смысле слова, т. е. с ним, как и с любым
    другим текстом, нельзя производить
    никаких арифметических действий.

    Для преобразования
    строкового типа данных в числовой тип
    используется функцияVal
    (Строка
    )
    ,
    которая возвращает число, содержащееся
    в Строке

    ,
    как числовое значение соответствующего
    типа.

    При записи в коде
    программы

    d
    = Val(InputBox(“Введите
    значение диаметра”))

    и вводе в поле
    ввода цифр 23 переменной d
    присвоится число 23.

    ОПЕРАТОРЫ
    ВЫВОДА ДАННЫХ

    Рассмотрим три
    основных способа вывода данных.

    1.

    Вывод в
    диалоговое окно

    с помощью команды MsgBox:

    MsgBox
    «Сообщение», «Заголовок»

    В
    результате выполнения этой команды на
    экране появляется диалоговое окно
    Заголовок

    ,
    содержащее указанный текст Сообщения

    .
    Выполнение программы приостанавливается
    до нажатия пользователем кнопки ОК.

    Пример:
    MsgBox y ,
    «Результат»

    В данном случае в
    качестве выводимого в окно Результат

    сообщения задано текущее значение
    переменной y
    :

    Простейший формат
    записи оператора MsgBox:

    MsgBox

    «Сообщение»

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

    Пример: MsgBox
    “Значение диаметра =” & d

    В результате на
    экране появится следующее диалоговое
    окно:

    2.

    Вывод данных на
    лист рабочей книги
    Excel

    с использованием инструкции С
    ells
    (i
    ,
    j
    )
    .
    В этом случае в отличие от ранее
    рассмотренного она выступает как команда
    вывода:

    C
    ells
    (i
    ,
    j
    )
    =
    «Сообщение».

    В результате этой
    команды указанное Сообщение


    помещается в ячейку с адресом, определяемым
    номером строки i

    и номером столбца j
    .

    Cells(1,
    1) = “x=” ‘Вывод
    в ячейку
    A
    1
    текста
    x
    =

    Cells(1,
    2) = x ‘Вывод
    в ячейку
    B
    1
    текущего значения переменной
    x

    3.

    Вывод данных в
    окно отладки

    Immediate

    («Немедленно»). Это окно обычно
    располагается под окном программного
    кода. Если этого окна нет, то его можно
    вывести, нажав Ctrl+G
    или из главного меню VBA
    View


    Immediate Window
    .

    Для вывода в окно
    отладки применяется метод Print
    (печать)
    объекта
    Debug
    (отладчик). Формат записи:

    Debug.Print
    [«Сообщение»]

    Пример:
    Debug.Print “Значение диаметра =” & d

    Как видно из этого
    примера, команда Debug.Print используется
    аналогично команде MsgBox.

    Пустой (т. е. без
    Сообщения
    )
    метод Debug.Print
    выводит пустую строку.

    Помимо знака &
    в методе Print
    возможно использование разделителей
    списка выводимых данных. При этом знак
    «;

    »
    означает вывод очередного значения
    непосредственно за предыдущим, знак
    «,

    »
    – переход к началу новой зоны печати
    (окно отладки делится на 5 вертикальных
    зон по 14 символов каждая). При вводе знак
    «;

    »
    между
    элементами выводного списка можно
    опускать, VBA
    добавит его автоматически.

    Запятая или точка
    с запятой в конце выводного списка в
    команде Debug.Print
    подавляет переход на новую строку
    (следующий Debug.Print
    начнет печать в той же строке).

    Пример:
    Debug.Print «Результат y=»;
    y;

    В любом операторе
    вывода

    (MsgBox,
    Cells,
    Debug.Print)
    возможен вывод не только готовых
    результатов, но и одновременный расчет
    и вывод:

    Debug.Print
    «s = «;
    s,
    » k1+k2 = «;
    k1 + k2

    MsgBox
    «Если диаметр = » & d & «, то
    радиус = » & d / 2

    Для вывода числового
    значения в заданном формате в операторах
    вывода MsgBox,
    Debug.Print
    вместо имени переменной следует
    использовать функцию Format

    с указанием количества десятичных
    знаков.

    Debug.Print
    z
    ‘вывод
    переменной z

    обычным образом

    Debug.Print
    Format
    (z
    ,
    «#0.
    00

    «)

    ‘вывод переменной
    z

    с 2-мя десятичными знаками

    MsgBox
    Format
    (z
    ,
    «#0.
    000

    «)

    ‘вывод переменной
    z

    с 3-мя десятичными знаками

    В операторе вывода
    Cells
    функцию Format
    использовать не рекомендуется.

    ЛИНЕЙНЫЕ
    ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ

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

    Общая
    структура линейной программы:

    Option
    Explicit

    Sub

    Имя
    _
    процедуры
    ()

    Объявление
    констант

    (Const


    )

    Объявление
    переменных

    (Dim


    )

    Тело процедуры:

    Ввод исходных
    данных

    Вычисления

    Вывод результатов

    End
    Sub

    Пример_Л1.


    Составить ГСА и текст программы для
    вычисления функции:


    где x
    = a∙t 2
    + 0.2 , a
    = 18, t
    – произвольное.

    ГСА Текст
    программы:

    Option
    Explicit
    ‘Запрет
    использования необъявленных переменных

    Sub

    Лин_процесс1()
    ‘Начало
    процедуры
    Лин_процесс1

    Const

    a
    = 18 ‘Объявление
    константы a

    Dim

    t
    As
    t

    Dim

    x
    As

    Single
    ‘Объявление
    вещественной переменной x

    Dim

    y
    As

    Single
    ‘Объявление
    вещественной переменной y

    t
    = Val(InputBox(«Введите
    t»))
    ‘Ввод значения t

    x = a
    * t ^2 + 0.2
    ‘Расчет
    x

    y = (x
    ^ 2 + Log(x) — (x + 1) ^ 2) / (x * Sin(x))
    ‘Расчет
    y

    MsgBox
    «Результат y=»
    & y
    ‘Вывод y

    в диалоговое окно

    End
    Sub

    ‘Конец
    процедуры

    Ниже приведено
    решение того же примера с использованием
    других способов ввода и вывода данных.

    1. Функция InputBox

    Функция InputBox имеет следующий синтаксис:

    Переменная = InputBox
    (Приглашение[, Заголовок] [, по_умолчанию] [, Xпоз] [, Yпоз] [, файл_справки, содержание]
    )

    Эта функция требует обязательного задания только аргумента Приглашение
    Значение аргумента Приглашение
    – единственный обязательный аргумент этой функции, служит текстовая строка, которая отображается в диалогом окне ввода в качестве сообщения. Этот текст должен быть заключен в двойных кавычках.

    Аргумент Заголовок

    Аргумент по_умолчанию
    задает значение, которое отображается по умолчанию в поле ввода, пока пользователь не введет свое значение. Если этот аргумент опустить, то поле ввода отображается пустым.

    Необязательные аргументы Xпоз
    и Yпоз
    задают положение окна ввода на экране. Аргументы файл_справки
    и содержание

    Возвращаемым значением функции InputBox является значение, введенное пользователем в поле ввода.

    2. Функция MsgBox

    Окно сообщения создаётся функцией MsgBox, которая имеет следующий синтаксис:

    Переменная = MsgBox
    (Приглашение[, Кнопки] [, Заголовок [, файл_справки, содержание]
    )

    Значение аргумента Приглашение
    – единственный обязательный аргумент этой функции, служит текстовая строка, которая отображается как сообщение в диалогом окне. Этот текст должен быть заключен в двойных кавычках. Отметим использование круглых скобок в синтаксисе MsgBox – они указывают на то, что в данном случае MsgBox является функцией, возвращающей какое-либо значение. Если скобки опущены, то для VBA это признак того, что данное выражение значение не возвращает. Если Вы хотите возвращать значение, надо использовать код, подобный следующему:

    Dim i As Integer

    Результатом работы такого кода в VBA будет диалоговое окно с тремя кнопками «Да», «Нет», «Отмена» и с пиктограммой восклицательный знак в желтом треугольнике.

    Если не указан аргумент Кнопки
    , то VBA предлагает только одну кнопку «OK». Аргумент Кнопки
    позволяет управлять следующими параметрами окна сообщения:

    ¨ Количеством кнопок в окне.

    ¨ Типы кнопок и и х размещение в окне.

    ¨ Пиктограммы, отображаемые в окне.

    ¨ Какая кнопка назначается по умолчания.

    ¨ Режим (модальность) окна сообщения.

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

    Группа Константа Значение Описание
    Группа 1 vbOKOnly Отображает только кнопку OK (установка по умолчанию)
    VbOKCancel Отображает кнопки OK и Отмена
    VbAbortRetryIgnore Отображает кнопки Стоп, Повтор и Пропустить.
    VbYesNoCancel Отображает кнопки Да, Нет и Отмена
    vbYesNo Отображает кнопки Да и Нет
    VbRetryCancel Отображает кнопки Повтор и Отмена
    Группа 2 VbCritical Отображает запрещающую пиктограмму
    VbQuestion
    VbExclamation Отображает предупреждающую пиктограмму
    VbInformation Отображает информационную пиктограмму
    Группа 3 VbDefaultButton1 Первая кнопка – кнопка по умолчанию
    VbDefaultButton2 Вторая кнопка – кнопка по умолчанию
    VbDefaultButton3 Третья кнопка – кнопка по умолчанию
    VbDefaultButton4 Четвертая кнопка – кнопка по умолчанию
    Группа 4 VbApplicationModal Режим приложения: пользователь должен закрыть окно сообщения перед продолжением работы в текущем приложении
    VbSystemModal Системный режим: все приложения недоступны, пока пользователь не закроет окно сообщения
    Дополнительная группа vbMsgBoxHelpButton Отображает кнопку Справка
    vbMsgBoxSetForeground Делает окно сообщения окном переднего плана
    vbMsgBoxRight Отображает окно сообщения, выровненным по правому краю окна приложения
    vbMsgBoxRtlReading Для иврита и арабского языка указывает, что текст должен выводиться справа налево.

    Табл. 1. Установки для аргумента Кнопки
    функции MsgBox

    Чтобы не ошибаться при вводе значений аргумента Кнопки
    , используйте список констант, который появляется после ввода знака «+». Знак «+» используется для объединения нескольких констант при задании сложного аргумента Кнопки.

    Аргумент Заголовок
    используется для задания текста, который помещается в строке заголовка окна ввода. Если этот аргумент не задан, то в строке заголовка отображается Microsoft Excel.

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

    В табл.2 представлен список значений, возвращаемых функциейMsgBox.
    Возвращаемое значение зависит от нажатой пользователем кнопки.

    Возвращаемое значение Кнопка
    OK
    Отмена
    Стоп
    Повтор
    Пропустить
    Да
    Нет

    Табл. 2. Значения, возвращаемые функцией MsgBox

    Наилучший тип Переменной возвращаемой функцией MsgBox является Integer.

    Объекты Range и Cells

    В VBA ячейки рабочего листа трактуются как объект Range. Это наиболее часто используемый объект.

    Объект Range при работе с ячейками использует формат А1.

    Формат А1.
    Ссылка состоит из имени столбца (обозначаются буквами от А до IV, 256 столбцов максимально) и номера строки (от 1 до 65536). Например, А77. Для ссылки на диапазон ячей указываются адреса левой верхней и правой нижней ячейки диапазона, разделенных двоеточием. Например, В10:В20, 7:7 (все ячейки в 7-й строке), 5:10 (все ячейки между 5-й и 10-й строками включительно), D:D (все ячейки в столбце D), H:J (все ячейки между столбцами H и J включительно). Признаком абсолютной ссылки является знак доллара перед именем строки или столбца

    Объект Cells при работе с ячейками использует формат R1C1.

    Формат R1C1
    . В формате R1C1, после буквы «R» указывается номер строки ячейки, после буквы «С» — номер столбца. Например, абсолютная ссылка R1C1 эквивалентна абсолютной ссылке $A$1 для формата А1. Для задания относительной ссылки указывается смешение по отношению к активной ячейке. Смешение указывается в квадратных скобках. Знак указывает направление смещения. Например, R[-3]С (относительная ссылка на ячейку, расположенную на три строки выше в том же столбце). RС (относительная ссылка на ячейку, расположенную на две строки ниже и на два столбца правее). R2С2 (абсолютная ссылка на ячейку, расположенную во второй строке и во втором столбце). R[-1] (относительная ссылка на строку, расположенную выше текущей ячейки), R (абсолютная ссылка на текущую строку).

    Полный адрес ячейки может содержать также имя рабочего и адрес книги. После имени листа ставится знак «!», а адрес книги заключается в квадратные скобки. Например: [Книга1.xls]Лист5!D$2.

    В качестве объекта Range и могут выступать:

    § отдельная ячейка;

    § выделенный диапазон ячеек;

    § несколько выделенных диапазонов ячеек (т.е. совокупность несмежных диапазонов);

    § строка и столбец;

    § трехмерный диапазон (т.е. состоящий из диапазонов, расположенных на разных рабочих листах).

    Свойства объекта Range и Cells

    Свойства Описание и допустимые значения
    Value Возвращает значение из ячейки или диапазона (в ячейку или диапазон):
    X=Range(“A1”).Value Range(“A1”).Value=10
    Name Возвращает имя диапазона:
    Range(“B1:B4”).Name=”Приложение”
    Address Возвращает текущее положение диапазона
    Count Возвращает количество ячеек в диапазоне
    Offset Возвращает величину смещения одного диапазона относительно другого
    Resize Позволяет изменять текущее выделение диапазона
    CurrentRegion Возвращает текущий диапазон, содержащий указанную ячейку и ограниченный пустыми строкой и столбцом.
    WrapText True (False) – разрешает (не разрешает) перенос текста при вводе в диапазон.
    EntireColumn,
    EntireRow
    Возвращает строку и столбец.
    ColumnWidth,
    RowHeight
    Возвращает ширину столбцов и высоту строк диапазона.
    Font Возвращает объект Font (шрифт). Например:
    With Worksheets(“Z3”).Range(“F10”).Font
    .Size=22
    .Bold=True
    .Italic=True
    End With
    Formula Формула в формате А1. Например, так можно ввести формулу в ячейку C2:
    Range(“C2”).Formula=”=$B$2+$A$2”
    FormulaLocal Формула в формате А1 с учетом языка пользователя (для неанглоязычных версий Excel). Например:
    Range(“C1”).FormulaR1C1= “=ПИ ()”
    FormulaR1C1 Формула в формате R1C1. Например,
    Range(“C1”).FormulaR1C1= “=R1C1+2”
    FormulaR1C1Local Формула в формате R1C1 с учетом языка пользователя (для неанглоязычных версий Excel).
    HorizontalAlignment Горизонтальное выравнивание. Возможные значения: xlHAlignGeneral (обычное), xlHAlignCenter (по центру), xlHAlignCenterAcrossSelection (по центру выделения), xlHAlignJustify (по ширине), xlHAlignRight (по правому краю), xlHAlignLeft (по левому краю) и другие.
    VerticalAlignment Вертикальное выравнивание. Возможные значения: xlVAlignBottom (по нижнему краю), xlVAlignCenter (по центру), xlVAlignTop (по верхнему краю) и другие.

    Методы объекта Range и Cells

    Методы Действия
    Address Возвращает адрес ячейки.
    AutoFit Автоматически настраивает ширину столбца и высоту строки. Например:
    Range(“B1:B3”).Columns.AutoFit
    Использование свойства Columns или Rows в данном случае необходимо, так как значением диапазона должны быть строки или столбцы, иначе будет выдаваться ошибка.
    Clear Очищает диапазон. Например: Range(“В1:В20”).Clear
    Copy Копирует диапазон в другой диапазон или буфер обмена (если параметр Destination не задан). Например, так можно скопировать значения диапазона с одного листа (Л1) на другой (Л2):
    Worksheets(“З1”).Range(“D1:D5”).Copy
    Destination:=Worksheets(“P2”).Range(“D5”)
    Cut Копирует диапазон с удалением (вырезает) в другой диапазон или буфер обмена (если параметр Destination не задан). Например, скопируем диапазон ячеек с удалением в буфер обмена:
    Worksheets(“Лист1”).Range(“D1:E5”).Cut
    Delete Удаляет диапазон. Параметр Shift определяет направление сдвига ячеек при удалении. Например:
    Range(“B6:D6”).Delete Shift:=xlShiftToLeft
    Insert Вставляет ячейку или диапазон ячеек. Например, так можно вставить строку перед шестой строкой на листе «Лист2»:
    Worksheets(“Лист2”).Rows(6).Insert
    Select Выделяет диапазон:
    Range(“A1:C7”).Select

    Методы объекта Range и Cells, реализующие команды Excel

    Методы Действия
    DataSeries Создает прогрессию.
    DataSeries(rowcol,date,step,stop,trend)
    Вручную метод выполняется с помощью команды ПравкаЗаполнитьПрогрессия
    AutoFill Автозаполнение. Автоматически заполняет ячейки диапазона элементами последовательности: Объект(Диапазон, Тип).
    AutoFilter Автофильтр. Реализует запрос на фильтрацию данных на рабочем листе:
    Объект.AutoFilter(Поле, Условие1, Оператор, Условие2)
    Соответствует команде ДанныеФильтрАвтофильтр.
    AdvancedFilter Расширенный фильтр. Соответствует команде ДанныеФильтрРасширенный фильтр.
    Consolidate Объединение данных из нескольких диапазонов в одну итоговую таблицу. Соответствует команде ДанныеКонсолидация.
    Find Поиск данных. Вручную вызывается командой ПравкаНайти.
    TblGoalSeek Подбор параметра. Вручную выполняется с помощью команды СервисПодбор параметра.
    Sort Сортировка данных. Вручную выполняется с помощью команды ДанныеСортировка
    Subtotal Добавляет промежуточные итоги. Вручную вызывается командой ДанныеПромежуточные итоги.

    Примечание

    . Следует особо отметить, что в VBA (в отличие от Excel) операция присваивания выполняется независимо от статуса ячейки и не меняет его. Т.е. для присвоение значения ячейке (или для получения её значения) совсем не обязательно, чтобы эта ячейка была активной (вспомните, что в Excel перед вводом в ячейку её необходимо активизировать), не станет она активной (если до этого не была таковой) и после присвоения ей какого-либо значения.

    Метод Cells
    делает указанную ячейку активной. Синтаксис метода следующий:

    Cells[(N строки, N столбца)]

    N строки —
    номер строки текущего листа Excel,

    N столбца –
    номер столбца текущего листа Excel (при обращении к этому методу столбцы нумеруются).

    В данном варианте синтаксиса предполагается, что на активном листе Excel ячейка, находящаяся на пересечении N строки
    и N столбца,
    становится активной.

    С помощью метода Cells
    можно сделать активной ячейку, чтобы затем вводить или выводить данные.

    Если с помощью этого метода осуществляется ввод данных

    из ячейки рабочего листа в переменную, то Cells
    стоит в правой части оператора присваивания, а если осуществляется вывод

    из переменной в ячейку рабочего листа, то Cells
    стоит в левой его части.

    Структура ввода
    , с использованием метода Cells
    следующая:

    <
    имя
    >=Cells (),

    <
    имя
    > —
    простая переменная или элемент массива.

    Структура вывода
    с использованием метода Cells
    следующая:

    Cells()= <
    выражение
    >,

    <
    выражение
    > —
    любое выводимое значение.

    Рассмотрим, пример следующей программы:

    Sub ввод_ввывод_Cells()

    Cells(5, 1) = «c=»

    До запуска этого макроса рабочий лист Excel имел вид (см. рис. 13):

    А после запуска макроса он выглядит так (см. рис. 14):

    Управляющие структуры VBA. Условный оператор. Оператор безусловного перехода

    Управляющие структуры
    позволяют управлять последовательностью выполнения программы. Без операторов управления все операторы программы будут выполняться слева направо и сверху вниз. Рассмотрим одну из управляющих структур VBA – условный оператор
    .

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

    Синтаксис условного оператора:

    Короткая форма
    Þ If <условие> Then <оператор>

    If < условие > Then

    < оператор > /< Группа операторов 1 >

    Полная форма
    ÞIf < условие > Then

    < оператор 1 > / < Группа операторов 1 >

    < оператор 2> < Группа операторов 2 >

    В блок схеме условный оператор изображается так:

    Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Это значение интерпретируется как False (Ложь), если оно нулевое, а любое ненулевое рассматривается как True (Истина). Если условие истинно, то выполняются все выражения, стоящие после ключевого слова Then
    . Если условие ложно, то выполняются все выражения, стоящие после ключевого слова Else
    .

    Допускаются многократно вложенные конструкции, имеющие столько уровней вложения сколько необходимо.

    Рассмотри еще одну управляющую структуру — оператор безусловного перехода
    . Его синтаксис:

    GoTo метка
    ,

    где метка

    это любая комбинация символов.

    Этот оператор принудительно изменяет последовательность выполнения программы. Оператор GoTo передает управление оператору с меткой, т.е. следующим за оператором GoTo будет выполняется оператор, указанный с помощью метки.

    Управляющие структуры VBA. Операторы цикла.

    Иногда требуется многократно выполнять некоторый набор инструкций автоматически, либо решить задачу по-другому в зависимости от значения переменных или параметров, заданных пользователем во время выполнения. Для этого служат условный оператор и операторы циклы.

    Рассмотрим операторы цикла VBA. Цикл с известным числом повторений
    (цикл с параметром) реализован в VBA с помощью оператора For Next
    следующей структуры:

    For
    <параметр цикла>=
    <начальное значение> To
    <конечное значение>

    <операторы VBA>

    Next
    <параметр цикла>

    <параметр цикла> – имя (идентификатор) параметра цикла;

    <начальное значение>
    – начальное значение параметра цикла;

    <конечное значение> – конечное значение параметра цикла;

    <шаг> – шаг изменения параметра цикла (необязательный параметр, если он отсутствует, шаг изменения равен 1);

    <операторы VBA>

    В блок-схеме этот оператор изображается так:

    В теле этого цикла можно использовать оператор Exit For
    , с помощью которого можно завершить цикл For Next
    до того, как параметр примет свое конечное значение.

    Циклы с неизвестным числом повторений
    реализуются на VBA с помощью операторов Do While … Loop, Do Until … Loop, Do … Loop While, Do … Loop Until .

    Рассмотрим структуру оператора Do While … Loop.

    Do While <условие>

    <операторы VBA>

    Здесь <условие>
    – логическое выражение;

    <операторы VBA>
    — операторы VBA, реализующие тело цикла.

    <условие>, если <условие> принимает значение Истина(True), то выполняются операторы до служебного слова Loop. Затем вновь проверяется условие, и так продолжается до тех пор, пока условие не станет ложным(False).

    Рассмотрим структуру оператора Do Until … Loop.

    Do Until <условие>

    <операторы VBA>

    Оператор выполняется следующим образом. Проверяется <условие>, если <условие> принимает значение Ложь(False), то выполняются операторы до служебного слова Loop. Затем вновь проверяется условие, и так продолжается до тех пор, пока условие не станет истинным (True).

    В блок схеме этот оператор изображается так:

    Мы рассмотрели операторы цикла, которые реализуют цикл с предусловием.

    Рассмотрим, операторы цикла, которые реализуют цикл с постусловием. Это операторы Do … Loop While и Do … Loop Until. Структура этих операторов следующая:

    <операторы VBA>

    Loop Until <условие>

    <условие>, если <условие> принимает значение Ложь(False), то опять выполняются операторы до служебного слова Loop. Так продолжается до тех пор, пока <условие> не станет истинным (True).

    В блок схеме этот оператор изображается так:

    <операторы VBA>

    Loop While <условие>

    Оператор выполняется следующим образом. Выполняются операторы до служебного слова Loop. Затем проверяется <условие>, если <условие> принимает значение Истина(True), то опять выполняются операторы до служебного слова Loop. Так продолжается до тех пор, пока <условие> не станет ложным (False).

    В блок схеме этот оператор изображается так:

    В VBA существует оператор, позволяющий осуществить досрочный выход из циклов с неизвестным числом повторений. Для выхода из этих циклов нужно использовать оператор Exit Do
    .

    Понравилась статья? Поделить с друзьями:

    А вот еще интересные статьи:

  • Выбрать элемент массива excel
  • Вывод значений в одну ячейку excel
  • Вывод datagrid в excel wpf
  • Выбрать число excel весь столбец
  • Вывод запроса в excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии