В одной кнопке - группировка и разгруппировка столбцов
Код
Sub ToggleGroupColumns()
Dim ws As Worksheet
Set ws = ActiveSheet
On Error Resume Next
Dim groupLevel As Integer
groupLevel = ws.Columns("I:L").OutlineLevel
On Error GoTo 0
If groupLevel > 1 Then
ws.Columns("I:L").Ungroup
Columns("H:M").Select
Selection.EntireColumn.Hidden = False
Range("D11").Select
Else
ws.Columns("I:L").Group
ws.Outline.ShowLevels ColumnLevels:=1
End If
End Sub
Option Explicit
Private Function GetValue(path As String, file As String, sheet As String, ref As String) As Variant
Dim arg As String
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "Файл не найден"
Exit Function
End If
arg = "'" & path & "[" & file & "]" & sheet & "'!" & Range(ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function
Sub Найти_документы()
Const AddrresCell = 4
Dim p As String 'Директория файлов
Dim f As String 'Имя файла
Dim s As String 'Имя листа
Dim a As String 'Адрес ячейки
Dim Rng As Range, Sht As Worksheet
Dim i&, g&, h&, y&
Dim PName As String, FName As String, FQuant As Long, N As Long, d As String, WB As Workbook, firstAddress As String
Dim SkolkoNashol As Long
Dim SumFlag As Long
Dim TWB As Workbook
Set TWB = ThisWorkbook
' Отключаем обновление экрана и автосохранение
Application.ScreenUpdating = False
Application.EnableEvents = False
'Вызываем диалоговое окно для определения папки с файлами
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Application.DefaultFilePath & "\"
.Title = "Укажите папку, в которой находятся файлы"
.Show
If .SelectedItems.Count = 0 Then
MsgBox "Отменено" 'Прекращение работы
Exit Sub
Else
PName = .SelectedItems(1) 'Получение пути
End If
End With
'Считаем количество файлов в папке для создания массива названий файлов
FName = Dir(PName & "\*.xls") 'Получаем имя первого файла
FQuant = 0 'обнуляем кол-во файлов
' Цикл подсчета кол-ва файлов
Do Until FName = "" 'Пока имя файла не станет пустым
FQuant = FQuant + 1 'Счетчик кол-ва
FName = Dir 'Получение следующего имени файла
Loop
'Заполняем массив названиями файлов
ReDim arr(1 To FQuant) As String 'Задание размерности массива на основе кол-ва файлов
FName = Dir(PName & "\*.xls") 'Получаем имя первого файла
N = 0 'обнуляем счетчик
' Цикл заполнения массива именами файлов
Do Until FName = "" 'Пока имя файла не станет пустым
N = N + 1 'Счетчик размерности массива
arr(N) = FName 'Заполнение ячейки массива
FName = Dir 'Получение следующего имени файла
Loop
N = 0
'Цикл перебора файлов
d = InputBox("Что ищем?")
If IsNull(d) Then Exit Sub
y = 1
For N = 1 To FQuant
SumFlag = 0
p = PName & "\" 'Директория файлов
f = arr(N) 'получаем имя файла
s = Left(arr(N), Len(arr(N)) - 5) 'получаем имя листа
Set WB = Workbooks.Open(p & f)
For Each Sht In WB.Sheets 'цикл по всем листам в файле
' Оптимизация настроек страницы
With Sht.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.393700787401575)
.RightMargin = Application.InchesToPoints(0.393700787401575)
.TopMargin = Application.InchesToPoints(0.393700787401575)
.BottomMargin = Application.InchesToPoints(0.393700787401575)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlPortrait
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlOverThenDown
.BlackAndWhite = False
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = False
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
End With
Next Sht
WB.Close SaveChanges:=False
Next N
' Включаем обновление экрана и автосохранение обратно
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Павел \Ʌ/, подскажите еще пожалуйста, не могу разобрать формулу, нужно добавить также на проверку столбец D если сумма у которых не (пусто) и не "Админ П" равна 0, а у (пусто) и "Админ П" то СУММПРОИЗВ(СЧЁТЕСЛИ(B2;"*"&J$1:J$5&"*")); СУММПРОИЗВ(I$1:I$5*СЧЁТЕСЛИ(B2;"*"&J$1:J$5&"*")), т.е. ищем здесь I1:J5
Не могу разобраться как сюда добавить формулу =ЕСЛИ(ЕНД(K2)=ИСТИНА;3;""), т.е. когда #Н/Д получаю при формуле ПРОСМОТР то проставить 3. Пока получилась такая формула:
Прошу помочь с формулой, имеется таблица: Отдел, участок, итог и признак распределения. Необходимо проставить формулой признак распределения по условиям:
1) по уникальному отделу смотрим его участок если есть в ячейке (пусто) или "Админ П" и если только один участок с такими наименованиями то смотрим наименование отдела и если есть частичное совпадение с J1:J5 то ставим его значение из I1:I5 если нет то ставим 2;
2) Если Внутри уникальных отделов по участкам более двух ячеек и есть "(пусто)" или "Админ П" то ставим 3;
Павел \Ʌ/, Спасибо, работает также корректно как и формула выше.
Цитата
Serg091 написал: Простое решение для моего варианта - это расположить категорию с тегом "творожный сыр" ниже по списку чем сыр.
А можно ли как то рядом еще вывести и другие отрасли? допустим если уже встречалась данная отрасль, то вывести другую отрасль в которую также может входить продукт
Serg091, Супер, спасибо большое! Прошу прощения, а можно еще попросить добавить условие, если имеется полное совпадение вывести по полному совпадению, например:
Здесь присваивается отрасль Кисломолочные продукты т.к. в них тег творожный Пищевая добавка творожный сыр - Кисломолочные продукты
Если добавить тег в Сыры - "творожный сыр", чтобы вывел его т.к. совпадение большее, но это скорее всего уже другая задача. Спасибо.
Добрый день. Прошу помочь с формулой или макросом, который сможет искать в наименовании (фразе) ключевые слова и присвоит отрасль по ним. Имеется две таблицы в excel, первая таблица это продукты и их возможная отрасль Вторая таблица это справочник в котором имеются Отрасли и ключевые слова (теги) которые могут относится к данной отрасли.
Может кто помочь с формулой, имеется формула которая работает корректно: =UNIQUE(FILTER($B$2:$B$19; $A$2:$A$19=$D$2)) - но данная формула работает в новых excel, может кто помочь может есть какой то аналог данной формулы для excel 2016 года.
Формулой необходимо вытащить уникальные данные со столбца B по заданному времени D2 по столбцу A. Приложил файл в столбце E должны быть отображены уникальные данные.
Прошу помочь с формулой для вывода доли по заданному времени и по выведенным уникальным данным. С помощью формулы вывел по заданному времени уникальные данные по автобусам, но не получается вывести долю загруженности по времени по выведенным уникальным автобусам. Прикрепил файл в качестве примера.
Павел \Ʌ/ написал: lost.eu , для поиска "схожих" нужны конкретные или критерий или искомое. В PQ есть возможность нечёткого поиска с задаваемым процентом допускаВозможно что-то близкое и формулами, но это не будет простым решением, да и определиться надо что считать допустимым. Потом в вашей версии экселя есть ограничения на вложенность функций... (без диспетчера имен не обойдется) Вобщем возни больше чем оно того стоит
Павел \Ʌ/, и так как Вы сделали отлично, почему именно по наименованию т.к. товары со склада могут быть не всегда в той самой группе товаров, может быть такой товар с лучшей фин доходностью у который группа товаров отличается от искомой .
Подскажите пожалуйста, как можно вывести сам лучший товар и его Фин. Доходность при совпадении/частичном наименования товара. Наименование товара может быть разным, например: имеется две таблицы одна то, что продал менеджер и вторая таблица со всеми товарами, необходимо чтобы была рекомендация менеджеру такая чтобы отображался список тех товаров у которых больше финансовой доходности по схожести товара. (наименование одного товара может быть разной)
Проранжировать группу и проставить буквы A, B, C по количеству внутри группы/3, Рейтинг продаж внутри товарной группы, проранжировать данные по нескольким условиям и проставить буквенные значения A,B,C
Павел \Ʌ/ написал: Тогда немного "мудрствуя" ) { }=ВПР(ПРОЦЕНТРАНГ(ЕСЛИ(A2=A$2:A$31;D$2:D$31);D2)*3-МИН(СЧЁТ(1/ЧАСТОТА(ЕСЛИ(A$2:A$31=A2;D$2:D$31);D$2:D$31));3)+3;{0;"C":1;"B":2;"A"};2)
Проранжировать группу и проставить буквы A, B, C по количеству внутри группы/3, Рейтинг продаж внутри товарной группы, проранжировать данные по нескольким условиям и проставить буквенные значения A,B,C
Павел \Ʌ/ написал: Ну раз "должно быть", то не мудрствуя:=ПОДСТАВИТЬ(ВПР(ПРОЦЕНТРАНГ(ЕСЛИ(A2=A$2:A$31;D$2:D$31);D2)*3;{0;"C":1;"B":2;"A"};2);"C";ЕСЛИ(СЧЁТЕСЛИ(A$2:A$31;A2)=2;"B";"C"))
Супер, спасибо большое.
Есть маленькое примечание: Допустим 3 строки и количество продаж из них 2 одинаковых, то выдает чуть некорректно, прилагаю пример:
Проранжировать группу и проставить буквы A, B, C по количеству внутри группы/3, Рейтинг продаж внутри товарной группы, проранжировать данные по нескольким условиям и проставить буквенные значения A,B,C
Павел \Ʌ/ написал: В таком случае можно и не сортировать:массивный ввод=ВПР(ПРОЦЕНТРАНГ(ЕСЛИ(A2=A$2:A$31;D$2:D$31);D2)*3;{0;"C":1;"B":2;"A"};2)(пограничные значения не обрабатывал)
Работает, но когда в группе два наименования то проставляется A и C, должно быть A и B
Проранжировать группу и проставить буквы A, B, C по количеству внутри группы/3, Рейтинг продаж внутри товарной группы, проранжировать данные по нескольким условиям и проставить буквенные значения A,B,C
Проранжировать группу и проставить буквы A, B, C по количеству внутри группы/3, Рейтинг продаж внутри товарной группы, проранжировать данные по нескольким условиям и проставить буквенные значения A,B,C