Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Как изменить формулу с функцией СУММЕСЛИ для учета регистра
 
Исходную формулу я нашел на просторах сети, и т.к. я не специалист, не знаю, почему ее написали именно такой. Но она работала без ошибок до тех пор, пока в таблицу не стали добавлять артикулы, имеющие одинаковые названия, при этом отличающиеся регистром. Здесь она стала меня подводить, собственно говоря, почему я и попросил помощи на этом форуме. Вы правы, если убрать лишние скобки и прочее, то все также хорошо работает. И мне удалось подкорректировать на основании примера из вашего последнего файла свою формулу, теперь она у меня работает и с ссылками тоже.

Спасибо огромное!!!

Тему можно считать закрытой.
Как изменить формулу с функцией СУММЕСЛИ для учета регистра
 
Цитата
написал:
У меня считает правильно, вот небольшой пример вместо вас нарисовал.
Спасибо большое! Я попробовал применить к своей формуле все равно выдает 0. Но когда в своей формуле убрал ссылки (т.е. сделал как у вас), все заработало. Видимо СОВПАД не хочет с ДВССЫЛ работать как надо.
У меня Эксель LTSC 2021 версия 2108.
Как изменить формулу с функцией СУММЕСЛИ для учета регистра
 
К сожалению, формула выдает ошибку - вместо числа показывает 0. Может ошибка где-то в пунктуации?
Как изменить формулу с функцией СУММЕСЛИ для учета регистра
 
Добрый день!

Знающие люди, подскажите пожалуйста, как правильно дополнить формулу, чтобы в ней различался регистр? Сейчас, если названия артикулов в таблице называются условно а1 и А1, то формула выдает некорректное значение.

Вот формула:
=ЕСЛИОШИБКА(СУММПРОИЗВ(СУММЕСЛИ(ДВССЫЛ({"sales25"}&"!A2:A1048576");L1313;ДВССЫЛ({"sales25"}&"!B2:B1048576"))); 0)

я так понимаю, что в нее где-то нужно добавить функцию СОВПАД, но как ее добавить, я не знаю, пробовал наугад - формула конечно выдает ошибку. В инете тоже ничего не нашел похожего. Если кто знает, помогите, пожалуйста.
Объединение 3-х однотипных макросов в один
 
Юрий М, Спасибо, буду знать!
Объединение 3-х однотипных макросов в один
 
Все_просто, да, я тоже за простоту!) просто я не рассчитывал, что если около 1000 строк наполнить картинками (пиктограммами) макросы начнут так сильно тормозить. Это убивает всю идею каталога. Просто когда картинок было мало и я заморачивался с макросами, все работало очень быстро...

PS. файл добавил
Изменено: vlad1211 - 10.05.2018 14:51:59
Объединение 3-х однотипных макросов в один
 
Nordheim, вроде получилось!
Объединение 3-х однотипных макросов в один
 
Nordheim, не влезает мой пример в ограничение по вложению на сайте в 100кб :cry:  как раз из-за картинок.. даже если почти все удалить.. можно Вам по почте тогда отправить?
Объединение 3-х однотипных макросов в один
 
Nordheim, Большое спасибо!! Код работает без ошибок. Но вот на скорость не повлияло :cry:  я думал, если картинки будут обрабатываться макросом не по каждой отдельной ячейке, а по всей строке целиком (но в пределах своих столбцов) т.е. по 3 картинки за раз, то и скорость будет в 3 раза выше.
Объединение 3-х однотипных макросов в один
 
Добрый день!

В книге есть несколько столбцов с картинками. Картинки в одном столбце (изображение продукции) не нужно трогать, а в 3-х других (это пиктограммы) - картинкам необходимо назначать размеры и выравнивать по вертикали.

В данный момент для этих целей используются 3 однотипных макроса (которые отличаются друг от друга только указанным номером столбца - 1,6,7), каждый из которых выравнивает по вертикали и назначает размеры картинкам в своем столбце. (это сделано чтобы избежать деформации пиктограмм по причине изменения высоты строк)

Поскольку макросы выравнивают картинки по очереди, сначала один макрос - в своем столбце, потом другой.. т.д. за цикл то на обработку таблицы из 1000 строк уходит больше 5 минут.

Подскажите пожалуйста, как объединить 3 макроса в один, чтобы выравнивались картинки только в столбцах с пиктограммами, возможно это ускорит обработку.

Ниже макросы:
Код
Sub Иконки()
      Dim Shp As Shape
      Dim Picture As Object
      Dim lRow As Long
For lRow = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Rows(lRow).EntireRow.Hidden = False Then
    Dim ra As Range: Set ra = Cells(lRow, 1)
    For Each Shp In ShapesInRange(ra)
        With Shp
         If .Type = msoPicture Then
.Top = .TopLeftCell.Top + (.TopLeftCell.Height - .Height) / 2
.LockAspectRatio = msoFalse
.Height = 18
.Width = 18
.Top = .TopLeftCell.Top + (.TopLeftCell.Height - .Height) / 2
End If
End With
    Next Shp
End If
Next lRow
    End Sub
Код
Sub Опции()
      Dim Shp As Shape
      Dim Picture As Object
      Dim lRow As Long
For lRow = 2 To Cells(Rows.Count, 7).End(xlUp).Row
If Rows(lRow).EntireRow.Hidden = False Then
    Dim ra As Range: Set ra = Cells(lRow, 7)
    For Each Shp In ShapesInRange(ra)
        With Shp
         If .Type = msoPicture Then
.Top = .TopLeftCell.Top + (.TopLeftCell.Height - .Height) / 2
.LockAspectRatio = msoFalse
.Height = 18
.Width = 18
.Top = .TopLeftCell.Top + (.TopLeftCell.Height - .Height) / 2
            End If
            End With
    Next Shp
End If
Next lRow
    End Sub
Код
Sub Размеры()
      Dim Shp As Shape
      Dim Picture As Object
      Dim lRow As Long
For lRow = 2 To Cells(Rows.Count, 6).End(xlUp).Row
If Rows(lRow).EntireRow.Hidden = False Then
    Dim ra As Range: Set ra = Cells(lRow, 6)
    For Each Shp In ShapesInRange(ra)
        With Shp
         If .Type = msoPicture Then
.Top = .TopLeftCell.Top + (.TopLeftCell.Height - .Height) / 2
.LockAspectRatio = msoFalse
.Height = 18
.Width = 18
.Top = .TopLeftCell.Top + (.TopLeftCell.Height - .Height) / 2
            End If
            End With
    Next Shp
End If
Next lRow
    End Sub
Изменено: vlad1211 - 10.05.2018 12:15:00
Заполнение ComboBox(а) значениями из нескольких столбцов одного листа
 
Irregular Expression, Большое Вам спасибо!! ошибка исчезла, макросы с фильтрами работают как надо!
Заполнение ComboBox(а) значениями из нескольких столбцов одного листа
 
StoTisteg, я бы с удовольствием, но не знаю, я не программист :sceptic:  можете какой-нибудь пример кода привести? я бы попытался его под себя адаптировать.
Заполнение ComboBox(а) значениями из нескольких столбцов одного листа
 
StoTisteg, я это примерно так себе и представлял, но только не знаю, как это исправить  :cry:  
Заполнение ComboBox(а) значениями из нескольких столбцов одного листа
 
Nordheim, ничего заполнять не нужно. Выпадающий список просто должен фильтровать информацию, т.к. книга по сути представляет собой электронный каталог продукции. Вместо того, чтобы долго тыкать по автофильтрам я хочу сделать быстрые ссылки с уже преднастроенными фильтрами, и поместить их в свой выпадающий список.
Запуск макросов из выпадающего списка выдает ошибку 1004., ошибка 1004 "Метод AutoFilter" из класса Range завершен неверно
 
Nordheim, Спасибо! Тему создал. Но не уверен, что правильней - мой вариант "допилить" или ваш. В новой теме выложил исходник каталога, т.к. там многое уже сделано в VBA и успешно работает. Хочется, сделав одно, не сломать другое :)
Заполнение ComboBox(а) значениями из нескольких столбцов одного листа
 
Добрый день!
Пытаюсь заставить ComboBox (Быстрые ссылки) без ошибок фильтровать таблицу, используя для этого отдельные макросы. Фильтрация происходит, НО!

1) при переключении кнопки краткий/полный просмотр (верх.левый угол таблицы)  вылезает ошибка - "ошибка 1004 "Метод AutoFilter" из класса Range завершен неверно"
2)  нельзя снять автофильтр (он все время во включенном положении)

В тестовом режиме к выпадающему списку прикручен только один макрос - самая нижняя строка - Новинки 2018

По идее пользователь должен выбрать из списка быструю ссылку - происходит фильтрация по значению из именованного списка "LINKS". После этого макрос, вызываемый выпадающим списком должен остановиться.

Сейчас такое ощущение, что он выполняется постоянно, что вызывает ошибку в работе других кнопок.

Выкладываю исходный файл. Надеюсь, что кто-нибудь подскажет, как исправить эту ошибку.
Запуск макросов из выпадающего списка выдает ошибку 1004., ошибка 1004 "Метод AutoFilter" из класса Range завершен неверно
 
