Способ считать количество символов в ячейке Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Avsha
Сообщения: 664
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

06 окт 2005, 10:08

Хотелось бы иметь быстрый способ определения количества символов в ячейке,
подобный тому как определяется сумма, среднее и т.д. для выбранного диапазона в статусной строке внизу справа.

Например, выбрал ячейку, нажал кнопку, выдало сколько символов в текстовой строке ячейки.
Есть ли для этого какой стандартный механизм или функция в Excel?

Вариант с функцией ДЛСТР - понятен, но несколько долговат.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

07 окт 2005, 22:28

Стандартного нет.

Только макрос

Код: Выделить всё

sub macro1()
   on error resume next
   msgbox len(activecell)
end sub
с горячей клавишей на нем
Avsha
Сообщения: 664
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

08 окт 2005, 15:31

Отличное решение !!!
полностью меня устраивает.
вытащил кнопку на панель управления, привязал ваш макрос, но ...
куда поместить макрос чтобы он работал для разных книг Excel,
а то так он выполняется только для одной книги Excel, где был создан?
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

08 окт 2005, 16:57

А как насчёт рабочей книги PERSONAL.XLS ...
Avsha
Сообщения: 664
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

09 окт 2005, 08:12

Спасибо, pashulka,
Ваш совет как всегда приводит к успеху.

Что у меня получилось:
1. Записываем макрос Сервис\Макрос\Начать Запись...\
При этом выбираем место сохранения макроса "Личная книга макросов"

2. В результате в среде Excel появляется скрытая книга PERSONAL.XLS,
доступная из всех других книг, с которыми работает пользователь.
Она кстати сохраняется в пути C:\Documents and Settings\User_01\Application Data\Microsoft\Excel\XLSTART
и очевидно может переноситься от одного пользователя к другому (или на другой ПК) простым копированием.

3. Теперь добавляем наш макрос в модуль PERSONAL.XLS
sub macro1()
on error resume next
msgbox len(activecell)
end sub

4. В конце создаем кнопку на новой панели инструментов Настраиваемая1, и привязываем кнопку к макросу PERSONAL.XLS!macro1

Не нашел только в справке ни слова про личную книгу макросов PERSONAL.XLS, где можно почитать?
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

09 окт 2005, 15:48

Avsha, Могу предложить ещё один вариант.

Найдите рабочую книгу PERSONAL.XLS, перейдите в модуль ThisWorkbook (ЭтаКнига) и скопируйте туда этот код :

Код: Выделить всё

Dim Cls As New Class1

Private Sub Workbook_Open()
With Application.CommandBars("Cell").Controls.Add _
     (Type:=msoControlEdit, Temporary:=True)
     .BeginGroup = True
     .Style = msoButtonIcon
     .Caption = "Кол-во символов"
End With
Set Cls.xlApp = Application
End Sub
Затем создайте модуль класса - Class1 и скопируйте :

Код: Выделить всё

Public WithEvents xlApp As Application

Private Sub xlApp_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Excel.Range, Cancel As Boolean)
iCount = Evaluate("Sum(Len(" & Target.Address & "))")

Application.CommandBars("Cell").Controls("Кол-во символов").Text = _
IIf(IsError(iCount), "Ошибка", iCount)
End Sub
Теперь, при следующем запуске MS Excel (если Вы конечно сохранили изменения в личной книге макросов) Вам будет достаточно выделить ячейку или диапазон ячеек и кликнуть правой кнопкой мышки.

Примечание : На самом деле можно использовать ~ любую рабочую книгу. Для этого её достаточно расположить в стандартной или альтернативной папке автозагрузки.

Стандартной является папка XLSTART, которая в MS Excel 97 располагается, как правило - \Program Files\Microsoft Office\Office\XLStart
Альтернативную папку автозагрузки можно выбрать самому (меню Сервис - команда Параметры - закладка Общие - поле Каталог автозагрузки )
Также можно использовать надстройки (.xla)

При желании, эту рабочую книгу (.xls) можно сделать скрытой (меню Окно - команда Скрыть )

P.S. Что касается литературы, то это вопрос не ко мне ...
Avsha
Сообщения: 664
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

10 окт 2005, 08:46

pashulka,
использование контекстного меню - ну это вообще высший пилотаж,
спасибо, мне понравилось ваше решение.

А главное, какая открывается дорога по предоставлению других информационных функций.
Avsha
Сообщения: 664
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

10 окт 2005, 09:41

Наткнулся на хорошие ресурсы по VBA, делюсь:

http://www.microsoft.ru/offext/developers/
http://www.vbstreets.ru/VBA/default.aspx
s2dent
Сообщения: 2
Зарегистрирован: 20 окт 2006, 15:56
Контактная информация:

20 окт 2006, 16:18

А еслиБ Вы сказали, как сделать так, чтоб колличество символов считалось в ячейке с помощью формулы - Вам бы цены не было!

Т.е. у меня есть название "Яблочный сок 0,2" - в нём содержится 16символов (включая пробелы). Есть ли формула, которая подсчитает это колличество автоматом в соседней ячейке?
Pavel55
Сообщения: 405
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

20 окт 2006, 17:36

=ДЛСТР(ссылка на ячейку)
Ответить