[1
Я написал =sum(A2:A11) в ячейке A1 и написал случайные числа в A2:A11. Затем я удалил несколько строк, а затем автоматически изменился диапазон ячеек A1. Но я не понимаю, почему диапазон не меняется автоматически, когда я добавляю новые строки и вставляю новые значения. Как сделать так, чтобы он менялся автоматически? Должен ли я использовать vba для этого?
На самом деле я действительно упростил свои проблемы, поэтому есть множество ячеек, которые я должен изменить, если я изменю эту ячейку вот так. Есть ли какая-либо настройка или опция, позволяющая сделать это без изменения каждой ячейки?
использовать таблицы (Вставка > таблица): они автоматически расширяются, и формулы соответственно обновляются
Если вы преобразуете свои данные в таблицу, она должна автоматически добавлять новые строки. Альтернативой может быть реакция на триггер изменения.
Это также может быть разница между добавлением строк в середине диапазона, где функция изменяется автоматически, и добавлением строк после конца диапазона, когда функция этого не делает.
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)))
Попробуйте что-нибудь вроде
=SUM(INDEX(A:A,2):INDEX(A:A,MATCH(99^99,A:A)))
. Посмотрите, работает ли это для вас.