3

У меня есть таблица с последовательностью данных.
Эти данные используются в графике.
В этих данных есть дыры, которые я хочу заполнить сглаженными числами.

Возьмите эту таблицу, например:

образец таблицы

В приведенном выше примере между 93 и 68 есть 3 пробела, которые я хочу заполнить.
Последовательность должна идти 93, 86,75, 80,5, 74,25, а затем 68.

Какую формулу я могу использовать для автоматического вычисления промежуточных чисел?

Изменить: промежутки могут быть любым числом строк, они могут идти вверх или вниз.

4 ответа4

1

Если интервалы времени всегда на одинаковом расстоянии вы можете использовать функцию заливки в Excel.

  • Выберите B2285:F2289 (пустой диапазон плюс строки данных выше и ниже)
  • На вкладке « Главная лента» выберите « Заполнить», а затем « Сери ...»
    • Серия в: Колонны
    • Тип: Линейный
    • Тенденция: да
    • Нажмите ОК

Проверено в Excel 2007.

1

С помощью этого сабвуфера VBA вы можете выбрать ячейки, которые хотите интерполировать, а затем активировать макрос. Я использовал кнопку, но вы, вероятно, захотите обработать комбинацию клавиш быстрого доступа.

Private Sub InterpolateGap()

Dim Gap As Range
Dim GapRows As Integer, i As Integer, Increment As Integer

Set Gap = Selection
If Not Gap Is Nothing Then
    GapRows = Gap.Rows.Count
    Increment = (Gap.Cells(1, 1).Offset(-1, 0) - _ 
                 Gap.Cells(1, 1).Offset(GapRows, 0)) / GapRows
    For i = 1 To GapRows
        Gap.Rows(i).Cells(1, 1) = _ 
        Gap.Rows(i).Cells(1, 1).Offset(-1, 0) - Increment
    Next i
End If

End Sub
0

Это будет трудно сделать, когда у вас нет устойчивого подъема вверх или вниз.

Мой лучший совет - просто выделите цифры, которые у вас есть, а затем нажмите на поле в правом нижнем углу выделенной области и перетащите вниз, чтобы Excel мог лучше всего угадать.

альтернативный текст

0

Я закончил тем, что написал некоторый код VBA благодаря Лэнсу Робертсу
Этот код будет фактически проходить по каждой строке и столбцу в поисках пустых записей, захватывая верхнее и нижнее значения и вычисляя таким образом.
Единственная проблема - это когда в первой строке данные пустые.
Колонки жестко закодированы как 10 из-за лени.

Sub SetAverages()
   Dim lastrow As Integer, ncol As Integer, nrow As Integer
   Dim secondvalrow As Integer, blankrows As Integer
   Dim difference As Double, Increment As Double


    Range("A65535").End(xlUp).Select
    lastrow = ActiveCell.Row

    For ncol = 2 To 10
        For nrow = 2 To lastrow   'start after header row
            If Cells(nrow + 1, ncol).Value = "" Then
                secondvalrow = nrow + 1
                Do Until Cells(secondvalrow, ncol).Value <> "" Or secondvalrow = lastrow + 1
                    secondvalrow = secondvalrow + 1
                Loop

                blankrows = secondvalrow - nrow

                difference = Cells(secondvalrow, ncol).Value - Cells(nrow, ncol).Value
                Increment = difference / blankrows
                For i = nrow + 1 To secondvalrow - 1
                    Cells(i, ncol).Value = Cells(i - 1, ncol).Value + Increment
                Next i
            End If
        Next nrow
    Next ncol
End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .