Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Дробное число в автофильтре  [new]
Valll
Member

Откуда: Зеленоград
Сообщений: 356
Здравствуйте.
Имеется автофильтр. Одна из его колонок - числа, в том числе и дробные.
В качестве критерия, для фильтрации по этой колонке, определяю в макросе ячейку на листе. Заношу в неё дробное число.
Автофильтр не находит значения... Хотя они есть.

Помогите с решением.

К сообщению приложен файл (Пример автофильтра.xlsm - 17Kb) cкачать
28 мар 21, 19:48    [22301163]     Ответить | Цитировать Сообщить модератору
 Re: Дробное число в автофильтре  [new]
Valll
Member

Откуда: Зеленоград
Сообщений: 356
Я нашёл решение такое:

Kriterii = ActiveSheet.Range("B4")

Kriterii = Replace(Kriterii, ".", ",", , , 1) ' Вот решение! замена точки на запятую

ActiveSheet.Range("$A$6:$B$20").AutoFilter Field:=2, Criteria1:=Kriterii

Интересно, что точка заменяется на запятую .... хотя реально число с запятой.
28 мар 21, 23:03    [22301210]     Ответить | Цитировать Сообщить модератору
 Re: Дробное число в автофильтре  [new]
Valll
Member

Откуда: Зеленоград
Сообщений: 356
Хм... в другом месте работает плохо... число 0,8 не воспринимает (ноль целых)...

Если есть у кого варианты, поделитесь пожалуйста.
28 мар 21, 23:23    [22301216]     Ответить | Цитировать Сообщить модератору
 Re: Дробное число в автофильтре  [new]
booby
Member

Откуда:
Сообщений: 2539
Valll,

попробуйте формировать критерий так:

    
    If Application.UseSystemSeparators Then
      Kriterii = "=" & LTrim$(CStr(ActiveSheet.Range("B4")))
    Else
      Kriterii = "=" & LTrim$(Str(ActiveSheet.Range("B4")))
      Kriterii = Replace(Kriterii, ".", Application.DecimalSeparator)
    End If
 
29 мар 21, 00:41    [22301231]     Ответить | Цитировать Сообщить модератору
 Re: Дробное число в автофильтре  [new]
Valll
Member

Откуда: Зеленоград
Сообщений: 356
Проверил вариант booby - работает точно так же как мой вариант. Я вроде разобрался в чём проблема.

Значит так: и критерий, и искомое число в списке должны иметь формат "Общий". Если оба или хотя бы один из этих аргументов находится в ячейке с форматом "Число" - искать не будет! Это правило и для моего варианта, и для варианта booby.

Резюме. Автофильтр EXCEL с дробными числами не работает.

booby, спасибо за помощь!

Сообщение было отредактировано: 29 мар 21, 08:15
29 мар 21, 08:14    [22301266]     Ответить | Цитировать Сообщить модератору
 Re: Дробное число в автофильтре  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1990
Valll
Автофильтр EXCEL с дробными числами не работает
вот Вы загнули-то :) Работает он. Просто в данном случае надо учитывать формат ячеек. Конкретно для Вашего примера:
Sub Макрос1()
'
' Макрос1 Макрос
'
    Kriterii = ActiveSheet.Range("B4").Text ' дробное число
    ActiveSheet.Range("$A$6:$B$20").AutoFilter Field:=2, Criteria1:=Kriterii
End Sub
29 мар 21, 08:24    [22301269]     Ответить | Цитировать Сообщить модератору
 Re: Дробное число в автофильтре  [new]
Valll
Member

Откуда: Зеленоград
Сообщений: 356
The_Prist , у меня слов нет выразить свою радость! Спасибо вам большое!
29 мар 21, 08:35    [22301272]     Ответить | Цитировать Сообщить модератору
 Re: Дробное число в автофильтре  [new]
Valll
Member

Откуда: Зеленоград
Сообщений: 356
The_Prist , проверил ваш вариант. Он работает, если и критерий и искомое значение имеют одинаковый формат ячеек. Наверное это правильно. Спасибо ещё раз.
29 мар 21, 08:49    [22301274]     Ответить | Цитировать Сообщить модератору
 Re: Дробное число в автофильтре  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1990
Valll
и критерий и искомое значение имеют одинаковый формат ячеек
Да, я так и написал. К сожалению, это боль автофильтра. По идее, можно и так извернуться:
Sub Макрос1()
'
' Макрос1 Макрос
    Kriterii = Format(ActiveSheet.Range("B4").Value, IIf(Range("B7").NumberFormat = "General", "", Range("B7").NumberFormat)) ' дробное число
    ActiveSheet.Range("$A$6:$B$20").AutoFilter Field:=2, Criteria1:=Kriterii
End Sub

сработает, если во всех ячейках фильтруемого столбца установлен одинаковый формат.
29 мар 21, 09:21    [22301280]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить