Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
04.12.2023, 12:50:17

Войти
На форуме добавлена возможность подписки на RSS-ленты любого раздела форума. Подписаться можно, нажав на иконку RSS , расположенную левее наименования раздела.
33 171 Сообщений в 5 437 Тем от 6 701 Пользователей
Последний пользователь: McDosaaa
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
  Просмотр сообщений
Страниц: [1] 2
1  Основные форумы / Вопросы по Excel и VBA / Re:Ранг матрицы : 25.01.2023, 16:55:03
В качестве исходных данных может быть любая (заданная) матрица, например
0 1 2 3
3 0 1 2
2 3 0 1
5 4 3 6
Что я хочу? Мне нужна функция пользователя MRang(X) as integer, которая импортирует из Excel-таблицы матрицу размером n*k и возвращает в таблицу целое число, равное вычисленному рангу.
Метод вычисления - приведение матрицы к треугольному виду, в данном случае
3 0  1  2
0 9 -2 -1
0 0 20 28
0 0  0  0
Ранг матрицы равен числу ненулевых элементов на главной диагонали
2  Основные форумы / Вопросы по Excel и VBA / Re:Ранг матрицы : 25.01.2023, 11:16:43
Ранг матрицы - это число линейно независимых строк или столбцов. См. Википедию.
Например, ранг матрицы
1 0 0
0 1 0
0 0 1
равен 3, а ранг матрицы
1 0 0
0 1 0
1 1 0
равен 2

Но если вы не знаете, что это такое, то и такого макроса у вас нет.
Может быть он есть у кого-нибудь, кто знает, что это такое?
3  Основные форумы / Вопросы по Excel и VBA / Ранг матрицы : 25.01.2023, 01:28:43
Добрый день!
В Excel нет встроенной функции для вычисления ранга матрицы.
Может быть у кого-нибудь есть соответствующая готовая программа-функция пользователя?
Я пытался самостоятельно написать такую программу на Excel VBA, но она иногда выдает неверные значения; где-то ошибка, не могу ее найти.
4  Основные форумы / Вопросы по Excel и VBA / Re:Можно ли функцию из таблицы автоматически импортировать в функцию VBA? : 17.05.2022, 14:46:01
Чтобы было понятнее, посылаю тестовый Excel-файл "Approximation.xlsm"
Там работает процедура Sub Solution().
Перед ее вызовом нужно в таблице маркировать клетки с параметрами уравнения (в данном случае Н2:Н5), а потом клетку с невязкой (в данном случае D18).
Процедура вызывается горячей клавишей Control  s.
Для достижения удовлетворительного результата процедуру нужно вызывать много раз. Качество аппроксимации улучшается с киаждым еызовом процедуры.

В 3-ей колонке находятся формулы, которые вычисляют теоретические значения Y при табличных значениях Х. Формулы используют параметры из клеток Н2:Н5.

Хотелось бы написать функцию, которая импортировала бы внутрь себя формулу из колонки С.
5  Основные форумы / Вопросы по Excel и VBA / Можно ли функцию из таблицы автоматически импортировать в функцию VBA? : 16.05.2022, 19:48:40
У меня такая проблема:
Имеется таблица экспериментальных значений некоторой функции и теоретическое уравнение, описывающее эту зависимость, в которое нелинейно входят несколько параметров.
Задача состоит в том, чтобы найти значения параметров, для которых среднеквадратичное отклонение экспериментальных точек от теоретической кривой было минимальным.

Я решал эту задачу так:
В Excel делал таблицу со значениями аргумента (1-ая колонка) и функции (2-ая колонка); в 3-ей колонке теоретическая формула, зависящая от параметров (еще несколько клеток в таблице) и от аргумента, в 4-ой колонке – квадраты разностей экспериментальных и теоретических значений функции и корень из среднего значения квадратов (невязка).

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

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

Вопрос: это возможно? Т.е. может ли программа функции «импортировать» формулу из таблицы? И если да, то как это сделать?
6  Основные форумы / Вопросы по Excel и VBA / Re:Функция VBA, возвращающая в таблицу массив : 11.05.2022, 19:05:22
Цитировать
А зачем Вы применяете Byte?..
Просто я привык экономить ресурсы. Число i редко превышает 250.
Вперед я дурень таков не буду.

Кстати: что означает значок & в вашей программе (Dim lSourceRowsCount&)?
7  Основные форумы / Вопросы по Excel и VBA / Re:Функция VBA, возвращающая в таблицу массив : 11.05.2022, 16:12:37
Супер! Огромное спасибо за подсказку.
Хотя ваша функция YourTest и не работает, как надо, в ней содержатся ценные указания и подсказки, которые я использовал для улучшения моей функции MyTest.

Текст функции:

Код: (vb)
Function MyTest(Choice As Range)
Dim Vektor(), Element, Z As Byte, S As Byte, N As Byte, Anz_Z As Byte
Dim Markierung As Range ' Массив ячеек, выделенный на листе при вводе функции
Set Markierung = Application.Caller
Anz_Z = Markierung.Rows.Count    ' Число строк в поле вызова функции
Z = Choice.Rows.Count
S = Choice.Columns.Count
N = Z * S
ReDim Vektor(1 To N)
N = 0
For Each Element In Choice
        N = N + 1
        Vektor(N) = Element.Value
Next Element
If Anz_Z = 1 Then
        MyTest = Vektor
Else
        MyTest = Application.Transpose(Vektor)
End If
End Function


Посылаю также и файл Test.xlsm
8  Основные форумы / Вопросы по Excel и VBA / Re:Функция VBA, возвращающая в таблицу массив : 11.05.2022, 12:10:13
Спасибо!
Кажется, я придумал, как выводить одномерный массив или в строку, или в столбец в зависимости от маркировки.
Вот текст пробной функции:

Function Test(Choice As Range)
'   Разворачивает элементы двумерного массива (Choice) в строку или столбец (Vektor)
Dim Vektor(), Element, N As Byte
N = 0
For Each Element In Choice
      N = N + 1
Next Element
ReDim Vektor(1 To N, 1 To N)
N = 0
For Each Element In Choice
        N = N + 1
        Vektor(N, 1) = Element.Value
        Vektor(1, N) = Element.Value
Next Element
Test = Vektor
End Function

Конечно, программа не слишком экономна: вместо одномерного массива пришлось декларировать двумерный (матрицу), при этом используется только первая строка и первый столбец матрицы.
Недостаточно элегантно на мой вкус: перерасход ресурсов.
9  Основные форумы / Вопросы по Excel и VBA / Re:Функция VBA, возвращающая в таблицу массив : 11.05.2022, 00:26:41
Большое спасибо за помощь.
Только дело в том, что функция не знает, захочу я при ее вызове получить массив в виде строки, или в виде столбца. Эту информацию приходится сообщать функции в явном виде в качестве второго аргумента, что не очень элегантно.
Хотелось бы, чтобы функция каким-то образом сама различала, что было маркировано - строка или столбец.
Такую функцию я тоже запрограммировал, но при снятии маркировки она перестает правильно работать. Нужно, чтобы она запоминала маркировку, которая существовала на момент ее первого вызова.

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

Кстати: вы уверены, что команда Range("A1:A10").value = Application.Transpose(Array)  будет работать именно внутри функции? Мне кажестся, что эта команда возможна только в макросе (Sub).
10  Основные форумы / Вопросы по Excel и VBA / Функция VBA, возвращающая в таблицу массив : 09.05.2022, 13:28:05
В Excel есть встроенные матричные функции (например, MINV), которые возвращают в таблицу не одно значение, а массив.
Чтобы вывзать такую функцию, нужно маркировать в таблице правильное число клеток, вписать в активную клетку формулу, а потом задействовать клавиши Control, Schift и Enter.

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

1) Как сделать, чтобы функция возвращала значения как в строку, так и в столбец (в соответствии с тем, что маркировано - строка или столбец)?
2) Что делать, если размер возвращаемого массива заранее неизвестен? Что маркировать?
11  Основные форумы / Вопросы по Excel и VBA / Re:Как вызвать VBA-процедуру из другой папки? : 08.05.2022, 10:34:28
Эврика!
Оказалось, что, хотя процедуры из собственных надстроек Add-In не видны в стандартном окне вызова макросов (Alt+F8), если набрать в этом окне имя процедуры, то она нормально вызывается. Чтобы не запоминать имена всех процедур, достаточно в панели быстрого доступа создать кнопку, вызывающую нужный макрос.
Или создать собственную вкладку в меню.
Для этого не обязательно писать программы в Ribbon XML (я им не владею, и это для меня слишком сложно), достаточно воспользоваться стандартными инструментами Excel
12  Основные форумы / Вопросы по Excel и VBA / Re:Как вызвать VBA-процедуру из другой папки? : 07.05.2022, 22:46:52
А как будет эврика наоборот?..
Что-то я рано обрадовался. Один раз получилось, но повторить успех не выходит. Процедуры из *xlam командой Call больше не вызываются...
13  Основные форумы / Вопросы по Excel и VBA / Re:Как вызвать VBA-процедуру из другой папки? : 06.05.2022, 16:39:08
Попробовал. Все получилось!
Я зделал в папке кнопку, которая вызывает процедуру из этой же папки, суть которой исчерпывается вызовом процедуры из папки *.xlam.
Ура!
Еще раз спасибо!
14  Основные форумы / Вопросы по Excel и VBA / Re:Как вызвать VBA-процедуру из другой папки? : 05.05.2022, 17:33:42
Большое спасибо! Кажется, я понял, на досуге попробую.
Если возникнут вопросы, обращусь к вам еще раз, если не возражаете.
15  Основные форумы / Вопросы по Excel и VBA / Re:Как вызвать VBA-процедуру из другой папки? : 05.05.2022, 11:03:40
Большое спасибо. Посылаю файл "Meine Funktionen.xlam".
Там 2 модуля: функции (Funktionen) и процедуры (Prozeduren).
Речь идет о процедуре Public Sub Lösung(), хотя в равной мере о любой другой процедуре Public Sub Процедура(), находящейся в модуле.
Страниц: [1] 2
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru