Why VBA interpol function doesn't work in this excel file...
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Why VBA interpol function doesn't work in this excel file...

Why VBA interpol function doesn't work in this excel file...

Ответ
Поиск в этой теме
Непрочитано 12.05.2008, 02:32 #1
Why VBA interpol function doesn't work in this excel file...
romkeris
 
конструктор
 
Литва, Вильнюс
Регистрация: 12.05.2008
Сообщений: 16

Maybe somebody can correct this error?

Вложения
Тип файла: zip interpol.zip (14.1 Кб, 109 просмотров)


Последний раз редактировалось romkeris, 12.05.2008 в 15:31.
Просмотров: 3494
 
Непрочитано 13.05.2008, 00:46
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Пробуй:
Код:
[Выделить все]
Option Base 1
Option Explicit
Public xj As Integer, yi As Integer

' *********************************************
' *  СФ БГПА, г.Минск, vNovikov@sf.unibel.by  *
' *       http://helpstud.narod.ru            *
' *********************************************

' Функция двойной линейной интерполяции
Function interpol(xr As Range, yr As Range, xyr As Range, xg As Single, yv As Single) As Variant
    Dim i As Integer, j As Integer, m As Integer, n As Integer  ' Число строк и столбцов
    Dim b1 As Single, b2 As Single, k As Single
    Dim x1 As Single, x2 As Single, y1 As Single, y2 As Single
    Dim xy1 As Single, xy2 As Single, xy3 As Single, xy4 As Single, xy5 As Single, xy6 As Single
    
        
    n = UBound(xr.Value, 2)
    m = UBound(yr.Value, 1)
    If (m = 1 Or n = 1) Then
        interpol = "Ячейки не являются диапазоном"
        Exit Function
    End If
    
    If (m <> UBound(xyr.Value, 1) Or n <> UBound(xyr.Value, 2)) Then
        interpol = "Размеры диапазонов не совпадают"
        Exit Function
    End If
    
    xj = 0: yi = 0
    ' Поиск границ по X
    For j = 1 To n - 1
        b1 = xr(1, j).Value
        b2 = xr(1, j + 1).Value
        If (xg >= Min(b1, b2) And xg < Max(b1, b2)) Then
            xj = j ' Левый верхний индекс
            Exit For
        End If
     Next j
     
    ' По Y
    For i = 1 To m - 1
        b1 = yr(i, 1).Value
        b2 = yr(i + 1, 1).Value
        If (yv >= Min(b1, b2) And yv < Max(b1, b2)) Then
            yi = i
            Exit For
        End If
     Next i
     
     If (xj = 0 Or yi = 0) Then
        interpol = "Значение за пределами диапазона"
        Exit Function
     End If
     
     x1 = xr(1, xj).Value ' Границы
     x2 = xr(1, xj + 1).Value
     y1 = yr(yi, 1).Value
     y2 = yr(yi + 1, 1).Value
     
     xy1 = xyr(yi, xj).Value ' Значения
     xy2 = xyr(yi, xj + 1).Value
     xy3 = xyr(yi + 1, xj).Value
     xy4 = xyr(yi + 1, xj + 1).Value

     ' Горизонтальная интерполяция
     k = (xg - x1) / (x2 - x1)
     xy5 = xy1 + (xy2 - xy1) * k
     xy6 = xy3 + (xy4 - xy3) * k
     
     ' Вертикальная
     interpol = xy5 + (xy6 - xy5) * (yv - y1) / (y2 - y1)
     
'    Interpolation key
'     ! x1  ! xg   ! x2
'  ---------       --------
'  y1 ! xy1 ! xy5  ! xy2
'  yv
'  y2 ! xy3 ! xy6  ! xy4
'
End Function


Function Min(a1 As Single, a2 As Single) As Single
  If a1 <= a2 Then
    Min = a1
  Else
    Min = a2
  End If
End Function

Function Max(a1 As Single, a2 As Single) As Single
  If a1 <= a2 Then
    Max = a2
  Else
    Max = a1
  End If
End Function
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.05.2008, 01:20
#3
romkeris

конструктор
 
Регистрация: 12.05.2008
Литва, Вильнюс
Сообщений: 16


Большое спасибо! Теперь работает.
romkeris вне форума  
 
Непрочитано 13.05.2008, 01:50
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


А вот "теперь позвольте пару слов без протокола" - а на фига было косить по иностранца?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.05.2008, 11:11
#5
romkeris

конструктор
 
Регистрация: 12.05.2008
Литва, Вильнюс
Сообщений: 16


Я и есть иностранец. Просто у меня в доме нет клавы с кирилицои и мой родной язык на латинских буквах. Cледущий раз постараюс писать по рускому.
romkeris вне форума  
 
Непрочитано 13.05.2008, 12:03
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


В таком случае прошу прощения.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Why VBA interpol function doesn't work in this excel file...



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить доступ к таблице Access Cleper Программирование 22 02.02.2016 07:05
Перебор ячеек в Excel из VBA AutoCAD SVitaliy Программирование 6 10.10.2007 23:45
How can I creat a new text file with VBA To Thuc Программирование 7 25.07.2006 14:01
RTEXT shnn AutoCAD 3 06.07.2005 17:54