Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Составление макроса для двумерной интерполяции - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Составление макроса для двумерной интерполяции
Khorr Дата: Пятница, 24.01.2014, 13:46 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день. Возникла проблема при инженерном расчете в автоматизации процесса двумерной интерполяции. Макросами до этого не занимался:(
Есть функция для линейной интерполяции (нашел на форуме), которую думаю можно немного подправить:
[vba]
Код

Function Interp(a As Range, Arng As Range, Krng As Range) As Single
Dim al, ks, i As Integer
al = Arng.Value: ks = Krng.Value
Do
i = i + 1
Loop While al(i, 1) < a.Value
'If i = 1 Then Exit Function
If al(i, 1) = a.Value Then
Interp = ks(i, 1)
Else
Interp = (ks(i, 1) - ks(i - 1, 1)) / (al(i, 1) - al(i - 1, 1)) * _
(a.Value - al(i - 1, 1)) + ks(i - 1, 1)
End If
End Function
[/vba]
Необходимо найти значение из таблицы при изменяющихся a и b (таблицу приложил).
Заранее всех благодарю.
К сообщению приложен файл: 9273599.xlsx (9.8 Kb)


Сообщение отредактировал Khorr - Пятница, 24.01.2014, 14:10
 
Ответить
СообщениеДобрый день. Возникла проблема при инженерном расчете в автоматизации процесса двумерной интерполяции. Макросами до этого не занимался:(
Есть функция для линейной интерполяции (нашел на форуме), которую думаю можно немного подправить:
[vba]
Код

Function Interp(a As Range, Arng As Range, Krng As Range) As Single
Dim al, ks, i As Integer
al = Arng.Value: ks = Krng.Value
Do
i = i + 1
Loop While al(i, 1) < a.Value
'If i = 1 Then Exit Function
If al(i, 1) = a.Value Then
Interp = ks(i, 1)
Else
Interp = (ks(i, 1) - ks(i - 1, 1)) / (al(i, 1) - al(i - 1, 1)) * _
(a.Value - al(i - 1, 1)) + ks(i - 1, 1)
End If
End Function
[/vba]
Необходимо найти значение из таблицы при изменяющихся a и b (таблицу приложил).
Заранее всех благодарю.

Автор - Khorr
Дата добавления - 24.01.2014 в 13:46
doober Дата: Суббота, 25.01.2014, 17:11 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 983
Репутация: 340 ±
Замечаний: 0% ±

Excel 2010
Жмите иконку,проверяйте правильность расчета.
Достал из загашника. :'(
Все необходимые диапазоны поименованы.
К сообщению приложен файл: 0604202.xlsm (33.0 Kb)




Сообщение отредактировал doober - Суббота, 25.01.2014, 17:14
 
Ответить
СообщениеЖмите иконку,проверяйте правильность расчета.
Достал из загашника. :'(
Все необходимые диапазоны поименованы.

Автор - doober
Дата добавления - 25.01.2014 в 17:11
Khorr Дата: Вторник, 28.01.2014, 07:20 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Благодарю, Вы очень помогли.
 
Ответить
СообщениеБлагодарю, Вы очень помогли.

Автор - Khorr
Дата добавления - 28.01.2014 в 07:20
AlexM Дата: Вторник, 28.01.2014, 08:28 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Похожая тема Интерполяция и поиск третьего значения по двум известным
Решение функцией пользователя
Код
[vba]
Код
Function Interp(P1 As Single, P2 As Single) As Double
Dim Arr
Dim i As Long, j As Long
Dim Z1 As Double, Z2 As Double
Arr = Range("A2:F6")
For i = 2 To 6
If P2 <= Arr(1, i) Then Exit For
Next i
For j = 2 To 6
If P1 <= Arr(j, 1) Then Exit For
Next j
Z1 = Arr(j - 1, i - 1) + (Arr(j - 1, i) - Arr(j - 1, i - 1)) * (P2 - Arr(1, i - 1)) / (Arr(1, i) - Arr(1, i - 1))
Z2 = Arr(j, i - 1) + (Arr(j, i) - Arr(j, i - 1)) * (P2 - Arr(1, i - 1)) / (Arr(1, i) - Arr(1, i - 1))
Interp = Z1 + (Z2 - Z1) * (P1 - Arr(j - 1, 1)) / (Arr(j, 1) - Arr(j - 1, 1))
End Function
[/vba]
Использован файл Сергея (doober).
К сообщению приложен файл: Interp.xls (21.5 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеПохожая тема Интерполяция и поиск третьего значения по двум известным
Решение функцией пользователя
Код
[vba]
Код
Function Interp(P1 As Single, P2 As Single) As Double
Dim Arr
Dim i As Long, j As Long
Dim Z1 As Double, Z2 As Double
Arr = Range("A2:F6")
For i = 2 To 6
If P2 <= Arr(1, i) Then Exit For
Next i
For j = 2 To 6
If P1 <= Arr(j, 1) Then Exit For
Next j
Z1 = Arr(j - 1, i - 1) + (Arr(j - 1, i) - Arr(j - 1, i - 1)) * (P2 - Arr(1, i - 1)) / (Arr(1, i) - Arr(1, i - 1))
Z2 = Arr(j, i - 1) + (Arr(j, i) - Arr(j, i - 1)) * (P2 - Arr(1, i - 1)) / (Arr(1, i) - Arr(1, i - 1))
Interp = Z1 + (Z2 - Z1) * (P1 - Arr(j - 1, 1)) / (Arr(j, 1) - Arr(j - 1, 1))
End Function
[/vba]
Использован файл Сергея (doober).

Автор - AlexM
Дата добавления - 28.01.2014 в 08:28
Khorr Дата: Вторник, 28.01.2014, 08:45 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Решение функцией пользователя

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

Спасибо, так даже макрос каждый раз запускать не надо при изменении параметров.

Автор - Khorr
Дата добавления - 28.01.2014 в 08:45
Doctor_Che Дата: Четверг, 17.12.2015, 13:21 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
А как сделать тоже самое, только что бы таблица находилась на другом листе?
Например формула находится на Листе 1, а таблица на Листе 2.
 
Ответить
СообщениеА как сделать тоже самое, только что бы таблица находилась на другом листе?
Например формула находится на Листе 1, а таблица на Листе 2.

Автор - Doctor_Che
Дата добавления - 17.12.2015 в 13:21
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!