Nordheim, а как лучше - новую тему создать или все же сюда выложить? Просто если новую тему - я не знаю, что написать в заголовке.
Запуск макросов из выпадающего списка выдает ошибку 1004., ошибка 1004 "Метод AutoFilter" из класса Range завершен неверно
 
Nordheim, Большое спасибо! Так действительно все работает!

А что если в Вашем коде..
Код
Private Sub Worksheet_Activate()
    With Me.ComboBox2
        .List = Лист2.UsedRange.Value
        .Value = .List(0)
    End With
End Sub
.Value НЕ РАВНО .List(0)?

Другими словами, в выпадающем списке должны быть другие текстовые названия, и фильтрация должна осуществляться по значениям из двух или трех столбцов?

Как еще добавить фильтрацию по дополнительным столбцам?
Запуск макросов из выпадающего списка выдает ошибку 1004., ошибка 1004 "Метод AutoFilter" из класса Range завершен неверно
 
Уважаемые коллеги, подскажите пожалуйста, как избавиться от ошибки 1004 "Метод AutoFilter" из класса Range завершен неверно.

На листе имеется выпадающий список с макросами. Каждый макрос в списке запускает автофильтр.

По идее, при выборе макроса из списка - он должен отработать и остановиться. Сейчас же - во-первых, выскакивает эта ошибка (не понимаю, почему? ведь это обычный автофильтр), во-вторых, невозможно снять автофильтр (тоже не понятно - почему?) Такое ощущение, что макрос с фильтром продолжает выполняться...

Помогите пожалуйста разобраться.

Файл с примером во вложении.
Не применять ShapesInRange, если строки с рисунками скрыты
 
_Igor_61, Аа.. я понял, в чем была моя ошибка. Я добавил картинки на пустые ячейки, поэтому Ваш код выдавал ошибку. Еще раз большое спасибо!!
Не применять ShapesInRange, если строки с рисунками скрыты
 
_Igor_61, Скажите пожалуйста, а что нужно изменить в Вашем коде, если мне нужно применить его к большему числу ячеек с картинками? и например не 3 столбец, а 4-й? пробовал менять цифры в этих строках
Код
For lRow = 2 To Cells(Rows.Count, 3).End(xlUp).Row
If Rows(lRow).EntireRow.Hidden = False Then
    Dim ra As Range: Set ra = Cells(lRow, 3)


но либо выдает ошибку, либо ничего не происходит.
Не применять ShapesInRange, если строки с рисунками скрыты
 
_Igor_61, Большое Вам спасибо! А я то думал, что редактировать нужно не макрос кнопки, выравнивающей картинки , а саму функцию ShapesInRange, к которому он обращася. Думал, что надо как-то в ней прописывать условие применения автофильтра.
Изменено: vlad1211 - 03.05.2018 22:52:31
Не применять ShapesInRange, если строки с рисунками скрыты
 
Добрый день! Пример приложил. Нажатие на кнопку приводит к выравниванию картинок в ячейках по высоте и устанавливает им одинаковые размеры. Но если к колонке с картинками применить автофильтр (по любому числу из колонки), то при нажатии кнопки картинки "съезжают"  друг на друга или непропорционально вытягиваются. Я бы хотел, чтобы картинки даже при включенном или выключенном автофильтре всегда оставались в границах своих ячеек. Помогите пожалуйста исправить этот недостаток кода.
Изменено: vlad1211 - 03.05.2018 15:28:17
Не применять ShapesInRange, если строки с рисунками скрыты
 
Добрый день! На листе имеется колонка с картинками (у всех картинок в свойствах - перемещать и изменять объект вместе с ячейками). После включения автофильтра, функция ShapesInRange все равно применяется ко всем картинкам в колонке, как будто фильтр выключен. Подскажите пожалуйста новичку, как модифицировать этот код, чтобы функция ShapesInRange корректно работала с включенным или выключенным фильтром. К этой функции должен обращаться макрос, который выравнивает картинки по центру ячейки. Спасибо за внимание!
Код
Function ShapesInRange(ByRef ra As Range) As ShapeRange
    On Error Resume Next: Dim a(), i&, n&, Shps As Shapes
    Set Shps = ra.Worksheet.Shapes
    If Shps.Count = 0 Then Exit Function
    ReDim a(1 To Shps.Count)
 
    For i = 1 To Shps.Count
        With Shps.Item(i)
            If .Type = msoPicture Or .Type = msoLinkedPicture Then
                If Not Intersect(ra.Worksheet.Range(.TopLeftCell, .BottomRightCell), ra) Is Nothing Then
                    n = n + 1: a(n) = i
                End If
            End If
        End With
    Next
    If n Then ReDim Preserve a(1 To n): Set ShapesInRange = Shps.Range(a)
End Function
Страницы: 1
Наверх