Автоматически изменять диапазон функции при добавлении строк

[Автоматически изменять диапазон функции при добавлении строк1Автоматически изменять диапазон функции при добавлении строкАвтоматически изменять диапазон функции при добавлении строк

Я написал =sum(A2:A11) в ячейке A1 и написал случайные числа в A2:A11. Затем я удалил несколько строк, а затем автоматически изменился диапазон ячеек A1. Но я не понимаю, почему диапазон не меняется автоматически, когда я добавляю новые строки и вставляю новые значения. Как сделать так, чтобы он менялся автоматически? Должен ли я использовать vba для этого?

Попробуйте что-нибудь вроде =SUM(INDEX(A:A,2):INDEX(A:A,MATCH(99^99,A:A))). Посмотрите, работает ли это для вас.

JvdV 22.03.2022 08:49

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

howto 22.03.2022 08:54

использовать таблицы (Вставка > таблица): они автоматически расширяются, и формулы соответственно обновляются

Ike 22.03.2022 08:56

Если вы преобразуете свои данные в таблицу, она должна автоматически добавлять новые строки. Альтернативой может быть реакция на триггер изменения.

FunThomas 22.03.2022 08:57

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

Solar Mike 22.03.2022 09:08
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
5
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Событие изменения рабочего листа: отслеживание изменений в данных столбца

  • Лично я бы согласился с предложением JvdV в комментариях.
  • При каждом ручном изменении ячейки, например. в столбце A он проверит формулу =SUM(A2:ALastRow) в ячейке A1, и если он неправильный, он перезапишет его правильным.
  • Вы можете использовать это для нескольких несмежных столбцов, например. "A,C:D,E".
  • Ничего не нужно запускать. Просто скопируйте код в соответствующий модуль листа, например. Sheet1 и выйдите из редактора Visual Basic.

Модуль листа, например. Sheet1 (не стандартный модуль, например Module1)

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    UpdateFirstRowFormula Target, "A"
End Sub

Private Sub UpdateFirstRowFormula( _
        ByVal Target As Range, _
        ByVal ColumnList As String)
    
    On Error GoTo ClearError
    
    Dim ws As Worksheet: Set ws = Target.Worksheet
    Dim Cols() As String: Cols = Split(ColumnList, ",")
    
    Application.EnableEvents = False
    
    Dim irg As Range, arg As Range, crg As Range, lCell As Range
    Dim n As Long
    Dim Formula As String
    
    For n = 0 To UBound(Cols)
        With ws.Columns(Cols(n))
            With .Resize(.Rows.Count - 1).Offset(1)
                Set irg = Intersect(.Cells, Target.EntireColumn)
            End With
        End With
        If Not irg Is Nothing Then
            For Each arg In irg.Areas
                For Each crg In arg.Columns
                    Set lCell = crg.Find("*", , xlFormulas, , , xlPrevious)
                    If Not lCell Is Nothing Then
                        Formula = "=SUM(" & crg.Cells(1).Address(0, 0) & ":" _
                            & lCell.Address(0, 0) & ")"
                        With crg.Cells(1).Offset(-1)
                            If .Formula <> Formula Then .Formula = Formula
                        End With
                    End If
                Next crg
            Next arg
            Set irg = Nothing
        End If
    Next n

SafeExit:
    If Not Application.EnableEvents Then Application.EnableEvents = True
    Exit Sub
ClearError:
    Debug.Print "Run-time error '" & Err.Number & "': " & Err.Description
    Resume SafeExit
End Sub

Используйте вложенную функцию, как показано ниже: =СУММ(СМЕЩ(A2,,,СЧЁТ(A2:A26)))

Другие вопросы по теме