Как автоматически суммировать все листы с помощью Excel formua

#excel #vba #sum

#excel #vba #сумма

Вопрос:

У меня есть рабочая книга, содержащая несколько листов. Мне нужна функция, которая отображала бы автоматическую сумму текущего листа, а также предыдущие не все. Например, если я нахожусь на листе1, и он имеет значение в ячейке «E12» = 1, тогда я напишу функцию =autosum(E12), которая отобразит результат в E13 = 1. Затем в листе2, если тот же диапазон ячеек E12 = 2, и я применил функцию «= автосумма (e12), она должна отображаться на листе2 E13 = 3. Но когда я возвращаюсь к листу1, он должен отображаться так же, как 1, а не отображать общее количество для всех.

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

     Function AutoSum(rng As Range) As Variant
    AutoSum = ActiveSheet.Range("E12").Value
    Application.Volatile True
    For Each WS In Worksheets
        If Not WS Is Application.ThisCell.Parent Then
            AutoSum = AutoSum   WS.Range(rng.Address)
        End If
    Next
End Function
 

Макет листов такой, как показано ниже.

Лист1

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

Ответ №1:

Рассмотрим:

 Public Function AutoSum(rng As Range) As Variant
    Application.Volatile
    Dim addy As String, ws As Worksheet, wName As String
    Dim wb As Workbook
    
    addy = rng.Address
    wName = rng.Parent.Name
    Set wb = rng.Parent.Parent
    AutoSum = 0
    
    For Each ws In wb.Sheets
        AutoSum = AutoSum   ws.Range(addy)
        If ws.Name = wName Then Exit Function
    Next ws
    
End Function
 

Это позволит суммировать заданную ячейку со всех листов вплоть до листа, содержащего формулу, включительно.

Ответ №2:

весь ваш код корректен только в том случае, если требуются небольшие изменения.

 AutoSum = ActiveSheet.Range("E12").Value
 

Для

 AutoSum = rng.Value
 

или следуйте видео на YouTube, чтобы использовать приведенный ниже код

https://youtu.be/4AWt7C2Ugsk

 Function AutoSum(rng As Range)
Application.Volatile True
For Each WS In Worksheets
        AutoSum = WorksheetFunction.Sum(AutoSum, WS.Range(rng.Address))
Next
 

Функция завершения

Комментарии:

1. Брат, мой код работал идеально и давал тот же результат, но я ищу изменения в коде, чтобы каждая книга показывала свой инструмент так же хорошо, как и предыдущая. например, лист1 должен отображать только его итоговый лист2 должен отображать его, а также предыдущий итог.