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

Страницы: 1
Не работает СРЗНАЧЕСЛИМН под VBA с условием по соответствию даты
 
Добрый день. Никак не могу понять в чём дело. Никак не могу победить работу WorksheetFunction.AverageIfs в VBA с проверкой условия по столбцу дата/время.
Для примера упростил код максимально. Да, тут не нужен СРЗНАЧЕСЛИМН, достаточно СРЗНАЧЕСЛИ. Я специально оставил только одно условие. В дальнейшем условий будет несколько, но добавляются проверка по числам, и она работает.
Итак, код:
Код
Sub Averageifs_Function1()
    tmp = "<" & CDbl(Range("A7"))
    [D2] = WorksheetFunction.AverageIfs(Range("B2:B12"), _
                                        Range("A2:A12"), tmp)
End Sub

Для примера сравниваю с значением посчитанным по классической формуле в ячейке.
МSO не учитывает ограничение и считает среднее по всем ячейкам.

Ради интереса открыл файл в LO, и там, внезапно, всё считает корректно.


Что я делаю не так?
Изменено: tutochkin - 06.02.2024 20:14:48
Разрыв связи между диаграммой в Word и первоисточником в Excel с помощью VBA
 
Добрый день коллеги. Тут вопрос возник, существует ли возможность макросом убрать привязку к Excel конкретной диаграммы вставленной в документ Word?
Вопрос не совсем по Excel, посему в курилке.

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

делаю сверку результатов оцифровки и расчёта по предоставленным коэффициентам и имею хороший (устраивающий) результат (столбцы dt - данные снятые с диаграммы, df(ур-е) - данные посчитанные по уравнению представленному на диаграмме)
Делаю классическое решение по по МНК (сумма квадратов отклонений) и запускаю решение с помощью встроенного функционала эксель (поиск решений)

Получаю бред (коэф-ты не соответствуют изначальным от слова совсем, сумма квадратов отклонений больше чем при коэ-тах номограммы).


Файлик прикладываю, и надеюсь на подсказку - а что я не так делаю то?
Объединение таблиц по столбцам из несколькх документов, расположенных в одной папке, в PQ
 
Добрый день.
То ли я сильно туплю, то ли ещё что, но буду рад помощи.
Итак, есть папка, в которой лежат несколько файлов csv. Их количество может изменяться. Для примера взял два - Файл1 и Файл2.
Данные файлы (поочерёдно) я причёсываю, и объединяю в один с признаком объединения в первом столбце (дата время).
Очень хотелось бы сие автоматизировать. Т.е. указать папку, а Power Query брал бы поочерёдно файлы, обрабатывал их и сцеплял по столбцам (т.е. итоговая таблица растёт в ширь).
Примеры исходных файлов и ручной обработки прикладываю.
Отображение выбранных условий среза в ячейке формулами, Альтернатива макросу
 
Добрый день.
Интересует возможность реализацией с помощью формул следующего задания:
Дано: Есть умная таблица. Данная таблица фильтруется с использованием срезов.
Требуется: При помощи формул вывести в ячейку значения выбранных фильтров.
На данный момент это реализовано с помощью макроса (автор вероятно , tDots.ru не сочтите за рекламу, просто если автор не я - стараюсь указывать источник).
Сам макрос, и как хотелось бы видеть работу формулы, в прикреплённом файле.
Убрать лишние кавычки при копировании
 
День добрый, собственно вот в чём вопрос.
Есть некий макрос, который формирует другой макрос :) В качестве примера набросал простенький.
Код
Public Function test(a As Double, b As Double, name As String) As String
    test = vbLf & "Public Function " & name & "( x as double, y as double) as variant" & vbLf
    If a > b Then
        test = test & name & " =x *" & a & "+" & b & "* y" & vbLf
    Else
        test = test & name & " = ""нет решения""" & vbLf
    End If
    test = test & "End Function" & vbLf
End Function

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

Есть ли способ избавиться от такого действа? Т.е. избавиться от дополнительных кавычек.
Направление поиска решения
 
Столкнулся тут с интересной вещью.
Итак, есть таблица исходных данных. По данной таблице я провожу поиск по двум параметрам
Код
=ЕСЛИОШИБКА(ПРОСМОТР(2;1/(Таблица1[Дата]<I5)/(Таблица1[Буква]=I6);Таблица1[Цифра]);"нет данных")

И вот в чём загвоздка - решений (ячеек соответствующих условиям поиска) может быть несколько. И мне надо чтобы выдавалась первая сверху. А выдаётся первая снизу...
Как можно это исправить не переворачивая таблицу?

ПыСы естественно файл в качестве примера, и в реальности условий поиска больше...
ПыПыСы да, мне проще преписать через макрос, но хочется понять есть ли шанс обойтись без него.
Формат подписи оси - дата - время с расположением веремени под датой.
 
Добрый день. кто то в курсе о возможности установить формат подписи оси точечной диаграммы вот в таком виде:

Т.е. расположить время под датой.
Отображение точки(символа) поверх Image
 
Добрый день. Понадобилось мне сваять небольшой макрос по оцифровке диаграмм, а точнее снятия данных с рисунка.

И собственно вопросец, есть ли возможность после клика по полю Image отобразить на нём метки места клика
Что то вроде вот такого:

Файл экселя прикладываю...
Спасибо.
Определение промежуточных данных, Апроксимация, интерполяция и тому подобные шалости с табличными данными.
 


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

и т.д.
Понятия Аппроксимация, Интерполяция и Экстраполяция гуглятся желающими самостоятельно.
Аппроксимация – под аппроксимационной кривой подразумевается некий полином (как правило, но не обязательно), график которого проходит наиболее близко к известным точкам (степень близости определяется по некоторому закону, как правило методу наименьших квадратов). При этом в известных значениях значения функции не обязательно совпадают с заданными значениями (в общем случае 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
Поиск количества уникальных значений с учётом данных двух столбцов, или как избавится от вспомогательного столбца
 
Добрый день. Итак, мопед не мой, я только спросить.
Дано: Два столбца с данными.
Требуется определить количество уникальных пар столбец1-столбец2.

Самое простое решение - сделать доп.столбец (в примере столбец D), и по нему производить поиск.
=СУММПРОИЗВ(1/СЧЁТЕСЛИ(D2:D16;D2:D16))
А можно ли обойтись без доп.столбца? Попытки впихнуть к положительному результату не привели...
Пробовал (да я много что пробовал...) например:
=СУММПРОИЗВ(1/СЧЁТЕСЛИ(--СЦЕПИТЬ(A2;B2);--СЦЕПИТЬ(A2;B2)))
=СУММПРОИЗВ(1/СЧЁТЕСЛИ({СЦЕПИТЬ(A2;B2)};{СЦЕПИТЬ(A2;B2)}))

Спасибо.
Использование макроса расположенного в надстройке
 
Добрый вечер. Судьба заставила изучать написание и использование макросов в LibreOffice, и там обнаружилась интересная (для меня) тема - использование общих макросов.
Т.е. см.скрин:

Макрос расположен а коллекции "Мои макросы и диалоги" и подгружается для любого документа. Причём можно пользоваться (вызывать) как на листе, так и в модуле расположенном в открытом файле.
А как реализовать такое для VBA? Например вот есть надстройка bighouse.xlam , которая так же доступна для любого открытого файла. Макросами из данной надстройки можно пользоваться на листе. А вот вызов из модуля листа документа "Книга1" не проходит

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

Сам спросил, сам погуглил и нашёл...
Код
Public Sub udal_Zap()
    [a1] = Application.Run("bighouse.xlam!h_pt", 2, 320)
End Sub


Но это же не красиво...
Изменено: tutochkin - 21.09.2022 15:53:54
Использование результата выполнения функции как условия проверки ячейки, Или матрица как список.
 
Добрый день, уважаемые.
Возник тут вопрос. Имеется функция, результат действия которой - матрица (или вектор, не суть). Вопрос: Как данный результат, без использования ячеек листа, использовать в качестве списка для проверки допустимых значений в ячейках.
В качестве примера:

Есть пара столбцов (X Y), по ним вычисляем коэффициенты аппроксимирующего уравнения с помощью ЛИНЕЙН. Результат - вектор {1;0} (в данном примере).
Если я данное условие прописываю в качестве проверки данных ячейки (в примере Е2), то
а) выдаётся предупреждение о ошибке, но проверка вводится
б) вводимые данные проверяются (т.е. ввести можно только 1 и 0, т.е. коэф-ты соответствуют)
в) не отображается список
В связи с этим повторю вопрос, можно ли как то организовать выпадающий список?
ПыСы естественно ЛИНЕЙН взята в качестве примера.
ПыПыСы знаю что можно вывести в именованный список, и использовать его в качестве проверки. Но хочу без списка.
Изменено: tutochkin - 20.09.2022 08:12:57
Автоматический перевод ячейки с данными в расчётную и наоборот.
 
Добрый день.
Итак, есть две ячейки. Допустим С1 и С2. Цель - если ввожу данные в ячейку С1, то содержимое С2 должно заменяться на формулу "= С1 + 1". И наоборот, если ввожу данные в ячейку С2, то содержимое С1 должно замениться на формулу "= С2 + 2". Формулы для примера...  
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("C1")) Is Nothing Then
    Range("C2").Formula = "=C1+1"
End If

If Not Intersect(Target, Range("C2")) Is Nothing Then
    Range("C1").Formula = "=C2+2"
End If
End Sub
такая структура приводит к зацикливанию, что естественно, но как уйти от этого не придумывается...
Изменено: tutochkin - 24.07.2022 11:05:50
Загрузка перечня видео с YouTube
 
Добрый день. В связи с последними событиями и возможностью блокировки ютуба хотелось бы скачать видео некоторых каналов ДЛЯ ЛИЧНОГО ИСПОЛЬЗОВАНИЯ.
Т.е., например, есть канал с видео
https://www.youtube.com/c/MasterUniversal/videos
На канале (по вышеозначенной ссылке) есть видео с ссылками
https://www.youtube.com/watch?v=GHwvdyku2Pk
https://www.youtube.com/watch?v=uotMbqSH344
и т.д.

И вот собственно вопрос-есть ли возможность с помощью PQ выгрузить перечень данных ссылок с листа ютуба?
Удаление созданной диаграммы посредством VBA
 
Добрый день. Итак, суть вопроса:
Есть макрос, который создаёт диаграмму, проводит с ней манипуляции, вытаскивает из неё данные, после чего данную диаграмму требуется удалить.
Попробовал через
Код
 ' Задаю имя последнему объекту
ActiveSheet.Shapes(ActiveSheet.ChartObjects.Count).Name = "Временная"
....
' В конце удаляю диаграмму с этим именем
ActiveSheet.Shapes("Временная").Delete

Всё работает. Однако, если повесить запуск макроса ( Polynomial см.код ниже) на кнопку, то удаляется кнопка, а диаграмма остаётся :( Что естественно мне не нужно.

Код
Sub Polynomial()
    Dim rX As Range
    Dim rY As Range
    Dim rOut As Range
    Dim dataLabelText As String
    Dim coefficients As Variant
    
    Set rX = ActiveSheet.Range("B2:B6")
    Set rY = ActiveSheet.Range("C2:C6")
    Set rOut = ActiveSheet.Range("E2")
     
    dataLabelText = Извлечение_Полинома(rX, rY)
    coefficients = Извлечение_коэффициентов(dataLabelText)
    rOut.Resize(UBound(coefficients, 1) + 1, UBound(coefficients, 2)) = coefficients
End Sub
 
Private Function Извлечение_коэффициентов(dataLabelText As String) As Variant
Dim i As Integer
Dim rez() As Variant, txt As Variant
Dim razd As String
txt = Split(dataLabelText, "x")

ReDim rez(LBound(txt) To UBound(txt), 1 To 2)
For i = LBound(txt) To UBound(txt)
    txt(i) = Right(txt(i), IIf(i = LBound(txt), (Len(txt(i)) - 2), (Len(txt(i)) - 1)))
    rez(i, 1) = i
    rez(i, 2) = txt(i)
Next i
Извлечение_коэффициентов = rez
End Function

Function Извлечение_Полинома(rX As Range, rY As Range) As String
    Dim MyChart As Chart
    Dim text As String
    Dim dt As Date
    
    Set MyChart = ActiveSheet.Shapes.AddChart2(, , , , 450, 300).Chart
    
    ActiveSheet.Shapes(ActiveSheet.ChartObjects.Count).Name = "Временная"

    With MyChart
        .SeriesCollection.NewSeries
        .SeriesCollection(1).XValues = rX
        .SeriesCollection(1).Values = rY
        .ChartType = xlXYScatter
        .FullSeriesCollection(1).Trendlines.Add
        With .FullSeriesCollection(1).Trendlines(1)
            .Type = xlPolynomial
            .Order = 2 ' Указываем степень полинома
            .DisplayEquation = True
            .DataLabel.NumberFormat = "#.############E+00"
            dt = Now
            Do
                If .DataLabel.text <> "" Then Exit Do
                If dt < Now - TimeSerial(0, 1, 0) Then Exit Do
                DoEvents
                Application.Wait Now + TimeSerial(0, 0, 1)
            Loop
            text = .DataLabel.text
        End With
    End With
    Извлечение_Полинома = text
    
    ActiveSheet.Shapes("Временная").Delete
    
End Function


Отсюда и вопрос - как удалить только что (или последнюю созданную) диаграмму?
Изменено: tutochkin - 20.12.2021 08:51:49
Построение диаграммы с несколькими графиками из VBA
 
Добрый день. Встала передо мной задача построить несколько десятков диаграмм на основании результатов расчётов макросов. Естественно самый простой путь - заполнить столбцы расчётами и строить... Но больно много получается столбцов. В результате решил делать через средства VBA.
Всё получается, но один кусочек не нравится и хочу спросить совета
Итак, простой код на основании построения линий по одной
Код
Sub Создать_диаграмму_3()
    Dim MyChart As Chart
    Dim i As Integer, Xmin As Single, dX As Single, Xmax As Single, Ymin As Single, Ymax As Single, dY As Single
    Dim X() As Single
    Dim Y1() As Single
    Dim Y2() As Single
    Xmin = 0: Xmax = 300: dX = 20 ' Сие больше нужно для осей и оформления
    Ymin = 0: Ymax = 160: dY = 20
    
    ReDim X(0 To Xmax - Xmin): ReDim Y1(0 To Xmax - Xmin): ReDim Y2(0 To Xmax - Xmin)
    
    For i = 0 To Xmax - Xmin Step 1
        X(i) = Xmin + i
        Y1(i) = X(i) - 20
        Y2(i) = X(i) + 20
    Next i
    
    Set MyChart = ActiveSheet.Shapes.AddChart2.Chart
    ' Создаём первый график
    With MyChart
        .SeriesCollection.NewSeries
        .SeriesCollection(1).XValues = X
        .SeriesCollection(1).Values = Y1
        .ChartType = xlXYScatterSmoothNoMarkers
    End With
    ' Создаём 2 график
    With MyChart
        .SeriesCollection.NewSeries
        .SeriesCollection(2).XValues = X
        .SeriesCollection(2).Values = Y2
        .ChartType = xlXYScatterSmoothNoMarkers
    End With
End Sub


Т.к. графиков у меня на каждой диаграмме много, то решил объединить однотипный блоки и прогонять через цикл
Код
Sub Создать_диаграмму_4()
    Dim MyChart As Chart
    Dim i As Integer, Xmin As Single, dX As Single, Xmax As Single, Ymin As Single, Ymax As Single, dY As Single
    Dim X() As Single
    Dim Y() As Single
    Dim Yp() As Single
    Xmin = 0: Xmax = 300: dX = 20 ' Сие больше нужно для осей и оформления
    Ymin = 0: Ymax = 160: dY = 20
    
    ReDim X(0 To Xmax - Xmin): ReDim Y(0 To Xmax - Xmin, 1 To 2): ReDim Yp(0 To Xmax - Xmin)
    
    For i = 0 To Xmax - Xmin Step 1
        X(i) = Xmin + i
        Y(i, 1) = X(i) - 20
        Y(i, 2) = X(i) + 20
    Next i
    
    Set MyChart = ActiveSheet.Shapes.AddChart2.Chart

    For i = 1 To 2
            For j = 0 To Xmax - Xmin Step 1 ' Можно ли избавиться от этого?
                Yp(j) = Y(j, i)
            Next j
        With MyChart
            .SeriesCollection.NewSeries
            .SeriesCollection(i).XValues = X
            .SeriesCollection(i).Values = Yp
            .ChartType = xlXYScatterSmoothNoMarkers
        End With
    Next i

End Sub

Однако не знаю как передать только один столбец матрицы Y. Приходится использовать промежуточный вектор Yp... Не красиво :) Хоть и работает.

Посему готов немного поучиться :)
Вертикальная центровка текста в нескольких выделенных ячейках., аналог .HorizontalAlignment = xlCenterAcrossSelection
 
Добрый день. В качестве замены объединению нескольких ячеек в горизонтальном направлении можно воспользоваться .HorizontalAlignment = xlCenterAcrossSelection , или выделить несколько ячеек рядом и выбрать из меню "Выравнивание - По горизонтали - По центру выделения".


Собственно вопрос, а как аналогичное провернуть с вертикальным расположением ячеек?
Изменение цвета текста осей графиков посредством VBA
 
