Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сумма (или другая формула) выделенных ячеек / 22 сообщений из 22, страница 1 из 1
04.06.2007, 10:08
    #34571158
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
В правом нижнем углу окна Эксель есть окно, в котором высвечивается сумма ячеек выделенного диапазона. Но нельзя ее скопировать Ctrl+С. :(
Подскажите, есть ли надстройка, которая бы позволяла копирвать эту сумму (или рез-тат других функций). Например панель в низу окна Эксель.
...
Рейтинг: 0 / 0
04.06.2007, 15:28
    #34572462
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
пишите свой обработчик Selection_Change и выводите результат в application.statusbar
...
Рейтинг: 0 / 0
04.06.2007, 15:49
    #34572551
Granata005
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Не думаю что это хороший вариант... (там не только сумма) ...

а разве нельзя найти значение используя CommandBars ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
04.07.2008, 13:54
    #35411488
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Вот такое попробовал сделать. Удобно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub Сумма_выделенных_ячеек_копирование_в_буфер()
'Время = Timer
Set mycell = Selection
    For Each mycell In mycell.Cells
    If IsNumeric(mycell) = True Then
       iSum = iSum + mycell
    End If
Next
'Подключи Microsoft Forms 2.0 Object Library
Set MyData = New DataObject
   MyData.SetText iSum
   MyData.PutInClipboard
'ВсеВремя = Timer - Время
'MsgBox ВсеВремя
End Sub
Лучше, конечно, не привзывать к кнопке или сочетанию клавиш, а запускать его при всяком выделении ячеек любой книги. Но тут мы столкнемся со следующей проблемой: при выделении большого кол-ва ячеек этот код будет сильно тормозить. Например при выделении одного столбца время работы составляет 1 сек. Соответственно при выделении всего листа время составляет 256 сек.

Т.к. мы знаем время работы макроса на одной ячейке (в конкретных условиях), мы можем проверить количество выделенных ячеек и если их будет больше чем 10 000 (в этом случае время пересчета будет составлять 1/65 356*10 000 = 0,28 с) и не включать макрос.
Вопрос: как можно быстро узнать количество выделенных не смежных ячеек?

С другой стороны, можно ли сделать такое (думаю, что это более оптимальный вариант)?:
Код работает, но по истечении 0,25 сек., не доходя до конца кода, происходит выход из процедуры
...
Рейтинг: 0 / 0
04.07.2008, 20:56
    #35412590
MX - ALEX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Сергей06Вот такое попробовал сделать. Удобно.
[src vba]Sub Сумма_выделенных_ячеек_копирование_в_буфер()
'Время = Timer
Set mycell = Selection
For Each mycell In mycell.Cells
If IsNumeric(mycell) = True Then
iSum = iSum + mycell
End If
Next



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

если под и справа от выделенного есть пустые ячейки то в них
пишем суммы по столбам и строкам
но это только если в одной из клеток есть знак ++
...
Рейтинг: 0 / 0
08.07.2008, 08:50
    #35416559
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Sub Сумма_выделенных_ячеек_копирование_в_буфер()
Dim mycell As Range
Dim Адрес As String
Dim kol As Long
Dim iSum As Double
Dim MyData As Object

Время = Timer
Set mycell = Selection
 Адрес = Selection.Address(ReferenceStyle:=xlR1C1, RowAbsolute:=True)

If InStr(Адрес, ":") =  0  Then Exit Sub ' выход если выделена одна ячейка (столбец, строка)
    For Each mycell In mycell.Cells
    kol = kol +  1 
    Всевремя = Timer - Время
    If Всевремя >  0 . 25  Then Exit Sub ' Ограничение по времени работы кода
    If kol >  65600  Then Exit Sub ' Ограничение по кол-ву ячеек участвующих в подсчете
        If IsNumeric(mycell) = True Then
           iSum = iSum + mycell
        End If
    Next
'Подключи Microsoft Forms 2.0 Object Library
Set MyData = New DataObject
   MyData.SetText iSum
   MyData.PutInClipboard
Всевремя = Timer - Время
'MsgBox Всевремя

End Sub
Вот такое получилось.
Буду пробовать работать - если не надоест то, что будет постоянно отключать скопированное.
...
Рейтинг: 0 / 0
09.07.2008, 14:01
    #35420356
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Маахонькая идейка:

В модуле объявляем переменную и рисуем функцию:

Код: plaintext
1.
2.
3.
4.
5.
Public qq As Currency

Public Function msum()
msum = qq
End Function

В событиях листа пишем:

Код: plaintext
1.
2.
3.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
qq = (Evaluate("sum(" & Target.Address & ")"))
Cells( 1 ,  1 ).Formula = "=mSUM()" 'здесь задаем ячеку, в которой нужно показывать результат вычисления (сейчас - A1)
End Sub
Получаем удовольствие ;)

