Макрос на подбор параметра в excel

 

SBK

Пользователь

Сообщений: 9
Регистрация: 18.08.2017

Сразу сообщаю: я не программист. Только пользователь excel.  Сейчас передо мной стала задача. Есть два выражения. В них входит трансцендентная переменная. В выражения входят и другие параметры. Одни из них постоянные. Другие образуют таблицу со ссылкой на массив, изменяющий формулы. До сих пор я пользовался функцией «подобрать параметр» в каждой строке. Сейчас у меня огромное количество строк (более тысячи). Можно ли автоматизировать данную функцию таким образом, чтобы она пересчитывала весь массив, подбирая параметр для каждой строки по движению курсора, как это происходит при вычислении обычных функций, а потом сама пересчитывала при изменении постоянных?

Спасибо за помощь, Сергей

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

#2

18.08.2017 21:58:59

Здравствуйте, Сергей!

Цитата
SBK написал: Есть два выражения

Какие?

Цитата
В них входит трансцендентная переменная

Что она из себя представляет и где она?

Цитата
В выражения входят и другие параметры

Какие?

Цитата
Одни из них постоянные

Какие именно?

Цитата
Другие образуют таблицу

Какие и какую таблицу?

Цитата
Можно ли автоматизировать

Наверное, можно, если знать ответы на все вопросы и увидеть файл-пример

 

SBK

Пользователь

Сообщений: 9
Регистрация: 18.08.2017

Прикладываю файл.  

Прикрепленные файлы

  • поля.xls (25 КБ)

 

AndreTM

Пользователь

Сообщений: 454
Регистрация: 02.05.2013

А расскажите-ка про решаемую задачу…

Сдается мне, что вы подбором решаете уравнения, которые имеют аналитическое решение.

А, не, не кажется:
если вы подбираете Δc (столбец D) так, чтобы столбец G был равен 1 (т.е. столбец E = столбец F, или a(c-Δc) = d), то
Δc = -(d/a-c)
d зависит только от столбца C (=β) и констант, столбец C зависит только от столбцов A и B (=x, =y).
Соответственно, столбцы E,F,G — вообще не нужны
Кроме того, если вынести константы L*L+R*R и 2LR в отдельные поля — то ускоряется расчёт d

В примере показаны серым цветом ваши только нужные исходные данные, салатовым — новые формулы.
И меняйте потом свои «константы» сколько угодно — результирующие формулы пересчитываются сразу…

Изменено: AndreTM19.08.2017 03:30:08

 

SBK

Пользователь

Сообщений: 9
Регистрация: 18.08.2017

#5

19.08.2017 08:09:53

Цитата
AndreTM написал:
А расскажите-ка про решаемую задачу…

Задача не аналитическая. Я просто на бегу сформировал вчера вечером файл и сделал в нём неправильную ссылку. В столбце F под косинусом стоит ссылка на столбец D. Так что уравнение трансцендентное. Никуда не деться от подбора параметров. И принципом малости оперировать тоже не получается, чтобы свести решение к приближённому аналитическому.

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

Спасибо за то, что возитесь со мной. Сейчас нашёл функцию подбора параметров в надстройке, но как его вставить чтобы это работало?

Прикрепленные файлы

  • поля.xls (22.5 КБ)

 

AndreTM

Пользователь

Сообщений: 454
Регистрация: 02.05.2013

#6

19.08.2017 15:47:45

Еще раз.

Скрытый текст

Если опять посмотреть на ваше «приравнивание» a(c-Δc) = d, то мы будем иметь уравнение вида
a(c — Δc) = sqrt(L*L + R*R — 2LRcos(β — b(c — Δc))

или, если исходить из условий, что (a, b, c, L, R) > 0, (c-Δc) > 0 (кстати, -pi/2 < β < pi/2)
cos(β — bx) = (-a2/2LR) x*x + (L/2R+R/2L) ; x = (c — Δc)

левая часть — синусоида, правая — парабола (с вершиной над Ox  и ветвями вниз), графически решается на раз, и можно решения найти аналитически, особенно уточнив ограничения для констант.

————————————————————

Если по теме — «подбор параметра» можно запускать макросом. То есть просто определить ваш диапазон с данными, и затем циклом перебирать строки, вычисляя значение:

Прикрепленные файлы

  • Planeta_94926_2.xlsm (26.4 КБ)

Изменено: AndreTM19.08.2017 16:00:04

 

SBK

Пользователь

Сообщений: 9
Регистрация: 18.08.2017

#7

19.08.2017 17:54:58

Цитата
AndreTM написал:
Если по теме — «подбор параметра» можно запускать макросом.

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

 

SBK

Пользователь

Сообщений: 9
Регистрация: 18.08.2017

#8

14.09.2017 09:09:28

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

Код
подбор можно было делать за курсором. Вы мне создали макрос для показанного примера. Он имеет вид[/P]
Sub recount()
   Set tbl = ActiveSheet.[a5].CurrentRegion
   Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count - 1))

   For Each cell In tbl.Cells
       cell.Offset(, 6).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 3)
   Next
End Sub

[P]Макрос прекрасно работал на примере, но как только я изменил расположение и размер массива на странице, программка перестала работать. Я уже её и так, и этак, со словами и без слов – не хочет.

Нашёл программку на этом же форуме в теме «VBA — подбор параметра для диапазона ячеек»

http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=18189

Код
Sub Макрос2()  
Dim Perechen_stavka As Range  
  Dim Perechen_itogo As Range  
  ' присваиваем двум переменным тип диапазон  
  Dim Stavka As Variant  
  Dim Itogo As Variant  
  ' присваиваем двум переменным тип variant  
  Set Perechen_stavka = Range("A6:A89")  
  Set Perechen_itogo = Range("H6:H89")  
 ' присваиваем каждой переменной конкретный диапазон  
  Set Stavka = Range("A6")  
  Set Itogo = Range("H6")  

  ' присваиваем каждой переменной начальное значение - не уверен, что это надо делать честно говоря...  
      For Each Perechen_itogo In Perechen_itogo  
          Range(Perechen_itogo).GoalSeek Goal:=0, ChangingCell:=Range(Perechen_stavka)  
      Exit For  
  Next  

  ' цикл -> обход каждой ячейки в диапазоне и запуск "подбора параметра"  
End Sub

В ней хотя бы понятно, как изменять диапазон, что для меня важно, поскольку по ходу задачи диапазоны будут изменяться. Но она тоже не захотела у меня работать. Говорит, что недопустимые назначения в «глобал». У меня excel 2003. Может в этом проблема? НЕ могли бы помочь мне довести макрос до ума. Или показать, что я должен изменять в исходном, Вашем макросе, чтобы работал при изменении диапазонов ячеек, или довести приведенную программку, чтобы она заработала. Огромное спасибо.

Изменено: SBK14.09.2017 10:14:02
(добавление текста)

 

SBK

Пользователь

Сообщений: 9
Регистрация: 18.08.2017

#9

14.09.2017 16:48:35

Цитата
_Igor_61 написал:
Что она из себя представляет и где она?

Это расчёт динамических полей.

Цитата
_Igor_61 написал:
Какие и какую таблицу?

Там действительно много параметров. Пример, который я давал вначале, в принципе, отражал задачу, хотя и не в полном объёме, чтобы не морочиться с большими массивами ячеек. Сейчас, когда я начал уже работу с задачей, у меня более 1600 строк. Но задача остаётся чисто для подбора параметре и вручную они прекрасно подбирается для единичных ячеек.
Проблема же макроса, как я вижу, в правильной записи переменных. Запись самой процедуры такая же, как и в стандартной программе excelя.Только нужно правильно записать цикл. Если можете, помогите, пожалуйста.

Изменено: SBK14.09.2017 16:49:50

 

SBK

Пользователь

Сообщений: 9
Регистрация: 18.08.2017

#10

18.09.2017 15:52:55

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

Прикрепленные файлы

  • расчёт.rar (65.86 КБ)

Изменено: SBK18.09.2017 15:54:52

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

Здравствуйте!
Возможно ли создать макрос, выполняющий подбор значений? Эту операцию надо проделывать многократно, от того ручками долго. Он категорически не хочет, у меня по крайней мере, записывать значение из необходимой ячейки в буфер обмена, а затем вставлять его в искомое значение. Пробовал создать объект (Dim MyDataObj As New DataObject) затем присвоить ему значение (MyDataObj.SetText (H41)), затем вставить его (MyDataObj.PutInClipboard). Но когда в строке Range(«C49»).GoalSeek Goal:=1473, ChangingCell:=Range(«C42») вместо числа вставляю этот объект, получаю ошибку.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub T1()
Range("G41").Select
Selection.Copy
Range("H41").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "1473"
Range("H41").Select
Selection.ClearContents
Range("C49").Select
Range("C49").GoalSeek Goal:=1473, ChangingCell:=Range("C42")
End Sub

Прошу простить, если что не так оформлено, я во всём этом новичок. Заранее благодарю)

12. Подбор параметра

Функция Подбор параметра.

Решение уравнений средствами программы Excel

Задача : Найти решение уравнения x 3 — Зх 2 +х= -1.

1. Присвойте рабочему листу имя Уравнение.

2. Занесите в ячейку A 1 значение 0.

3. Занесите в ячейку B 1 левую часть уравнения, используя в качестве независи­ мой переменной ссылку на ячейку A 1. Соответствующая формула может, напри­ мер, иметь вид = A 1^3-3* A 1^2+ A 1.

4. На вкладке Данные, в группе Работа с данными выберите Анализ «что если» — Подбор параметра.

5. В поле Установить в ячейке укажите В1, в поле Значение задайте -1, в поле Из­меняя значение ячейки укажите А1.

6. Щелкните на кнопке ОК и посмотрите на результат подбора, отображаемый в диалоговом окне Результат подбора параметра. Щелкните на кнопке ОК, чтобы сохранить полученные значения ячеек, участвовавших в операции.

7. Повторите расчет, задавая в ячейке A 1 другие начальные значения, например 0,5 или 2. Совпали ли результаты вычислений? Чем можно объяснить различия?

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

Составление штатного расписания больницы.

Вы — заведующий больницей. Составьте штатное расписа­ние, то есть определите, сколько сотрудников, на каких должностях и с каким окладом вы должны принять на работу. Общий месячный фонд зарплаты составляет $10.000.