Добрый день. Понадобилось мне автоматизировать рутинные действия с графиками. Среди прочего - требуется автоматическая смена цвета цифр осей графиков.
По старой традиции записываю макрос своих действий (выделить график - сметить цвета на системные/авто). Сохраняю. Пробую повторить (выполнить зписанный макрос), а он не работает... Выкидывает с ошибкой
Код
Sub Макрос9()
    ActiveSheet.ChartObjects("Диаграмма 11").Activate
    With ActiveSheet.Shapes("Диаграмма 11").TextFrame2.TextRange.Font.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorText1
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = 0
        .Transparency = 0
        .Solid
    End With
End Sub

ЧЯДНТ?

Я конечно могу приложить файл пример, но... Но не в файле дело. Диаграмма обычная - точечный график.
Вариант с указанием цвета в ргб аналогично не работает...
Код
Sub Макрос11()
'
' Макрос11 Макрос
'

'
    ActiveSheet.ChartObjects("Диаграмма 11").Activate
    With ActiveSheet.Shapes("Диаграмма 11").TextFrame2.TextRange.Font.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
End Sub
Изменено: tutochkin - 28.09.2021 11:03:32
Преобразование формулы массива в обычную формулу.
 
Добрый день.

Есть макрос (написан не мной), получения значений сплайна. Он прекрасно работает при использовании его в качестве формулы массива (через Ctrl + Shift + Enter).
Код
 {=crspline1da(A2:A11;B2:B11;D2:D47)}

A2:A11-столбец исходных данных Х
B2:B11-столбец исходных данных Y
D2:D47-столбец искомых Х

А мне надо, например, =crspline1da(A2:A11;B2:B11;25) или =crspline1da(A2:A11;B2:B11;F3) т.е. для одного значения... Что не получается...

Посмотрите, если не сложно...
Изменено: vikttur - 23.08.2021 16:13:34
Уравнение плавного графика (диаграммы)
 
Добрый день.
Итак, суть вопроса: есть диаграмма "точечная с гладкими кривыми". Допустим она построена по 3-м точкам.

ХY
10090
16088
28686.1
Ни один из имеющихся полиномов/уравнений линии тренда построенной по данным точкам не даёт построения кривой аналогичного "точечная с гладкими кривыми".
Как узнать уравнение/зависимость построения данной кривой диаграммы?
Нет возможности создать или редактировать диаграммы., В документе нет доступа к функционалу.
 
Добрый день. Есть документ Excel.


Проблемы:

Не активна часть панелей, в частности "Вставка". Соответственно создать новую диаграмму нельзя. (см.скрин)

Нет возможности редактировать существующие диаграммы. При наведении мыши на диаграмму знак "стоп".

Проверил:
Книга не под защитой (см.скрин)
Активность общего доступа не понятна - кнопка серая (см.скрин). Соответственно снять не могу.

Макросы отсутствуют.
Свойства "эта книга" соответствуют свойствам нового документа.

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

Суть проблемы: мне (и не только) часто требуется производить форматирование текста вот в таком формате (с частым чередованием верхнего и нижнего регистра):



Поискав в сети нашёл вариант изменения последнего символа на надстрочный:
Код
Sub Nadstr()
' Переводим последний символ в надстрочное положение
With ActiveCell.Characters(Start:=Len(Selection), Length:=1)
.Font.Superscript = True
End With
End Sub
но он мне не подходит - мне необходимо производить произвольное (в любом положении) форматирование текста. Примеры оформления текста - на картинке выше.
Т.е. в идеале хотелось бы иметь как в Word - Ctrl + "+" -  включение/выключение нижнего (подстрочного) регистра. Ctrl + Shift + "+" - включение/отключение верхнего (надстрочного) регистра. Впрочем и выделение текста + гор.клавиша (подвязанная на макрос) более чем подойдёт. А то ползать по Ctrl+1 утомляет ¯\_(ツ)_/¯
Изменено: tutochkin - 10.08.2020 15:43:43
Смена нижнего индекса массива по умолчанию в VBA
 
Добрый день. Есть старый старый код на паскале (начала 90-х), и часть его мне надо перекинуть в VBA  т.к. не хочется изобретать велосипед.
И вот столкнулся с проблемой. Excel начинает отсчёт с 0. Т.е. первый элемент имеет индекс "0". А в исходном тексте, как понятно, всё начинается с индекса "1".
И в таком виде код не работает - выдаётся ошибка. Менять нумерацию в расчётах не вариант - их довольно много (все по понятным причинам приводить не буду - смысл и так ясен).

