Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2012, 22:35   #1
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию Ошибка в функции WorksheetFunction

Здравствуйте Уважаемые программисты!
Подскажите пожалуйста, есть макрос, который должен выводить число уникальных значений в диапазоне A1:A10, но он у меня не работает. Подскажите где может быть ошибка в формуле?

Sub проба()
Dim a
a = Application.WorksheetFunction.Sum(1 / Application.WorksheetFunction.Count If([A1:A10], [A1:A10]))
MsgBox a
End Sub

Спасибо.
ольгаг вне форума Ответить с цитированием
Старый 18.09.2012, 22:46   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Ошибка в попытке разделить 1 на массив в VBA. В формуле листа работает:
Код:
Sub проба()
Dim a
a = Evaluate("SUM(1/COUNTIF(A1:A10,A1:A10))")
MsgBox a
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 19.09.2012 в 11:40.
Казанский вне форума Ответить с цитированием
Старый 19.09.2012, 07:30   #3
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

Спасибо Вам большое!
ольгаг вне форума Ответить с цитированием
Старый 19.09.2012, 09:41   #4
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

У меня появился еще один вопрос, подскажите пожалуйста, если диапазон задан не конкретно, а в виде "ActiveSheet.Range("B6", Cells(Rows.Count, "B").End(xlUp))" (т.е. диапазон начинающийся от ячейки B6 и до последней заполненной ячейки в столбце B), как исправить мой макрос:

Sub проба()
Dim a,b
Set b = ActiveSheet.Range("B6", Cells(Rows.Count, "B").End(xlUp))
a = Evaluate("SUM(1/COUNTIF(b,b))")
MsgBox a
End Sub

Спасибо.
ольгаг вне форума Ответить с цитированием
Старый 19.09.2012, 10:16   #5
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Код:
a = Evaluate("SUM(1/COUNTIF(" & b.Address & "))")
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 19.09.2012, 10:34   #6
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

Спасибо большое! Все получилось. Вот итоговый код:
Sub проба()
Dim a, b
Set b = ActiveSheet.Range("B6", Cells(Rows.Count, "B").End(xlUp))
a = Evaluate("SUM(1/COUNTIF(" & b.Address & "," & b.Address & "))")
MsgBox a
End Sub
ольгаг вне форума Ответить с цитированием
Старый 19.09.2012, 11:49   #7
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Как выяснили недавно, метод Evaluate чувствителен к стилю ссылок. Т.е. если установить стиль ссылок R1C1, то этот макрос не сработает. Следует формировать адрес с учетом стиля ссылок:
Код:
Sub проба()
Dim a, b
b = Range("B6", Cells(Rows.Count, "B").End(xlUp)).Address(, , Application.ReferenceStyle)
a = Evaluate("SUM(1/COUNTIF(" & b & "," & b & "))")
MsgBox a
End Sub
Если адрес встречается в формуле не один раз, для удобства и наглядности можно делать так:
Код:
a = Evaluate(Replace("SUM(1/COUNTIF(~,~))", "~", b))
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 19.09.2012, 12:56   #8
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию

Спасибо большое за ценную информацию!
ольгаг вне форума Ответить с цитированием
Старый 20.09.2012, 12:50   #9
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Как выяснили недавно, метод Evaluate чувствителен к стилю ссылок. Т.е. если установить стиль ссылок R1C1, то этот макрос не сработает. Следует формировать адрес с учетом стиля ссылок:
Код:
b = Range("B6", Cells(Rows.Count, "B").End(xlUp)).Address(, , Application.ReferenceStyle)
Алексей, да, про этот момент я забыл. Надо не забывать учитывать в будущем.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WorksheetFunction.AveDev Alla_s Microsoft Office Excel 1 25.05.2012 20:15
Ошибка в функции. stas45rus Помощь студентам 0 13.01.2012 14:39
ошибка в функции Katus Общие вопросы Delphi 10 10.12.2011 05:43
Ошибка при использовании WorksheetFunction.VLookup imagenable@mail.ru Microsoft Office Excel 2 26.02.2010 12:04
Проблема Application.WorksheetFunction.Match nemoomen Microsoft Office Excel 1 01.04.2009 03:12