Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 17 След.
[ Закрыто] Массив, Чему равно значение массива?
 
Оффтоп.
Скрытый текст
Курсы по Delphi
 
Цитата
seggi написал:
Как начал преподавать 20 лет назад Delphi, так и продолжает
Нам в 98-м преподавали Fortran... Затем, курсе на 5-м, были пары с использованием численных методов на MathCAD е... Хотя маткад мы уже сами использовали во всю... А Дельфи нам не преподавали.
Построение графиков в VBA
 
injener, А зачем вы данные для графика заливаете на лист? Это не обязательно...
Как при сложений нескольких числе отображались все суммируемые слагаемые при нажатии на ячейку
 
А при изменении числа в ячейке отображаемая сумма тоже должна изменяться?
Т.е. было:
1 - 350
2- 500
3 - 750
=350+500+750.

Изменилось и стало
1 - 950
2- 500
3 - 750
=950+500+750.
Курсы по Delphi
 
Delphi использовал в качестве средства создания оболочек (интерфейса) для создания исходных файлов программ написанных на Fortran (ибо на WinApi запаришься интерфейс делать...). Лет двадцать назад это было... Недавно глянул - часть тех "оболочек" не запускается на современных ОС. А вот исходные фортрановские проги как считали так и считают :)

А ещё Delphi до сих пор на первых курсах МЭИ преподают...
Изменено: tutochkin - 10.11.2022 09:58:50
Вставка Range.Insert, Вставка Range.Insert
 
Цитата
papadulo написал:
из вашего примера строки вставляются не в именованный диапазон, а рядом
у меня добавляются ячейки к именованному диапазону
Вставка Range.Insert, Вставка Range.Insert
 
Ну например так:
Код
Range(Cells(4, 1), Cells(5, 3)).Copy Cells(Cells(Rows.Count, 5).End(xlUp).Row + 1, 5)
Как развести точки с одинаковыми значениями по оси X
 
Михаил Олькиницкий,
Смотрите в сторону построения Диаграммы Ганта.
Сохранение одного листа как отдельный файл.
 
В, Давайте файл пример.
Сохранение одного листа как отдельный файл.
 
Объединённые ячейки - зло
Ну тогда вот так:
Код
Sub CopyPast()
    Dim sh As Worksheet
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    ActiveSheet.Copy
    For Each sh In ActiveWindow.SelectedSheets
       sh.UsedRange.Value = sh.UsedRange.Value
    Next sh
    ActiveWorkbook.SaveAs wb.Path & "\" & ActiveSheet.Name & ".xlsx"
    ActiveWorkbook.Close
End Sub
Сохранение одного листа как отдельный файл.
 
Код
Sub CopyPasta()
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    Cells.Copy
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, _
                           Operation:=xlNone, _
                           SkipBlanks:=False, _
                           Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteValues
    ActiveWorkbook.SaveAs wb.Path & "\" & ActiveSheet.Name & ".xlsx"
    ActiveWorkbook.Close
End Sub


evgeniygeo, в Вашем варианте не выполняется условие "вся информация в новом файле должна быть сохранена как текст".
Нелинейное преобразование одной шкалы в другую
 
DramokL, что то у вас условия не сходятся. В файле условия диапазонов:
Код
"сырые" "10-е"
0-30         0-3
31-45       4-7
46-54       8-10

Под эти условия никак не подпадает высказанное "примерно должно получиться так: диапазон 0-7 "сырых" - это 0 баллов, 8-14 - 1 балл и так далее"
Поскольку вот:
Изменено: tutochkin - 02.11.2022 16:24:46
Редактирование формулы в форме
 
МатросНаЗебре, у меня выкидывает с ошибкой если ввести на форме, например, =35+ ... и всё. Арифм.действие не нравится... ПыСы я то через кнопочку хотел делать ввод в ячейку...
Редактирование формулы в форме
 
Да.
Проверка значений по списку из диапазона, Проверка значений по списку из диапазона
 
Код
=ДВССЫЛ("Таблица1")
Определение промежуточных данных, Апроксимация, интерполяция и тому подобные шалости с табличными данными.
 
Не хочу копипастить данные от ZVI, МатросНаЗебре, MCH и других порядочных форумистов, посему немного вокруг и около :)
Тема с большим набором вариантов интерполяций без использования макросов и с ними
Решение проблемы несоответствия коэффициентов уравнения полинома на диаграмме и выдаваемых функцией ЛИНЕЙН()
Некоторое время назад мне было скучно и я набросал пяток постов о оцифровке графиков:
Excel. Долгая дорога оцифровки. Часть 1. Немного теории
Excel. Долгая дорога оцифровки. Часть 2. Забираем данные с листа
Excel. Долгая дорога оцифровки. Часть 3. Апроксимация простых графиков полиномом средствами Excel
Excel. Долгая дорога оцифровки. Часть 4.  Макрос по созданию макросов апроксимации простых графиков полиномом
Excel. Долгая дорога оцифровки. Часть 5. Создание пользовательской функции для двух аргументов. Ручной вариант
Excel. Долгая дорога оцифровки. Часть 6. Кусочная интерполяция
Excel. Долгая дорога оцифровки. Часть 7. Автоматическое создание макроса функции с использованием кусочной интерполяции
Excel. Долгая дорога оцифровки. Часть 8. Обратная функция⁠⁠
Excel. Долгая дорога оцифровки. Часть 9.  Оформление графиков, или отображение поиска решения

ПыСы. Не считаю себя истиной последней инстанции...
Максимальное значение на оси диаграммы равное значению из табоицы
 
Цитата
ivannikitin написал:
начало тоже нужно. Как раз нужны значения 14,9 - 65,9.
Тогда шаг делаете "1" :)
Максимальное значение на оси диаграммы равное значению из табоицы
 
ivannikitin,
14.9 - начало шкалы
10 - шаг шкалы

Хотите иметь цифирку на шкале 65.9 можно заменить начало на 15.9
Макрос копирования в буфер обмена нескольких диаграмм, Добрый день! А можно написать макрос который будет копировать в буфер несколько диаграмм?
 
Ну если хотите много диаграмм и разом - расположите их красиво, выделите все с зажатым шифтом, сгруппируйте и копируйте сразу группу.
Изменено: tutochkin - 27.10.2022 10:26:59
выгрузка массива в диапазон Excel, VBA
 
Цитата
Yum написал:
tutochkin , Интересно, это Уокенбах ?
Нет. Хотя не исключаю у него аналогичного.
Цитата
Дмитрий(The_Prist) Щербаков написал:
какое отношение это имеет к текущей теме?
Читаю проблему - "Возникла проблема с выгрузкой массива на диапазон через Range.resize.". Показываю как это делаю я. ЧЯДНТ?
Цитата
Ігор Гончаренко написал:
у меня это выглядело бы (с тем же конечным результатом) так:
Спасибо. Буду знать. Но результат будет иной в общем случае т.к. data может отличаться...
Цитата
Инструкция к теме не относится вообще, а её логика — странная и непоследовательная
Очень жаль что Вы это написали
Изменено: tutochkin - 26.10.2022 14:22:56
Появление лишних знаков после 0, При суммировании ряда чисел округлённых 0,00 вдруг появляются числа 7 знаков после нуля
 
Ознакомьтесь с https://www.softelectro.ru/ieee754.html
Определение промежуточных данных, Апроксимация, интерполяция и тому подобные шалости с табличными данными.
 
Часть 2. Принятие существования недостоверности определения значений
На практике имеется следующее: есть некая точечно (не путать с «точно») заданная зависимость, и требуется определить значение между заданных точек (для аппроксимации или интерполяции). Например, есть заданные значения при значениях аргумента 0, 1, 2…9, а узнать надо при 0.5 и 8.5.

Как видно, в данном случае ни один из существующих полиномов линии тренда Excel не даёт интерполяционной кривой (проходящей через все точки), а наша цель:
- совпадение значений используемой функции значениям в реперных (заданных изначально) точках;
- совпадение или близость тенденции изменения параметров, т.е. в данном примере между т.1 и 2 функция должна иметь постоянно уменьшающееся значение, а не как для полинома 6-й степени: для значений менее 0,5 - уменьшение, а от 0,5 до 1 - значительное возрастание.
Одним из вариантов решения является применение разбиения известного количества заданных точек на несколько групп с малым количеством таким образом, чтобы:
- искомое значение Х содержалось в выбранном диапазоне;
- для выбранного количества точек можно было найти функцию, график которой будет проходить через все заданные точки.
Т.е. применение кусочной интерполяции.
Скрытый текст

Для нашего примера для определения значения функции:
- при Х=0,5 при линейной интерполяции для построения полинома используются 1-я и 2-я точки, а для интерполяции полиномом второй степени используются 1-я 2-я  и 3-я точки;
- при Х=8,5 при линейной интерполяции для построения полинома используются 9-я и 10-я точки, а для интерполяции полиномом второй степени используются 8-я 9-я  и 10-я точки.
Как видно из рисунка ниже, результат зависит от используемого метода интерполяции как внутри заданных значений, так и, в значительной мере, при экстраполяции.

Возможно использование и полиномов более высоких степеней, но как правило, достаточно полинома первого/второго порядка, т.к. зависимости далеко не всегда являются полиномными.
При поиске решения с применением полиномов 3-й и более степеней следует понимать, что в зависимости от выбранных точек результат будет разным. Т.е. если есть 4-ре точки (х1, х2, х3, х4), то результат, полученный по интерполяции по х1, х2, х3, будет отличаться от результата по х2,х3,х4.
Например, при выборе полинома второй степени и поиске значений при Х=1,5 данные, полученные по полиному, построенному точкам х=1 – 2 – 3, будут значительно отличаться от данных, полученных по полиному, построенному по точкам х=0 – 1 – 2. И так для большинства вариантов. В приведённом примере только на участке 4-5 есть совпадение полиномов.

Аналогичные проблемы будут и при использовании полиномов более высоких порядков. Например, для анализируемого случая строятся графики  с использованием полиномов 7-го порядка (а·х7 + …), включающие первые и последние заданные точки. Первый интерполяционный график построен по точкам: х1-2-3-4-5-6-7-8 , второй – по х3 4 5 6 7 8 9 10. Наличие сильных расхождений в зоне пересечения (между точками х3-4-5-6-7-8 ) очевидно, но главную проблему представляет собой поведение 1-го инт.графика в зонах х1-2 и х7-8.

В условиях ограниченности исходных полиномы высоких порядков могут принести необоснованную погрешность расчёта. А для некоторых вариантов применение отличного от кусочного метода интерполяции просто невозможно.
Например, есть точки графика функции полинома 9-й степени. Провести интерполяцию данных штатными средствами Excel невозможно (ограничение полинома – 7-я степень). Кусочно-заданная функция потребует разбиение на несколько участков (более 3-х), и всё равно приведёт к значительным погрешностям даже в реперных точках. Либо у полученного графика будут аналогичные проблемы поиска данных в промежуточных точках:

Вывод – Не существует 100% достоверного математического способа определения промежуточных значений точечно заданной функции, за исключением частных вариантов. Любой из способов имеет некоторую погрешность (или допущение), и об этом следует помнить при расчётах.
В качестве ещё одного примера можно обратиться к графику в первом сообщении. На нём представлены 5 интерполяционных кривых, построенных по одним и тем же исходным точкам. Разница определения данных между точками в зависимости от вида интерполяции, очевидна.
Так же стоит отметить наличие ошибки расчётов величин с плавающей запятой (вещественных). Подробнее с действующим стандартом можно ознакомиться по адресу https://www.softelectro.ru/ieee754.html
Отдельным пунктом при кусочной интерполяции лежит понимание того, что имеется возможность управлять поведением функции при экстраполяции. Т.е. например в при кусочном интерполировании по всей функции использовать группы по 4-ре точки (интерполяция полиномом 3-й степени), а последний и первый участки, а так же зоны ДО и ЗА имеющимися данными, определять на основании полиномов первой степени (по парам первых и последних двух точек соответственно)....
Изменено: tutochkin - 25.10.2022 16:50:10
Определение промежуточных данных, Апроксимация, интерполяция и тому подобные шалости с табличными данными.
 


В данной теме попробую подобрать набор информации и ответов на вопросы:
Как найти промежуточные значения между заданными?
Как найти максимум функции заданной таблично?

и т.д.
Понятия Аппроксимация, Интерполяция и Экстраполяция гуглятся желающими самостоятельно.
Аппроксимация – под аппроксимационной кривой подразумевается некий полином (как правило, но не обязательно), график которого проходит наиболее близко к известным точкам (степень близости определяется по некоторому закону, как правило методу наименьших квадратов). При этом в известных значениях значения функции не обязательно совпадают с заданными значениями (в общем случае f(Xi) ≠ Yi).
Интерполяция – нахождение неизвестных промежуточных значений некоторой функции, по имеющемуся дискретному набору ее известных значений определенным способом. При этом в известных значениях значения функции совпадают с заданными значениями. Под интерполяционной кривой подразумевается некий полином (в нашем случае), график которого проходит через все известные точки.
Две особенности интерполяции:
- для получения полинома степени «n» требуется «n+1» заданная точка (например, полином первой степени f(x)=a·x+b требует две известные точки, или проще – линия строится по двум точкам, парабола по трём и т.д.);
- применение интерполяции методом «ближайшего соседа» в общем случае недопустимо.
Экстраполяция – особый тип аппроксимации, при котором функция аппроксимируется вне заданного интервала, а не между заданными значениями.

Часть 1. Аппроксимация с использованием встроенного функционала
Начнём с аппроксимации без использования макросов
Для начала - самый простой вариант:
1. Построить точечный график по имеющимся точкам;
2. На график добавить линию тренда с отображением уравнения на диаграмме;
3. Подобрать вид уравнения (степень полинома, вид уравнения...) который нравится/наиболее адекватно по субъективному восприятию отражает тенденцию изменения зависимости;
4. Скопировать уравнение линии тренда в ячейку и заменить "х" на "*А1^", где А1 - адрес ячейки в которой содержится значение аргумента, по которому требуется определить значение функции.
5. Пользоваться...
Если лень копировать уравнение с диаграммы, и хочется получить коэфф-ты полиномов, то можно сделать вот так:
Внимание! Не всегда коэфф-ты найденные нижеописанными способами будут соответствовать коэ-там на уравнении. Но об этом в 4-й части..
Аппроксимация полиномом


Код
Определение коэффициентов линейного уравнения
y=ax+b   
b=   1.397235    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7;1);1;2)
a=   -0.027554    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7;1);1;1)

Определение коэффициентов квадратичного уравнения
y=ax2+bx+c   
c=   1.662612    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7^{1;2};);1;3)
b=   -0.071047    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7^{1;2};);1;2)
a=   0.000849    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7^{1;2};);1;1)

Определение коэффициентов кубического уравнения
y=ax3+bx²+cx+d   
d=   1.872900    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7^{1;2;3};);1;4)
c=   -0.132192    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7^{1;2;3};);1;3)
b=   0.004066    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7^{1;2;3};);1;2)
a=   -0.000042    =ИНДЕКС(ЛИНЕЙН($B$2:$B$7;$A$2:$A$7^{1;2;3};);1;1)

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


Код
Коэф-ты уравнения 
y = а · Х ^ m      
m =   -0.6320    =ИНДЕКС(ЛИНЕЙН(E3:E8;D3:D8);1)
A  =   1.1596    =ИНДЕКС(ЛИНЕЙН(E3:E8;D3:D8);2)
a  =   3.1888    =EXP(H4)

Аппроксимация логарифмической функцией


Код
Коэф-ты уравнения 
y = а · ln(x) + b      
a =    -0.4676    =ИНДЕКС(ЛИНЕЙН(B3:B8;D3:D8);1)
b =    2.0017    =ИНДЕКС(ЛИНЕЙН(B3:B8;D3:D8);2)

Использованием макросов
Преимуществом будет отсутствие необходимости использования ячеек листа. Макросы сохранённые в надстройку позволяют пользоваться ими без импорта в лист ну и т.д...
Недостатком - отсутствие визуализации решения.
Макрос Нумбер раз. Основной. Он собственно и находит все коэффициенты полинома.
Скрытый текст

Макрос нумбер 2. Необязательный. Подготовка исходных данных. Ввиду того что у меня данные могут браться из разных мест я их привожу к единому виду. Не стал выкидывать, ибо у меня 100% всё работает в такой связке, посему пускай будет.
Скрытый текст

Макрос 3. Получение значения в указанной промежуточной точке. Большой вариант.
Скрытый текст

Короткий вариант. Только полином
Скрытый текст

Как можно понять "большой вариант" не сложно дорабатывается под требуемые виды аппроксимирующих уравнений. Например у меня сейчас используются:
y = 1/(а · x^stepen + b · x^stepen-1 + ... + c)
y = a + b / x^stepen
y = 1/(а+b·x^stepen)
y = 1/(а+b·1/х)
y = а·x^2+b·1/х+c и т.д ...

За сим первую часть закрываю. Вторая часть будет о кусочной интерполяции ... чуть позже.
Изменено: tutochkin - 25.10.2022 16:54:21
выгрузка массива в диапазон Excel, VBA
 
Хм... я просто вот так делаю:
Найти промежуточные значения
 
И всё таки рекомендую построить график и брать данные с уравнения. Иначе можно во всякие вещи вляпаться, и не узнать об этом.


Интерполяция по 3 числам
 
Ну например так:
1. Построить точечный график
2. На график добавить линию тренда
3. Подобрать вид который нравится
4. Скопировать уравнение линии тренда
5. Пользоваться...
Многофункциональные уравнения, Подробно описал в самом тексте, постарался.
 
Цитата
Бек написал:
Но, когда ячейка А3 пуста, то и B3 должна быть пустой.
Код
=ЕСЛИ(A3<>""; ваша формула найденная в интернете; "")
Как подменить значения осей на графике на другие значения?
 
Цитата
Палкой Влагу написал:
Я так понимаю вы вручную значения поменяли?
Нет.
И вообще, я предпочитаю точечные графики. Функционал нестандартных решений выше...
Как подменить значения осей на графике на другие значения?
 
Палкой Влагу,
Нужно замазать определенный текст в Word-файле и в формате PDF отправить получателям, чтобы те не смогли прочитать замазанные слова
 
Ну я сделал вот так
Код
Sub Макрос1()
    Selection.Font.Name = "AIGDT"
    Options.DefaultHighlightColorIndex = wdBlack
    Selection.Range.HighlightColorIndex = wdBlack
End Sub

И затем сохранил вот так

После этого текст не читается при обратной перегонки в ворд из пдф.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 17 След.
Наверх