Или сразу:
Код: plaintext
1.
2.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells( 1 ,  1 ) = (Evaluate("sum(" & Target.Address & ")"))
End Sub
...
Рейтинг: 0 / 0
10.07.2008, 09:22
    #35422094
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
TaranagaЗамечательно. Спасибо.
И считает очень быстро: на пересчет полностью заполненого листа уходит меньше 1 сек. И циклов нет. Единственное ограничение которое я нашел, то это невозможность складывать более 30 ячеек - аргументов.
Добавил скобки:
Код: plaintext
Cells( 1 ,  1 ) = (Evaluate("sum((" & Target.Address & "))"))
Стал считать 50 ячеек в первой строке . Наверное ему длины "формулы" не хватает.
Наверняка в Экселе 2007 такой проблемы не будет.
Еще раз спасибо.
...
Рейтинг: 0 / 0
10.07.2008, 11:40
    #35422490
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Сергей06 TaranagaЗамечательно. Спасибо.
И считает очень быстро: на пересчет полностью заполненого листа уходит меньше 1 сек. И циклов нет. Единственное ограничение которое я нашел, то это невозможность складывать более 30 ячеек - аргументов.
Добавил скобки:
Код: plaintext
Cells( 1 ,  1 ) = (Evaluate("sum((" & Target.Address & "))"))
Стал считать 50 ячеек в первой строке . Наверное ему длины "формулы" не хватает.
Наверняка в Экселе 2007 такой проблемы не будет.
Еще раз спасибо.

Используй Target.Address(0, 0) и будет помещаться больше ячеек.

В Экселе 2003 макс длина формулы - 1024 знака
В Экселе 2007 макс длина формулы - 8192 знака
...
Рейтинг: 0 / 0
10.07.2008, 12:51
    #35422697
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
KL (XL)Используй Target.Address(0, 0) и будет помещаться больше ячеек.
Ага.
Спасибо.
...
Рейтинг: 0 / 0
10.07.2008, 13:13
    #35422773
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
KL (XL) Сергей06 TaranagaЗамечательно. Спасибо.
И считает очень быстро: на пересчет полностью заполненого листа уходит меньше 1 сек. И циклов нет. Единственное ограничение которое я нашел, то это невозможность складывать более 30 ячеек - аргументов.
Добавил скобки:
Код: plaintext
Cells( 1 ,  1 ) = (Evaluate("sum((" & Target.Address & "))"))
Стал считать 50 ячеек в первой строке . Наверное ему длины "формулы" не хватает.
Наверняка в Экселе 2007 такой проблемы не будет.
Еще раз спасибо.

Используй Target.Address(0, 0) и будет помещаться больше ячеек.

В Экселе 2003 макс длина формулы - 1024 знака
В Экселе 2007 макс длина формулы - 8192 знака

Попутную информацию выложил, а главное забыл сказать: дело не в максимальной длине формулы, а в максимальной длине текстового параметра для Evaluate(). А это, к сожалению, все еще на уровне Эксель 4.0, т.е. 256 знаков.
...
Рейтинг: 0 / 0
10.07.2008, 13:48
    #35422887
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
KL (XL)Попутную информацию выложил, а главное забыл сказать: дело не в максимальной длине формулы, а в максимальной длине текстового параметра для Evaluate(). А это, к сожалению, все еще на уровне Эксель 4.0, т.е. 256 знаков.
:) Тогда можно нарисовать рекурсивную функцию, которая будет пилить диапазоны на куски чуть меньше 256 знаков и скармливать их Evaluate()...
...
Рейтинг: 0 / 0
10.07.2008, 14:08
    #35422971
Taranaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Отставить.
Не пашет.
Рубится уже на получении Target.Address(0,0) - больше 256 символов не возвращает :(
Получается будет работать только штука от ALEX:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set mycell = Selection
For Each mycell In mycell.Cells
    If IsNumeric(mycell) = True Then
        iSum = iSum + mycell
    End If
Next
Cells( 1 ,  1 ) = iSum
End Sub
...
...
Рейтинг: 0 / 0
10.07.2008, 14:33
    #35423088
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Не, это варварство! Попробуй так:

Код: plaintext
Cells( 1 , 1 ) = Application.Sum(Target)

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
11.07.2008, 07:30
    #35424422
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
KL (XL)Не, это варварство! Попробуй так:

Код: plaintext
Cells( 1 , 1 ) = Application.Sum(Target)

KL
[MVP - Microsoft Excel]
KL, спасибо, все действительно получилось!
...
Рейтинг: 0 / 0
13.07.2008, 23:25
    #35427422
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
KL (XL)Не, это варварство! Попробуй так:

Код: plaintext
Cells( 1 , 1 ) = Application.Sum(Target)

KL
[MVP - Microsoft Excel]

Кроме Суммы, будет полезным для практического применения, искать Минимальное и Максимальное число в выделении, размещая их ну скажем в ячейках A2, A3...

Код: plaintext
1.
2.
Cells( 2 , 1 ) = Application.Min(Target)
Cells( 3 , 1 ) = Application.Max(Target)

А как найти, например - 10 минимальных и 10 максимальных?
...
Рейтинг: 0 / 0
14.07.2008, 02:25
    #35427492
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Dan-KА как найти, например - 10 минимальных и 10 максимальных?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    Dim msg As String
    Dim i As Long
    With Application
        For i =  1  To .Min( 10 , .Count(Target))
            msg = msg & "Min " & i & ": " & .Small(Target, i) & Chr( 13 )
        Next i
        MsgBox msg
    End With

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    Dim msg As String
    Dim i As Long
    With Application
        For i =  1  To .Min( 10 , .Count(Target))
            msg = msg & "Max " & i & ": " & .Large(Target, i) & Chr( 13 )
        Next i
        MsgBox msg
    End With
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
29.09.2010, 12:07
    #36871892
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Добрый день!
Пользуюсь этими макросами и очень доволен.

Но сегодня возник такой вопрос:
Каким образом мне скопировать данные не в буфер обмена, а в буфер обмена офиса?
Ну, чтобы можно было скопировать до 24 значений (Офис 2003) и после вставлять выбирая в окне буфера обмена офиса...
...
Рейтинг: 0 / 0
30.09.2010, 13:40
    #36874404
Сергей06
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Меня никто не понял?
Может уточнить?
...
Рейтинг: 0 / 0
12.10.2010, 15:16
    #36894950
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Сергей06Меня никто не понял?
Может уточнить?Да нет, всё понятно, но возможно обычными средствами никак.
Во всяком случае запись макросов ничего не даёт.
Можно теоретически написать свой обработчик копирования данных в буфер, тогда там можно будет не 23 копирования делать, а сколько захочется.
Самый простой способ не менять текущий обработчик копирования, а просто сделать свой макрос, который привязать на какую-нибудь не занятую комбинацию клавиш и копировать данные в матрицу.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
08.01.2015, 14:03
    #38850152
Антон93
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
А можно наитупейший вопрос?
При выделении нужного диапозона exel перестал выводить сумму,т.к некоторые ячейки имеют текстовый формат,а изменение формата не спасает,помогает только переустановка Officа.
...
Рейтинг: 0 / 0
08.01.2015, 14:10
    #38850156
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма (или другая формула) выделенных ячеек
Антон93имеют текстовый формат,а изменение формата не спасаеткакое-то противоречие. После изменения формата они продолжают иметь текстовый формат? Может быть надо не изменение формата, а преобразование в число? Опять же, причем тут переустановка офиса? На другом компе тот же файл работает?
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Сумма (или другая формула) выделенных ячеек / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]