Предположим, что для нормальной работы больницы нужно 5-7 санитарок, 8-10 медсестер, 10-12 врачей, 1 заведующий апте­кой, 3 заведующих отделениями, 1 главный врач, 1 заведующий хозяйством, 1 заведующий больницей.

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

Коэффициенты назначаются следующим образом:

медсестра должна получать в 1,5 раза больше санитарки;

врач — в 3 раза больше санитарки;

заведующий отделением — на $30 больше, чем врач;

заведующий аптекой — в 2 раза больше санитарки;

заведующий хозяйством — на $40 больше медсестры;

главный врач — в 4 раза больше санитарки;

заведующий больницей — на $20 больше главного врача.

Оформите таблицу, используя следующие столбцы: Должность, Количество сотрудников, Коэффициент A , Коэффициент B , Оклад, Итого.

1. В первой строке – название таблицы.

2. Во второй строке – название столбцов таблицы.

3. В ячейках А3:А10 введите названия должностей – от санитарки до главного врача. В ячейках В3:В10 – количество сотрудников по верхнему пределу, заданному в условии задачи. В ячейке С3 – 1, в ячейках C 4: C 10 – во сколько раз данный оклад больше оклада санитарки. В ячейках D 3: D 10 – на сколько больше (обратите внимание, что размер оклада нужно выразить относительно оклада санитарки). Ячейку Е3 оставьте пустой – там будет формироваться величина оклада. В ячейках Е4:Е10 – введите формулу для вычисления оклада (см. в условии задачи). В столбце F подсчитайте сумму окладов по должностям и итоговую по всей по больнице.

При решении задачи используйте сервисную функцию Excel Подбор параметра : Данные– (Работа с данными) Анализ «Что если» (см. рисунок Подбор параметра).

В поле Установить в ячейке ввести адрес ячейки, где вы­числяется общая месячная зарплата всех сотрудников больницы. В поле Значение ввести предельное значение месячного фонда зарплаты. В поле Изменяя значение ячейки ввести адрес ячейки, где находится оклад санитарки. После нажатия ОК произойдет ав­томатический подбор значения оклада санитарки таким образом, чтобы общий месячный фонд зарплаты составил $10.000.

4. Рассчитайте оклады для нескольких вариантов штата, из­меняя количество штатных единиц в соответствии с заданными условиями.

Для этого несколько раз подряд придется выполнять рутин­ные действия по вызову команды Подбор параметра и заполне­нию всех полей ее диалогового окна.

Создание простого макроса и кнопки.

Для упрощения работы с предыдущим заданием создадим простейший макрос — программу на языке VBA ( VisualBasicforApplication ), встроенном в офисные программы. Причем сделаем это, не зная пока самого языка. В этом нам поможет MacroRecorder — транслятор, перево­ дящий на язык VBA действия пользователя с момента запуска MacroRecorder до окончания записи макроса.

Для активизации MacroRecorder выбираем команду Вид – Макросы – Запись макроса . В появившемся диалоговом окне Запись макроса (см. рисунок) задаем имя макроса (« Staff ») и описание макро­са (не обязательно). В поле Сохранить в: оставляем опцию по умолчанию Эта книга (тогда созданный макрос сохранится на но­вом листе модуля в активной рабочей книге).

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

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

Чтобы посмотреть, какая же все-таки VBA — программа «соз­дана» нами, выполним команду Вид — Макросы — Макросы. В появившемся диалоговом окне выберем макрос с именем « Staff » и нажмем кнопку Изменить. Откроется главное окно редактора VBA с текстом записанного макроса, например:

‘ Штатное расписание таблицы

Range(«F11»).GoalSeek Goal:=10000, ChangingCell:=Range(«E3»)

Именно эта процедура и выполняется, если в диалоговом ок­ не Макросы нажать кнопку Выполнить. Рассчитываются оклады для заданного заранее нового количества штатных единиц.

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

Кнопка является одним из элементов управления листа, соз­ даваемых с помощью панели инструментов Формы. Обычно этой панели нет на экране, поэтому выполняем команду Файл | Параметры | Настройка ленты| Все команды. На экран выводится панель инструментов Всех команд, находим название Кнопка, затем нажимаем на Добавить >> (данная функция уже есть в ранее созданной вкладке). Выбираем на ней щелчком мыши форму Кнопка, при этом указатель мыши превращается в тонкий крестик. Щелкаем им по листу. На нем появляется кнопка с именем Кнопка1 и одновременно открывается диалоговое окно На­значение макроса объекту. В поле Имя макроса выбираем имя нашего макроса « Staff ».

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

Решение системы уравнений в Microsoft Excel

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

Варианты решений

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

Способ 1: матричный метод

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

    Заполняем матрицу числами, которые являются коэффициентами уравнения. Данные числа должны располагаться последовательно по порядку с учетом расположения каждого корня, которому они соответствуют. Если в каком-то выражении один из корней отсутствует, то в этом случае коэффициент считается равным нулю. Если коэффициент не обозначен в уравнении, но соответствующий корень имеется, то считается, что коэффициент равен 1. Обозначаем полученную таблицу, как вектор A.

