Страница 2 из 3

Re: Данные-->Проверка

Добавлено: 12 янв 2007, 17:38
pashulka
Список уникальных значений можно формировать с помощью формул, но при больших об'ёмах информации лучше пользоваться расширенным фильтром.

Re: Данные-->Проверка

Добавлено: 13 янв 2007, 00:11
ZORRO2005
pashulka прав лучше пользоваться расширенным фильтром
Но вот здесь формула для уникальных значений:
http://www.dailydoseofexcel.com/archive ... ique-data/[

Список уникальных значений

Добавлено: 13 янв 2007, 09:16
Avsha
Список уникальных значений ... лучше пользоваться расширенным фильтром
- ну тогда его получение предлагаю также автоматизировать и положить в именованный диапазон "Name_r1",
- а проверка-данные столбца A настроить уже на "Name_r1"

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

Sub Макрос_Уникальные_записи()
    Dim r1 As Range
    Set r1 = Range("D1")

'Применяем расширенный фильтр
    Range("F:F").AdvancedFilter Action:=xlFilterCopy, _
                                CopyToRange:=r1, _
                                Unique:=True

'Даем имя производному диапазону "Name_r1" для дальнейших операций
    Set r1 = Range(r1, r1.End(xlDown))
    ActiveWorkbook.Names.Add Name:="Name_r1", RefersToR1C1:=r1
    Range("Name_r1").Select
End Sub

Re: Данные-->Проверка

Добавлено: 13 янв 2007, 19:34
pashulka
Учитывая, что данные обновляются редко и использование расширенного фильтра не представляется архисложным, я предлагаю не поганить рабочую книгу макросами, в которых нет необходимости, а для того, чтобы список в об'екте Validation отображал значения столбца "F" достаточно просто использовать формулы.

Re: Данные-->Проверка

Добавлено: 21 июл 2009, 17:32
qwer66
pashulka писал(а):ZORRO2005, Вот пример решения поставленного вопроса без макросов. Единственным обязательным условием является наличие отсортированного списка с наименованиями.
Есть какой-нить способ извлечь все значения из G:G для "февраль" в случае неотсортированного списка по F:F, например, "февраль" находится в F16?

Проблема в том, что люди, которые должны вводить данные понятия не имеют, что такое сортировка, обучению не поддаются

Re: Данные-->Проверка

Добавлено: 21 июл 2009, 21:12
pashulka
Если использовать дополнительные ячейки, то можно (см. пример), правда, в случае увеличения списка, вспомогательные ячейки придётся "взять", что называется с запасом.

Если же наличие дополнительных ячеек недопустимо, то Вам, видимо, либо придётся всё-таки выдрессировать своих подопечных, дабы они сортировали сами, либо производить сортировку программно, например, после выбора нужного месяца или после изменения данных списка (здесь Вам могут пригодиться события, в частности, событие рабочего листа Worksheet_Change(ByVal Target As Excel.Range))

Re: Данные-->Проверка

Добавлено: 23 июл 2009, 15:19
qwer66
Спасибо, pashulka, за пример, вполне устраивает наличие доп.ячеек, т.к. в VBA не силен, а "их" обучить сортировке - невозможно :)

Re: Данные-->Проверка

Добавлено: 23 июл 2009, 20:02
pashulka
Qwer66, Если в дальнейшем необходимость в программной сортировке, всё-таки возникнет, то здесь) Вы можете скачать новый пример.

Re: Данные-->Проверка

Добавлено: 24 июл 2009, 15:23
Aent
pashulka, дайте пожалуйста ссылку на допустимость использованной Вами конструкции

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

if [ProtectContents] = True 
[/b]
Я понимаю, что это по смыслу

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

 [B]if ActiveSheet.ProtectContents = True[/B] 
Но не нашёл описания допустимости использования подобного синтаксиса для этого свойства нигде кроме Вашего примера.

Re: Данные-->Проверка

Добавлено: 24 июл 2009, 21:11
pashulka
Aent, Такой ссылки у меня нет, но рождённая и использованная мною конструкция вполне допустима, более того, функция [] применима и к другим процедурам (sub, function, propertie, ...), к примеру :

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

Private Sub Worksheet_Activate()
    [Worksheet_Change] [A1:C3]
End Sub

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    MsgBox Target.Address, , "Тест"
End Sub
,

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

Private Sub Worksheet_Activate()
    [PrintPreview]
End Sub
,

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

Private Sub Worksheet_Activate()
    'Hyperlinks.[Add] ...
    [Hyperlinks].[Add] [A1], ["http://forum.developing.ru/forumdisplay.php?f=" & 1+Int(Rand()*20)]
End Sub

Другое дело, что можно было обойтись и более привычным синтаксисом, а именно If Me.ProtectContents ... или даже If ProtectContents ... (кстати, именно Me, а не ActiveSheet, ибо вызвать событие можно и программно, и нет гарантии, что в момент вызова события - активным листом окажется необходимый), но в таком случае никто бы не узнал о "новых" возможностях ()