Как в excel скопировать сумму из строки состояния
Здравствуйте, подскажите, пожалуйста решение. Как скопировать в буфер сумму выделенных ячеек. Можно сделать так что бы сумма автоматически копировалась в буфер после выделения?
Здравствуйте, подскажите, пожалуйста решение. Как скопировать в буфер сумму выделенных ячеек. Можно сделать так что бы сумма автоматически копировалась в буфер после выделения? noobik
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Сюда пишем диапазон, в котором выделяем ячейки для подсчета суммы
If Intersect(Target, Range("a1:f20")) Is Nothing Then Exit Sub
summ = 0
For Each cell In Selection
If IsNumeric(cell.Value) Then summ = summ + cell.Value
Next cell
' 'Если очень хочется именно в буфер, можно вставить значение на лист и скопировать ячейку
' [a1000] = summ
' [a1000].Copy
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Сюда пишем диапазон, в котором выделяем ячейки для подсчета суммы
If Intersect(Target, Range("a1:f20")) Is Nothing Then Exit Sub
summ = 0
For Each cell In Selection
If IsNumeric(cell.Value) Then summ = summ + cell.Value
Next cell
' 'Если очень хочется именно в буфер, можно вставить значение на лист и скопировать ячейку
' [a1000] = summ
' [a1000].Copy
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Сюда пишем диапазон, в котором выделяем ячейки для подсчета суммы
If Intersect(Target, Range("a1:f20")) Is Nothing Then Exit Sub
summ = 0
For Each cell In Selection
If IsNumeric(cell.Value) Then summ = summ + cell.Value
Next cell
' 'Если очень хочется именно в буфер, можно вставить значение на лист и скопировать ячейку
' [a1000] = summ
' [a1000].Copy
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Intersect(Target, Range("a1:p20")) ' чтобы исключить "лишние" ячейки, если выделенный диапазон шире контролируемого
If Target Is Nothing Then Exit Sub
With GetObject("New:")
.SetText WorksheetFunction.Sum(Target)
.PutInClipboard
End With
End Sub
[/vba]
[p.s.]Worksheet_SelectionChange - это первое, что приходит в голову, но ИМХО, вычисление при каждом выделении - это нерациональное использование ресурсов. Лучше добавить пункт в меню по правому клику и пользоваться им при необходимости.[/p.s.]
UPD . Во вложенном файле реализация доп. пункта меню "Копировать сумму выделенных ячеек" (по правому клику на выделенных ячейках)
Можно поместить этот код в модуль книги в личную книгу макросов.
Private Sub Workbook_Open()
With Application.CommandBars("Cell").Controls.Add(msoControlButton, 19, , 3, True)
.Caption = "Копировать сумму выделенных ячеек"
.OnAction = "ЭтаКнига.SumToClipboard"
End With
End Sub
Private Sub SumToClipboard()
With CreateObject("New:")
.SetText WorksheetFunction.Sum(Selection)
.PutInClipboard
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Intersect(Target, Range("a1:p20")) ' чтобы исключить "лишние" ячейки, если выделенный диапазон шире контролируемого
If Target Is Nothing Then Exit Sub
With GetObject("New:")
.SetText WorksheetFunction.Sum(Target)
.PutInClipboard
End With
End Sub
[/vba]
[p.s.]Worksheet_SelectionChange - это первое, что приходит в голову, но ИМХО, вычисление при каждом выделении - это нерациональное использование ресурсов. Лучше добавить пункт в меню по правому клику и пользоваться им при необходимости.[/p.s.]
UPD . Во вложенном файле реализация доп. пункта меню "Копировать сумму выделенных ячеек" (по правому клику на выделенных ячейках)
Можно поместить этот код в модуль книги в личную книгу макросов.
Private Sub Workbook_Open()
With Application.CommandBars("Cell").Controls.Add(msoControlButton, 19, , 3, True)
.Caption = "Копировать сумму выделенных ячеек"
.OnAction = "ЭтаКнига.SumToClipboard"
End With
End Sub
Private Sub SumToClipboard()
With CreateObject("New:")
.SetText WorksheetFunction.Sum(Selection)
.PutInClipboard
End With
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Intersect(Target, Range("a1:p20")) ' чтобы исключить "лишние" ячейки, если выделенный диапазон шире контролируемого
If Target Is Nothing Then Exit Sub
With GetObject("New:")
.SetText WorksheetFunction.Sum(Target)
.PutInClipboard
End With
End Sub
[/vba]
[p.s.]Worksheet_SelectionChange - это первое, что приходит в голову, но ИМХО, вычисление при каждом выделении - это нерациональное использование ресурсов. Лучше добавить пункт в меню по правому клику и пользоваться им при необходимости.[/p.s.]
UPD . Во вложенном файле реализация доп. пункта меню "Копировать сумму выделенных ячеек" (по правому клику на выделенных ячейках)
Можно поместить этот код в модуль книги в личную книгу макросов.
Private Sub Workbook_Open()
With Application.CommandBars("Cell").Controls.Add(msoControlButton, 19, , 3, True)
.Caption = "Копировать сумму выделенных ячеек"
.OnAction = "ЭтаКнига.SumToClipboard"
End With
End Sub
Private Sub SumToClipboard()
With CreateObject("New:")
.SetText WorksheetFunction.Sum(Selection)
.PutInClipboard
End With
End Sub
Добрый день!
Подскажите "чайнику" с глупым вопросом.
Не знаю где искать, в какую ветку можно обратиться.
Или я не правильно формулирую вопросы для поисковика, или. весь интернет перерыл, но, так и не нашел для себя ответа. ни по формулам, ни просто.
Задача такая, в зависимости от месторасположения рекламы на стенде, цена меняется, т.к. есть лакомые места, надо и продавать их лучше, а то.
я разбил стенд на ячейки и в зависимости от базовой цены - 1, стал увеличивать коэффициент, осталось выделить зону из ячеек (из 2-х, 4, 6-ти в зависимости от формата и т.д.) и посчитать сумму коэффициентов для дальнейшего расчета цены модуля.
Когда выделяешь, в строке состояния сумма прописывается, значит в уме у Excel где то она уже сидит, откуда ее можно выковырять? Как эту сумму вытащить в ячейку как промежуточный итог для дальнейших расчет?
Добрый день!
Подскажите "чайнику" с глупым вопросом.
Не знаю где искать, в какую ветку можно обратиться.
Или я не правильно формулирую вопросы для поисковика, или. весь интернет перерыл, но, так и не нашел для себя ответа. ни по формулам, ни просто.
Задача такая, в зависимости от месторасположения рекламы на стенде, цена меняется, т.к. есть лакомые места, надо и продавать их лучше, а то.
я разбил стенд на ячейки и в зависимости от базовой цены - 1, стал увеличивать коэффициент, осталось выделить зону из ячеек (из 2-х, 4, 6-ти в зависимости от формата и т.д.) и посчитать сумму коэффициентов для дальнейшего расчета цены модуля.
Когда выделяешь, в строке состояния сумма прописывается, значит в уме у Excel где то она уже сидит, откуда ее можно выковырять? Как эту сумму вытащить в ячейку как промежуточный итог для дальнейших расчет? decor
Задача такая, в зависимости от месторасположения рекламы на стенде, цена меняется, т.к. есть лакомые места, надо и продавать их лучше, а то.
я разбил стенд на ячейки и в зависимости от базовой цены - 1, стал увеличивать коэффициент, осталось выделить зону из ячеек (из 2-х, 4, 6-ти в зависимости от формата и т.д.) и посчитать сумму коэффициентов для дальнейшего расчета цены модуля.
Когда выделяешь, в строке состояния сумма прописывается, значит в уме у Excel где то она уже сидит, откуда ее можно выковырять? Как эту сумму вытащить в ячейку как промежуточный итог для дальнейших расчет? Автор - decor
Дата добавления - 07.03.2019 в 12:17
Иногда на то, чтобы придумать некоторые вещи, уходит очень много времени. Но когда их УЖЕ придумали, то постфактум они кажутся очевидными и даже банальными. Из серии "а что, так можно было?".
С самых первых версий в строке состояния внизу окна Microsoft Excel традиционно отображались итоги по выделенным ячейкам:
При желании, можно было даже щёлкнуть по этим итогам правой кнопкой мыши и выбрать в контекстном меню, какие именно функции мы хотим видеть:
И только совсем недавно в последних обновлениях Excel разработчики Microsoft добавили простую, но гениальную фишку - теперь при щелчке мышью по этим итогам они копируются в буфер!
Но что делать тем, у кого пока (или уже?) нет такой версии Excel? Тут могут помочь несложные макросы.
Копирование суммы выделенных ячеек в Буфер с помощью макроса
Откройте на вкладке Разработчик (Developer) редактор Visual Basic или воспользуйтесь для этого сочетанием клавиш Alt + F11 . Вставьте новый пустой модуль через меню Insert - Module и скопируйте туда следующий код:
Логика его работы проста:
- Сначала идёт "защита от дурака" - мы проверяем что именно выделено. Если выделены не ячейки (а, например, диаграмма), то выходим из макроса.
- Затем при помощи команды GetObject мы создаем новый объект данных, где будет храниться впоследствии наша сумма выделенных ячеек. Длинный и непонятный буквенно-цифровой код - это, на самом деле, ссылка на ветку реестра Windows, где лежит библиотека Microsoft Forms 2.0 Object Library, которая умеет создавать такие объекты. Иногда такой трюк ещё называют неявным поздним связыванием. Если его не использовать, то пришлось бы заранее делать в файле ссылку на эту библиотеку через меню Tools - References.
- Сумма выделенных ячеек считается командой WorksheetFunction.Sum(Selection), а затем полученная сумма помещается в буфер обмена командой PutInClipboard
Для удобства использования можно, конечно же, повесить этот макрос на сочетание клавиш с помощью кнопки Макросы на вкладке Разработчик (Developer - Macros) .
А если хочется видеть, что именно скопировалось после выполнения макроса, то можно включить панель Буфер обмена с помощью маленькой стрелки в правом нижнем углу соответствующей группы на Главной (Home) вкладке:
Не только сумма
Если кроме банальной суммы хочется что-то ещё, то можно воспользоваться любой из функций, которую нам предоставляет объект WorksheetFunction:
Например, там есть:
- Sum - сумма
- Average - среднее арифметическое
- Count - количество ячеек с числами
- CountA - количество заполненных ячеек
- CountBlank - количество пустых ячеек
- Min - минимальное значение
- Max - максимальное значение
- Median - медиана (центральное значение)
- . и т.д.
С учетом фильтров и скрытых строк-столбцов
Что если в выделенном диапазоне окажутся скрытые (вручную или фильтром) строки или столбцы? Чтобы не учитывать их в итогах, нужно будет чуть-чуть модифицировать наш код, добавив к объекту Selection свойство SpecialCells(xlCellTypeVisible):
В этом случае подсчет любой функции итога будет применён только к видимым ячейкам.
Если нужна живая формула
Если пофантазировать, то можно придумать сценарии, когда в буфер лучше скопировать не число (константу), а именно живую формулу, которая подсчитывает нужные нам итоги по выделенным ячейкам. В этом случае придётся склеить формулу из фрагментов, добавив к ней дополнительно удаление знаков доллара и замену запятой (которая используется как разделитель адресов нескольких выделенных диапазонов в VBA) на точку с запятой:
Суммирование с дополнительными условиями
Ну и, наконец, для совсем уже маньяков можно написать макрос, который будет суммировать не все выделенные ячейки, а только те, что удовлетворяют заданным условиям. Так, например, будет выглядеть макрос помещающий в Буфер сумму выделенных ячеек, если их значения больше 5 и при этом они залиты любым цветом:
Как легко сообразить, условия можно задать абсолютно любые - вплоть до форматов ячеек - и в любых количествах (в том числе, связывая их между собой логическими операторами or или and). Простор для фантазии большой.
Кому-как, а мне лично строка состояния бывает нужна только в 2-3 случаях:
- после фильтрации в ней отображается количество оставшихся после отбора значений
- при выделении диапазона в ней отображается сумма, среднее и количество выделенных ячеек
- в случае тяжелых файлов в ней можно увидеть прогресс по пересчету формул в книге.
Не так уж и много для строки, которая занимает почти всю ширину экрана и висит на нем постоянно. Давайте попробуем расширить этот скромный список и прикрутить к ней еще несколько полезных функций :)
Общие принципы управления строкой состояния
Управление строкой состояния с помощью Visual Basic очень несложно. Чтобы вывести в нее свой текст, можно использовать простой макрос:
После его запуска получим:
Чтобы восстановить исходное состояние строки статуса нужен будет такой же короткий "антимакрос":
В базовом варианте, как видите, все очень просто. Теперь давайте попробуем развить идею.
Адрес выделенного диапазона в строке состояния
В левом верхнем углу окна Excel в строке формул всегда можно увидеть адрес текущей ячейки. Но если выделен целый диапазон, то адреса выделения мы там, к сожалению, не увидим - отображается все та же одна единственная активная ячейка:
Для решения этой задачи можно использовать простой макрос, который будет выводить адрес выделенной области в строку состояния. Причем запускаться этот макрос должен автоматически, при любом изменении выделения на любом листе - для этого разместим его в обработчике события SelectionChange нашей книги.
Откройте редактор Visual Basic с помощью одноименной кнопки на вкладке Разработчик (Developer) или сочетания клавиш левый Alt+F11. Найдите в левом верхнем углу на панели Project свою книгу и откройте в ней двойным щелчком модуль ЭтаКнига (ThisWorkbook) :
В открывшееся окно скопируйте и вставьте следующий код макроса:
Теперь при выделении любого диапазона (в том числе и не одного!), в строке состояния будет отображаться его адрес:
Чтобы адреса нескольких выделенных с Ctrl диапазонов не сливались, можно добавить небольшое улучшение - заменить с помощью функции Replace запятую на запятую с пробелом:
Количество выделенных ячеек в строке состояния
При выделении любого диапазона в правой части строки состояния стандартно отображается количество непустых выделенных ячеек. Иногда же нужно знать количество выделенных. Эту задачу также можно решить с помощью простого макроса обработки события книги SelectionChange, как в предыдущем примере. Нужен будет макрос вида:
Этот макрос перебирает все выделенные с Ctrl области (если их несколько), сохраняет количество строк и столбцов в каждой области в переменных RowsCount и ColumnsCount и накапливает количество ячеек в переменной CellCount, которая затем и выводится в строку состояния. В работе это будет выглядеть следующим образом:
Само-собой, можно соединить этот и предыдущий макросы, чтобы выводить и адрес выделенного диапазона и количество ячеек одновременно. Понадобится изменить лишь одну предпоследнюю строку на:
Тогда картина будет совсем замечательная:
Ну, я думаю, вы поняли идею. Предлагайте в комментариях - что еще полезного можно было бы отобразить в строке состояния?
На одном из компьютеров каким-то образом работает возможность скопировать в буфер обмена сумму выделенных ячеек (при наведении внизу выскакивает соответствующая подсказка).
На другом компе такой возможности нет.
Версии office немного разные. На верхнем скрине 2016 для дома и бизнеса. На нижнем 2016 стандартный. Но я уже проверял на разных (2013, 2019) нигде эта штука не работает. Только на одном компе.
Никаких сторонних макросов, надстроек там нет.
Подскажите как это сделано!
В версии MS365 при наведении мышки на сумму в статус баре выходит такая же подсказка, как у тебя в первом скриншоте, при клике на сумму копируется
Методом научного тыка было установлено.
Чтобы это работало, нужна последняя версия Win10 21H2 и последняя версия офиса (все обновления в рамках версии имеется в виду).
В такой связке работает.
но вопрос про 2019 офис остался открытый пока. но проверю!
Dim MyData As DataObject
Set MyData = New DataObject
For Each cell In Selection
If IsNumeric(cell) Then
sums = sums + cell
повесьте макрос на кнопку. запишется в буфер сумма по нажатию на кнопку. ее можно сделать всплывающей
вот и ответ на столь сложный вопрос
Моргает экран windows 10
С такими словами обратились ко мне в прошлое воскресенье старые клиенты.
Комп вин 10 домашняя, используется для работы с Эдо и сдачи отчётов. Бух на удалёнке. Лицензия Касперского, лицензия 1с бух, сносить и восстанавливать дело хлопотное. Особенно в воскресенье. Симптомы - сразу при входе на рабочий стол компьютер зависает и начинает интенсивно моргать белым. Ничего не нажать, инет не пашет.
Запуск в безопасном режиме - все работает идеально. Проверка на целостность - без ошибок. С помощью Кавремув из безопасного режима сносим Касперского, сохранив лицензию. Копируем базу 1с. Проверяем др.веб утилитой - все кул. Запускаем комп - все работает. 5 минут, проблема возращается, пропадает интернет. Хм. Уже целенаправленно выдерживаем провод сети, моргание прекращается. Круг проблем сужается. Запускаем диспетчер задач, подключаем интернет и смотрим что начинает генерировать трафик. Попался зловред. Программа называетс я vipnet csp 4.4.2 бесплатный аналог более известной крипто про csp. Решается установкой предыдущих билдов данной программы или бэта 4.4.4.
Ошибку спровоцировало обновление антивируса Касперского. Можно не благодарить, я просто экономлю ваше время, которое можно потратить на игры)
Читайте также: