Диапазон сортировки в функции VBA без влияния на данные в рабочей таблице - PullRequest
0 голосов
/ 05 февраля 2019

Я создаю функцию линейной интерполяции в VBA.Вот как это выглядит:

Function INTERP(X0 As Variant, ByVal X As Range, ByVal Y As Range) As Variant

    Dim i As Long
    Dim N As Long
    Dim X1 As Double
    Dim X2 As Double
    Dim Y1 As Double
    Dim Y2 As Double

    N = X.Rows.Count

    If X0 <= Application.Min(X) Then
        X2 = X.Cells(2, 1)
        Y2 = Y.Cells(2, 1)
        X1 = X.Cells(1, 1)
        Y1 = Y.Cells(1, 1)
    ElseIf X0 >= Application.Max(X) Then
        X2 = X.Cells(N, 1)
        Y2 = Y.Cells(N, 1)
        X1 = X.Cells(N - 1, 1)
        Y1 = Y.Cells(N - 1, 1)
    Else
        For i = 1 To N - 1
            If X0 >= X.Cells(1, 1) And X0 < X.Cells(i + 1, 1) Then
                X2 = X.Cells(i + 1, 1)
                Y2 = Y.Cells(i + 1, 1)
                X1 = X.Cells(i, 1)
                Y1 = Y.Cells(i, 1)
                Exit For
            End If
        Next i
    End If

    INTERP = Y1 + (Y2 - Y1) / (X2 - X1) * (X0 - X1)

End Function

Чтобы выполнить интерполяцию, диапазон X должен быть отсортирован в порядке возрастания.Большинство других ответов, касающихся сортировки в Excel VBA, которые я видел, имеют дело с какой-то сортировкой, которая возвращает и сортирует данные на листе.

В этом случае Я неЯ хочу изменить данные на листе , но мне нужно отсортировать X в порядке возрастания, а затем отсортировать Y на основе X, чтобы сохранить связь между ними.Как я могу сделать это с VBA?

1 Ответ

0 голосов
/ 05 февраля 2019

Сохранить X и Y как таблицу (это может быть даже таблица без форматирования).Затем просто отсортируйте таблицу, остальная часть листа останется прежней.

...