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

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

У меня есть столбец со следующей формулой в каждой ячейке, которая вычисляет разницу в километрах между двумя ячейками слева от каждой ячейки:

=IF(AND(INDIRECT(ADDRESS(ROW(),COLUMN()-2))<>"", INDIRECT(ADDRESS(ROW(), COLUMN()-1))<>""), INDIRECT(ADDRESS(ROW(),COLUMN()-1))-INDIRECT(ADDRESS(ROW(),COLUMN()-2)), "")

пустая ячейка без формулы при вставке новой строки

Моя проблема в том, что каждый раз, когда я вставляю новую строку между существующими данными, все ячейки в этой строке пустые, и мне нужно вручную вставить этот код в пустую ячейку.

Можно ли задать для каждой ячейки столбца (кроме заголовка) определенную формулу?даже когда я вставляю новую строку?

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

решение1

Вот небольшая демонстрация, которую вы можете адаптировать к своей реальной схеме. В демонстрации:

  1. интересующий нас столбец — это столбецБ
  2. если вставлено больше одной строки, ничего не произойдет
  3. если вставить строку под областью данных, ничего не произойдет
  4. если строка удалена, ничего не происходит
  5. если вставлена ​​строка в середину данных, ячейка в столбцеБбудет заполнено либо формулой выше, либо формулой ниже
  6. если выше или ниже новой ячейки нет формулы, ничего не происходит

Вставьте следующую подпрограмму в область кода рабочего листа:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range, r1 As Range, r2 As Range

    Set r = Target
    If r.Rows.Count > 1 Then Exit Sub
    If r.Columns.Count <> Cells.Columns.Count Then Exit Sub
    If r.Row = 1 Then Exit Sub

    Set r1 = Intersect(r, Columns(2))
    If r1.Value <> "" Then Exit Sub

    If r1.Offset(-1, 0).HasFormula Then
        Application.EnableEvents = False
            r1.Offset(-1, 0).Copy r1
        Application.EnableEvents = True
        Exit Sub
    End If

    If r1.Offset(1, 0).HasFormula Then
        Application.EnableEvents = False
            r1.Offset(1, 0).Copy r1
        Application.EnableEvents = True
        Exit Sub
    End If

End Sub

решение2

Я собирался просто опубликовать это видео, но, очевидно, мне придется набрать не менее 30 символов.

А как насчет «Вот простой способ сделать это». Черт, всего лишь 29.

Для тех, кому интересно, иконка «Вставить изображение» не принимает .mov, но естьдовольно аккуратный сайткоторый преобразует видеофайлы в анимированные GIF-файлы.

введите описание изображения здесь

Связанный контент