Код
Public Function steamSPT(T As Single, PR As Single) As Single
Dim YR, A4, A5, S0 As Single
Dim BP(1 to 4), CP(1 to 3), KP(1 to 5)
BP = Array(0.0003237, 0.00025, -0.0011354, -0.0004381)
CP = Array(0.0000056084, -0.0000025993, -0.000000012604)
KP = Array(2127.87, 1482.85, 379.026, 46.174, 10816.1)

YR = (T + 273.15) / 1000#
A4 = -BP(2) + 2 * BP(3) / (YR ^ 3) + 2 * BP(4) / ((YR - 0.21) ^ 3)
A5 = 8 * CP(2) / (YR ^ 9) + 14 * CP(3) / (YR ^ 15)
S0 = (KP(2) * Log(YR) + 2 * KP(3) * YR - KP(4) / YR + KP(5)) / 1000
steamSPT = S0 + A4 * PR + A5 * PR * PR / 2 - 0.46151 * Log(1000 * PR)

End Function

Получилось только через такие костыли (добавление нулевого элемента, который не используется в расчётах).
Код
Public Function steamSPT(T As Single, PR As Single) As Single
Dim YR, A4, A5, S0 As Single

Dim BP(), CP(), KP()
BP = Array(0, 0.0003237, 0.00025, -0.0011354, -0.0004381)
CP = Array(0, 0.0000056084, -0.0000025993, -0.000000012604)
KP = Array(0, 2127.87, 1482.85, 379.026, 46.174, 10816.1)

YR = (T + 273.15) / 1000#
A4 = -BP(2) + 2 * BP(3) / (YR ^ 3) + 2 * BP(4) / ((YR - 0.21) ^ 3)
A5 = 8 * CP(2) / (YR ^ 9) + 14 * CP(3) / (YR ^ 15)
S0 = (KP(2) * Log(YR) + 2 * KP(3) * YR - KP(4) / YR + KP(5)) / 1000
steamSPT = S0 + A4 * PR + A5 * PR * PR / 2 - 0.46151 * Log(1000 * PR)

End Function

Код работает, и результат устраивает, но не хочу оставлять костыли. Буду рад указанию где мой косяк.
Загрузка данных из базы *.idb в Excel
 
Добрый день. Есть базы данных в формате *.idb Пример прилагаю https://yadi.sk/d/9vNPN48XBmXODw
Возможно ли загрузить данные из таких баз в Excel? У меня с помощью Power Query не вышло. Я что то делаю не так, или это не возможно?
Спасибо.
Определение коэффициентов тренда в программе
 
Добрый день уважаемые.
Собственно вопрос.
Для определения коэффициентов полинома тренда в экселе используется структура:
Код
=ИНДЕКС(ЛИНЕЙН($B$2:$B$37;$A$2:$A$37^{1;2;3});1) 
- в данном случае я получаю 1-й коэф.кубической апроксимации данных

А как такое сделать в программе?
Пробовал делать так
Код
Public Function Popravka3(parametr As Single, krit As Single) As Single

' Задаю массивы из четырёх элементов. Т.е. у нас четыре графика
Dim kriv(0 To 3) As Currency
Dim kritgraf(0 To 3) As Currency

' Коэффициенты полинома
Dim koefA As Currency
Dim koefB As Currency
Dim koefC As Currency
Dim koefD As Currency

' ввести уравнения кривых и критерии относящиеся к кривым. Уравнения в качестве примера.
kriv(0) = 2 * parametr + 3
kritgraf(0) = 100
kriv(1) = 3 * parametr + 3
kritgraf(1) = 100
kriv(2) = 4 * parametr + 3
kritgraf(2) = 100
kriv(3) = 5 * parametr + 3
kritgraf(3) = 100

' Собственно расчёт. Интерполяция кубическим сплайном (по трём кривым).
 koefA = INDEX(LINEST(kriv,kritgraf^{1,2,3}),1,1)
 koefB = INDEX(LINEST(kriv,kritgraf^{1,2,3}),1,2)
 koefC= INDEX(LINEST(kriv,kritgraf^{1,2,3}),1,3)
 koefD= INDEX(LINEST(kriv,kritgraf^{1,2,3}),1,4)
  
 Popravka3 = koefA * krit * krit * krit + koefB * krit* krit  + koefC* krit + koefD 
End Function

не выходит - не понимает VBA такую структуру... Делать через макрос не хочу - есть желание иметь функцию пользователя.
Страницы: 1
Наверх