Отдельно записываем значения после знака «равно». Обозначаем их общим наименованием, как вектор B.

Аргумент «Массив» — это, собственно, адрес исходной таблицы.

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

Выполняется запуск Мастера функций. Переходим в категорию «Математические». В представившемся списке ищем наименование «МОБР». После того, как оно отыскано, выделяем его и жмем на кнопку «OK».

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

Теперь нам нужно будет умножить обратную матрицу на матрицу B, которая состоит из одного столбца значений, расположенных после знака «равно» в выражениях. Для умножения таблиц в Экселе также имеется отдельная функция, которая называется МУМНОЖ. Данный оператор имеет следующий синтаксис:

Выделяем диапазон, в нашем случае состоящий из четырех ячеек. Далее опять запускаем Мастер функций, нажав значок «Вставить функцию».

В категории «Математические», запустившегося Мастера функций, выделяем наименование «МУМНОЖ» и жмем на кнопку «OK».

Активируется окно аргументов функции МУМНОЖ. В поле «Массив1» заносим координаты нашей обратной матрицы. Для этого, как и в прошлый раз, устанавливаем курсор в поле и с зажатой левой кнопкой мыши выделяем курсором соответствующую таблицу. Аналогичное действие проводим для внесения координат в поле «Массив2», только на этот раз выделяем значения колонки B. После того, как вышеуказанные действия проведены, опять не спешим жать на кнопку «OK» или клавишу Enter, а набираем комбинацию клавиш Ctrl+Shift+Enter.

  • После данного действия в предварительно выделенной ячейке отобразятся корни уравнения: X1, X2, X3 и X4. Они будут расположены последовательно. Таким образом, можно сказать, что мы решили данную систему. Для того, чтобы проверить правильность решения достаточно подставить в исходную систему выражений данные ответы вместо соответствующих корней. Если равенство будет соблюдено, то это означает, что представленная система уравнений решена верно.
  • Способ 2: подбор параметров

    Второй известный способ решения системы уравнений в Экселе – это применение метода подбора параметров. Суть данного метода заключается в поиске от обратного. То есть, основываясь на известном результате, мы производим поиск неизвестного аргумента. Давайте для примера используем квадратное уравнение

      Принимаем значение x за равное 0. Высчитываем соответствующее для него значение f(x), применив следующую формулу:

    Вместо значения «X» подставляем адрес той ячейки, где расположено число 0, принятое нами за x.

    Переходим во вкладку «Данные». Жмем на кнопку «Анализ «что если»». Эта кнопка размещена на ленте в блоке инструментов «Работа с данными». Открывается выпадающий список. Выбираем в нем позицию «Подбор параметра…».

    Запускается окно подбора параметров. Как видим, оно состоит из трех полей. В поле «Установить в ячейке» указываем адрес ячейки, в которой находится формула f(x), рассчитанная нами чуть ранее. В поле «Значение» вводим число «0». В поле «Изменяя значения» указываем адрес ячейки, в которой расположено значение x, ранее принятое нами за 0. После выполнения данных действий жмем на кнопку «OK».

    После этого Эксель произведет вычисление с помощью подбора параметра. Об этом сообщит появившееся информационное окно. В нем следует нажать на кнопку «OK».

  • Результат вычисления корня уравнения будет находиться в той ячейке, которую мы назначили в поле «Изменяя значения». В нашем случае, как видим, x будет равен 6.
  • Этот результат также можно проверить, подставив данное значение в решаемое выражение вместо значения x.

    Способ 3: метод Крамера

    Теперь попробуем решить систему уравнений методом Крамера. Для примера возьмем все ту же систему, которую использовали в Способе 1:

      Как и в первом способе, составляем матрицу A из коэффициентов уравнений и таблицу B из значений, которые стоят после знака «равно».

    Далее делаем ещё четыре таблицы. Каждая из них является копией матрицы A, только у этих копий поочередно один столбец заменен на таблицу B. У первой таблицы – это первый столбец, у второй таблицы – второй и т.д.

    Теперь нам нужно высчитать определители для всех этих таблиц. Система уравнений будет иметь решения только в том случае, если все определители будут иметь значение, отличное от нуля. Для расчета этого значения в Экселе опять имеется отдельная функция – МОПРЕД. Синтаксис данного оператора следующий:

    Таким образом, как и у функции МОБР, единственным аргументом выступает ссылка на обрабатываемую таблицу.

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

    Активируется окно Мастера функций. Переходим в категорию «Математические» и среди списка операторов выделяем там наименование «МОПРЕД». После этого жмем на кнопку «OK».

    Запускается окно аргументов функции МОПРЕД. Как видим, оно имеет только одно поле – «Массив». В это поле вписываем адрес первой преобразованной матрицы. Для этого устанавливаем курсор в поле, а затем выделяем матричный диапазон. После этого жмем на кнопку «OK». Данная функция выводит результат в одну ячейку, а не массивом, поэтому для получения расчета не нужно прибегать к нажатию комбинации клавиш Ctrl+Shift+Enter.

    Функция производит подсчет результата и выводит его в заранее выделенную ячейку. Как видим, в нашем случае определитель равен -740, то есть, не является равным нулю, что нам подходит.

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

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

  • Теперь пора найти корни уравнения. Корень уравнения будет равен отношению определителя соответствующей преобразованной матрицы на определитель первичной таблицы. Таким образом, разделив поочередно все четыре определителя преобразованных матриц на число -148, которое является определителем первоначальной таблицы, мы получим четыре корня. Как видим, они равны значениям 5, 14, 8 и 15. Таким образом, они в точности совпадают с корнями, которые мы нашли, используя обратную матрицу в способе 1, что подтверждает правильность решения системы уравнений.
  • Способ 4: метод Гаусса

    Решить систему уравнений можно также, применив метод Гаусса. Для примера возьмем более простую систему уравнений из трех неизвестных:

      Опять последовательно записываем коэффициенты в таблицу A, а свободные члены, расположенные после знака «равно» — в таблицу B. Но на этот раз сблизим обе таблицы, так как это понадобится нам для работы в дальнейшем. Важным условием является то, чтобы в первой ячейке матрицы A значение было отличным от нуля. В обратном случае следует переставить строки местами.

    Копируем первую строку двух соединенных матриц в строчку ниже (для наглядности можно пропустить одну строку). В первую ячейку, которая расположена в строке ещё ниже предыдущей, вводим следующую формулу:

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

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

    После этого копируем полученную строку и вставляем её в строчку ниже.

    Выделяем две первые строки после пропущенной строчки. Жмем на кнопку «Копировать», которая расположена на ленте во вкладке «Главная».

    Пропускаем строку после последней записи на листе. Выделяем первую ячейку в следующей строке. Кликаем правой кнопкой мыши. В открывшемся контекстном меню наводим курсор на пункт «Специальная вставка». В запустившемся дополнительном списке выбираем позицию «Значения».

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

    После ввода формулы выделяем весь ряд и применяем сочетание клавиш Ctrl+Shift+Enter.

    Теперь следует выполнить обратную прогонку по методу Гаусса. Пропускаем три строки от последней записи. В четвертой строке вводим формулу массива:

    Таким образом, мы делим последнюю рассчитанную нами строку на её же третий коэффициент. После того, как набрали формулу, выделяем всю строчку и жмем сочетание клавиш Ctrl+Shift+Enter.

    Поднимаемся на строку вверх и вводим в неё следующую формулу массива:

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

    Поднимаемся ещё на одну строку выше. В неё вводим формулу массива следующего вида:

    Опять выделяем всю строку и применяем сочетание клавиш Ctrl+Shift+Enter.

  • Теперь смотрим на числа, которые получились в последнем столбце последнего блока строк, рассчитанного нами ранее. Именно эти числа (4, 7 и 5) будут являться корнями данной системы уравнений. Проверить это можно, подставив их вместо значений X1, X2 и X3 в выражения.
  • Как видим, в Экселе систему уравнений можно решить целым рядом способов, каждый из которых имеет собственные преимущества и недостатки. Но все эти методы можно условно разделить на две большие группы: матричные и с применением инструмента подбора параметров. В некоторых случаях не всегда матричные методы подходят для решения задачи. В частности тогда, когда определитель матрицы равен нулю. В остальных же случаях пользователь сам волен решать, какой вариант он считает более удобным для себя.

    Помимо этой статьи, на сайте еще 12689 инструкций.
    Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

    Отблагодарите автора, поделитесь статьей в социальных сетях.

    Решение уравнений в Excel методом итераций Крамера и Гаусса

    В программе Excel имеется обширный инструментарий для решения различных видов уравнений разными методами.

    Рассмотрим на примерах некоторые варианты решений.

    Решение уравнений методом подбора параметров Excel

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

    Путь к команде: «Данные» — «Работа с данными» — «Анализ «что-если»» — «Подбор параметра».

    Рассмотрим на примере решение квадратного уравнения х 2 + 3х + 2 = 0. Порядок нахождения корня средствами Excel:

    1. Введем в ячейку В2 формулу для нахождения значения функции. В качестве аргумента применим ссылку на ячейку В1.
    2. Открываем меню инструмента «Подбор параметра». В графе «Установить в ячейку» — ссылка на ячейку В2, где находится формула. В поле «Значение» вводим 0. Это то значение, которое нужно получить. В графе «Изменяя значение ячейки» — В1. Здесь должен отобразиться отобранный параметр.
    3. После нажатия ОК отобразится результат подбора. Если нужно его сохранить, вновь нажимаем ОК. В противном случае – «Отмена».

    Для подбора параметра программа использует циклический процесс. Чтобы изменить число итераций и погрешность, нужно зайти в параметры Excel. На вкладке «Формулы» установить предельное количество итераций, относительную погрешность. Поставить галочку «включить итеративные вычисления».

    Как решить систему уравнений матричным методом в Excel

    Дана система уравнений:

    1. Значения элементов введем в ячейки Excel в виде таблицы.
    2. Найдем обратную матрицу. Выделим диапазон, куда впоследствии будут помещены элементы матрицы (ориентируемся на количество строк и столбцов в исходной матрице). Открываем список функций (fx). В категории «Математические» находим МОБР. Аргумент – массив ячеек с элементами исходной матрицы.
    3. Нажимаем ОК – в левом верхнем углу диапазона появляется значение. Последовательно жмем кнопку F2 и сочетание клавиш Ctrl + Shift + Enter.
    4. Умножим обратную матрицу Ах -1х на матрицу В (именно в таком порядке следования множителей!). Выделяем диапазон, где впоследствии появятся элементы результирующей матрицы (ориентируемся на число строк и столбцов матрицы В). Открываем диалоговое окно математической функции МУМНОЖ. Первый диапазон – обратная матрица. Второй – матрица В.
    5. Закрываем окно с аргументами функции нажатием кнопки ОК. Последовательно нажимаем кнопку F2 и комбинацию Ctrl + Shift + Enter.

    Получены корни уравнений.

    Решение системы уравнений методом Крамера в Excel

    Возьмем систему уравнений из предыдущего примера:

    Для их решения методом Крамера вычислим определители матриц, полученных заменой одного столбца в матрице А на столбец-матрицу В.

    Для расчета определителей используем функцию МОПРЕД. Аргумент – диапазон с соответствующей матрицей.

    Рассчитаем также определитель матрицы А (массив – диапазон матрицы А).

    Определитель системы больше 0 – решение можно найти по формуле Крамера (Dx / |A|).

    Для расчета Х1: =U2/$U$1, где U2 – D1. Для расчета Х2: =U3/$U$1. И т.д. Получим корни уравнений:

    Решение систем уравнений методом Гаусса в Excel

    Для примера возьмем простейшую систему уравнений:

    3а + 2в – 5с = -1
    2а – в – 3с = 13
    а + 2в – с = 9

    Коэффициенты запишем в матрицу А. Свободные члены – в матрицу В.

    Для наглядности свободные члены выделим заливкой. Если в первой ячейке матрицы А оказался 0, нужно поменять местами строки, чтобы здесь оказалось отличное от 0 значение.

    1. Приведем все коэффициенты при а к 0. Кроме первого уравнения. Скопируем значения в первой строке двух матриц в ячейки В6:Е6. В ячейку В7 введем формулу: =B3:Е3-$B$2:$Е$2*(B3/$B$2). Выделим диапазон В7:Е7. Нажмем F2 и сочетание клавиш Ctrl + Shift + Enter. Мы отняли от второй строки первую, умноженную на отношение первых элементов второго и первого уравнения.
    2. Копируем введенную формулу на 8 и 9 строки. Так мы избавились от коэффициентов перед а. Сохранили только первое уравнение.
    3. Приведем к 0 коэффициенты перед в в третьем и четвертом уравнении. Копируем строки 6 и 7 (только значения). Переносим их ниже, в строки 10 и 11. Эти данные должны остаться неизменными. В ячейку В12 вводим формулу массива.
    4. Прямую прогонку по методу Гаусса сделали. В обратном порядке начнем прогонять с последней строки полученной матрицы. Все элементы данной строки нужно разделить на коэффициент при с. Введем в строку формулу массива: <=B12:E12/D12>.
    5. В строке 15: отнимем от второй строки третью, умноженную на коэффициент при с второй строки (<=(B11:E11-B16:E16*D11)/C11>). В строке 14: от первой строки отнимаем вторую и третью, умноженные на соответствующие коэффициенты (<=(B10:E10-B15:E15*C10-B16:E16*D10)/B10>). В последнем столбце новой матрицы получаем корни уравнения.

    Примеры решения уравнений методом итераций в Excel

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

    Делается это на вкладке «Формулы» в «Параметрах Excel». Найдем корень уравнения х – х 3 + 1 = 0 (а = 1, b = 2) методом итерации с применением циклических ссылок. Формула:

    M – максимальное значение производной по модулю. Чтобы найти М, произведем вычисления:

    f’ (1) = -2 * f’ (2) = -11.

    Полученное значение меньше 0. Поэтому функция будет с противоположным знаком: f (х) = -х + х 3 – 1. М = 11.

    В ячейку А3 введем значение: а = 1. Точность – три знака после запятой. Для расчета текущего значения х в соседнюю ячейку (В3) введем формулу: =ЕСЛИ(B3=0;A3;B3-(-B3+СТЕПЕНЬ(B3;3)-1/11)).

    В ячейке С3 проконтролируем значение f (x): с помощью формулы =B3-СТЕПЕНЬ(B3;3)+1.

    Корень уравнения – 1,179. Введем в ячейку А3 значение 2. Получим тот же результат:

    источники:

    http://lumpics.ru/how-solve-system-equations-excel/

    http://exceltable.com/otchety/reshenie-uravneniy

    Групповой подбор параметров Анализ «что-если» подбор параметра

    Групповой подбор параметров – инструмент для побора группы параметров на основе стандартного инструмента Excel анализ “что-если”, подбор параметра.

    В стандартном инструменте “подбор параметров” возможно подбирать только одиночное значение для формулы. В групповом подборе реализована возможность подбирать значения для группы формул, последовательно, что значительно ускорят процесс по сравнению с использованием стандартного инструмента Excel

    Автоматический подбор параметров расчёта

    SBK

    Дата: Вторник, 19.09.2017, 21:28 |
    Сообщение № 1

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

    Ранг: Прохожий

    Сообщений: 8


    Репутация:

    0

    ±

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


    Excel 2003

    Мне нужно автоматически подобрать параметр в ячейках (P2;P10) (16), изменяя значения параметра в ячейках (J2;J10) (10) соответственно.
    У меня есть программа-макрос подбора параметра в ячейках (G6;G46) (7) при изменении значения параметра в ячейках (D6;D46) (4) соответственно.

    [vba]

    Код

    Sub recount()
        Set tbl = ActiveSheet.[a5].CurrentRegion
        Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count — 1))
        For Each cell In tbl.Cells
            cell.Offset(, 6).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 3)
        Next
    End Sub

    [/vba]

    Эта программа рабочая. Я записал эту программу под свои данные:

    [vba]

    Код

    Sub recount()
        Set tbl = ActiveSheet.[a5].CurrentRegion
        Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count — 1))
        For Each cell In tbl.Cells
            cell.Offset(, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 9)
        Next
    End Sub

    [/vba]

    Но она не желает работать. Debug выделяет область
    [vba]

    Код

    cell.Offset(, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 9)

    [/vba]
    Неверная ссылка ошибка 1004.
    Не могу найти ошибку.
    Саму программу могу представить только в зипованном виде, поскольку она «весит» 258 кб. Но если устроит зипованная, я её выложу.

     

    Ответить

    RAN

    Дата: Вторник, 19.09.2017, 22:59 |
    Сообщение № 2

    Группа: Друзья

    Ранг: Экселист

    Сообщений: 5645


    Если так, как тут, то можно не трудиться.


    Быть или не быть, вот в чем загвоздка!

     

    Ответить

    InExSu

    Дата: Вторник, 19.09.2017, 23:55 |
    Сообщение № 3

    Группа: Друзья

    Ранг: Ветеран

    Сообщений: 646


    Репутация:

    96

    ±

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


    Excel 2010

    [vba]

    Код

    Sub recountWatch()
      Set tbl = ActiveSheet.[a5].CurrentRegion
      Set tbl = Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count — 1))
      Range(ActiveSheet.[a6], tbl.Cells(1, 1).Offset(tbl.Rows.Count — 1)).Select
      Stop
      СтрокоКомпенсатор = -5
      For Each cell In tbl.Cells
        cell.Offset(СтрокоКомпенсатор, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(СтрокоКомпенсатор, 9)
        cell.Offset(СтрокоКомпенсатор, 15).Select
        Stop
        cell.Offset(СтрокоКомпенсатор, 9).Select
      Next
    End Sub

    [/vba]


    Разработчик Битрикс24 php, Google Apps Script, VBA Excel

     

    Ответить

    SBK

    Дата: Среда, 20.09.2017, 00:15 |
    Сообщение № 4

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

    Ранг: Прохожий

    Сообщений: 8


    Репутация:

    0

    ±

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


    Excel 2003

    RAN’y
    А что там не так? Я же потому и ищу, чтобы понять, что не так?

    Сообщение отредактировал SBKСреда, 20.09.2017, 00:19

     

    Ответить

    SBK

    Дата: Среда, 20.09.2017, 00:18 |
    Сообщение № 5

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

    Ранг: Прохожий

    Сообщений: 8


    Репутация:

    0

    ±

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


    Excel 2003

    InExSu’y
    Это будет работать в exsel 2003?
    Я почему спрашиваю? На русском «строкоКомпенсатор». Эта функция есть в 2003?

     

    Ответить

    InExSu

    Дата: Среда, 20.09.2017, 09:58 |
    Сообщение № 6

    Группа: Друзья

    Ранг: Ветеран

    Сообщений: 646


    Репутация:

    96

    ±

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


    Excel 2010


    Не знаю. В Excel будет. Функции нет, это переменная.
    Код написан, чтобы вы в процессе отладки увидели, где у Вас кончаются данные …


    Разработчик Битрикс24 php, Google Apps Script, VBA Excel

     

    Ответить

    SBK

    Дата: Среда, 20.09.2017, 14:16 |
    Сообщение № 7

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

    Ранг: Прохожий

    Сообщений: 8


    Репутация:

    0

    ±

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


    Excel 2003

    InExSu,
    У меня Ваша программка зависла на той же строке
    [vba]

    Код

    cell.Offset(СтрокоКомпенсатор, 15).GoalSeek Goal:=1, ChangingCell:=cell.Offset(СтрокоКомпенсатор, 9)

    [/vba]
    т.е. на выполнении самой операции подбора параметров и то же заявление об ошибке.
    С другой стороны, я одну ошибку у себя нашёл в прежнем макросе. Я использовал числовой формат данных, а оказывается нужно было в общем формате считать Кроме того, я заменил [a5] [a6] на [a1] [a2] соответственно. При этом старая программка посчитала первые 20 строк и остановилась, хотя строки не прерывались. Вручную подбор работает в любой строке. Не подскажете почему это может быть?

    Сообщение отредактировал SBKСреда, 20.09.2017, 14:26

     

    Ответить

    Pelena

    Дата: Среда, 20.09.2017, 14:23 |
    Сообщение № 8

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Файл с примером не покажете?


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    SBK

    Дата: Среда, 20.09.2017, 14:36 |
    Сообщение № 9

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

    Ранг: Прохожий

    Сообщений: 8


    Репутация:

    0

    ±

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


    Excel 2003

    Pelena,
    сам не пойму как, честное слово…

     

    Ответить

    SBK

    Дата: Среда, 20.09.2017, 14:56 |
    Сообщение № 10

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

    Ранг: Прохожий

    Сообщений: 8


    Репутация:

    0

    ±

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


    Excel 2003

    Pelena
    Могу только в зипованном виде. Весит больше допустимого 200 кб.
    Если этот вариант устроит, то файл в прикрепке

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

    5235019.rar
    (79.8 Kb)

    Сообщение отредактировал SBKСреда, 20.09.2017, 15:02

     

    Ответить

    InExSu

    Дата: Среда, 20.09.2017, 14:59 |
    Сообщение № 11

    Группа: Друзья

    Ранг: Ветеран

    Сообщений: 646


    Репутация:

    96

    ±

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


    Excel 2010


    Вы знаете, «что» вы хотите вычислить, но не знаете как.
    Мы знаем «как» вычислить, но не знаем «что» Вы вычисляете, как Вы расставили данные.
    Ошибка Вам пишет, что кончились данные для GoalSeek.


    Разработчик Битрикс24 php, Google Apps Script, VBA Excel

    Сообщение отредактировал InExSuСреда, 20.09.2017, 15:00

     

    Ответить

    SBK

    Дата: Среда, 20.09.2017, 15:05 |
    Сообщение № 12

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

    Ранг: Прохожий

    Сообщений: 8


    Репутация:

    0

    ±

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


    Excel 2003

    Ошибка Вам пишет, что кончились данные для GoalSeek.

    Я добавил пример.rar.
    Можно ли расширить данные? Таблица расчёта по обеим столбцам сплошная, вручную всё считается. Где может быть «стоп»? Может нужно в исходный файл добавить нижнюю строку расчёта? Как это сделать грамотно?

    Сообщение отредактировал SBKСреда, 20.09.2017, 15:06

     

    Ответить

    Pelena

    Дата: Среда, 20.09.2017, 15:22 |
    Сообщение № 13

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Может, так
    [vba]

    Код

    Sub recount()
        Set tbl = ActiveSheet.[e2].CurrentRegion
        Set tbl = tbl.Columns(1).Offset(1).Resize(tbl.Rows.Count — 1)
        For Each cell In tbl.Cells
            cell.Offset(, 11).GoalSeek Goal:=1, ChangingCell:=cell.Offset(, 5)
        Next
    End Sub

    [/vba]


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    SBK

    Дата: Среда, 20.09.2017, 16:12 |
    Сообщение № 14

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

    Ранг: Прохожий

    Сообщений: 8


    Репутация:

    0

    ±

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


    Excel 2003

    Pelena,
    А Вы знаете? Работает. Получается, что ошибка моя была в том, что в квадратных скобках нужно задавать начало массива, а не столбец а, как стандарт. Правильно я понял?

     

    Ответить

    Pelena

    Дата: Среда, 20.09.2017, 17:14 |
    Сообщение № 15

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    CurrentRegion — это текущая область. Её можно увидеть, встав в ячейку и нажав Ctrl+* (звёздочка справа на цифровой клавиатуре).
    Попробуйте проделать это, встав в A5 или в E2, почувствуйте разницу :)


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    rusmir76

    Дата: Вторник, 22.02.2022, 16:19 |
    Сообщение № 16

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

    Ранг: Прохожий

    Сообщений: 1


    Репутация:

    0

    ±

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


    Здравствуйте! Подскажите, а возможно ли задать для подбора не фиксированное значение (как в примере — 1), а разные расположенные например напротив ячейки подбора. Установить в ячейке O7 значение равное S7 Изменяя значение ячейки L7
    И так по всем строкам.

    Образец прикрепил в файле. Заранее спасибо!

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

    ___.xlsx
    (13.1 Kb)

     

    Ответить

    Pelena

    Дата: Вторник, 22.02.2022, 17:02 |
    Сообщение № 17

    Группа: Админы

    Ранг: Местный житель

    Сообщений: 18797


    Репутация:

    4284

    ±

    Замечаний:
    ±


    Excel 2016 & Mac Excel

    Изменяя значение ячейки L7

    ячейка L7 никак не влияет на O7
    Если взять, к примеру, M7, то как-то так
    [vba]

    Код

    Sub recount()
        lrow = Cells(Rows.Count, «O»).End(xlUp).Row
        For Each cell In Range(«O7:O» & lrow)
            If cell <> «» Then cell.GoalSeek Goal:=cell.Offset(, 4), ChangingCell:=cell.Offset(, -2)
        Next
    End Sub

    [/vba]

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

    111.xlsm
    (22.5 Kb)


    «Черт возьми, Холмс! Но как??!!»
    Ю-money 41001765434816

     

    Ответить

    Понравилась статья? Поделить с друзьями:
  • Макрос на очистку ячейки в excel
  • Макрос на открытия другой книги в excel
  • Макрос на открытие формы в excel
  • Макрос на открытие документа excel
  • Макрос на объединение столбцов в excel