#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:
Рассмотрим:
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, чтобы использовать приведенный ниже код
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 должен отображать его, а также предыдущий итог.