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

Страницы: 1
PQ. Оптимизация запроса поиска повторных значений
 
Цитата
написал:
Мария Гончарова , вы бы в примере хоть исходные данные в шаблоне бы заполнили. что там за данные и что там за фильтр?
Извиняюсь, отлучилась. Исходные данные любые. surkenny уже за меня скинул пример :D  С большим количеством столбцов, у меня вообще не работает. Приложу 2 примера. В одном 2 строчки по 20 столбцов с рандомными числовыми значениями. И в фильтре указало повторения 10 с количеством повторений минимум 2. Вообще не ищет. Во втором примере, строчек 19 по 16 столбцов так же с числами. В фильтре указала количество повторений 6. Всё ищет. Причем, можно и 20 строчек указать. И 200000. Именно когда столбцов много, не думает вообще. Пк так же не нагружается. Вроде в настройках указано многопоточность 16, но без толку. Или это дело pq?
PQ. Оптимизация запроса поиска повторных значений
 
Добрый день. Есть код, написанный ув. surkenny, который находит повторяющиеся значения и их количество повторений. Может ли кто нибудь оптимизировать его? С большими массивами данных, работает супер долго. При этом мой пк совсем не в нагрузке. Даже не на 20%. Ни процессор, ни озу:( В чём может быть проблема или эксель берет сколько надо? Код и пример:
Код
let
  src = Table.Buffer ( Excel.CurrentWorkbook(){[ Name = "data" ]}[Content] ),
  clmnNames = List.Buffer ( Table.ColumnNames ( src ) ),
  filterValues = List.Buffer ( Excel.CurrentWorkbook(){[ Name = "filterValues" ]}[Content][Значение] ),
  addComb = Table.AddColumn (
    src,
    "comb",
    each List.Accumulate (
      List.Sort ( List.Difference ( List.RemoveNulls ( List.Distinct ( Record.ToList ( _ ) ) ), filterValues ) ),
      { {} },
      ( s, c ) => s & List.Transform ( s, ( x ) => x & { c } )
    )
  ),
  expand = Table.ExpandListColumn ( addComb[[comb]], "comb" ),
  addCount = Table.AddColumn ( expand, "КолЭл", each List.Count ( [comb] ), Int64.Type ),
  parameters = Record.FromTable (
    Table.FromColumns ( Table.ToColumns ( Excel.CurrentWorkbook(){[ Name = "parameters" ]}[Content] ), type table [ Name = text, Value = number ] )
  ),
  filterElements = Table.SelectRows (
    addCount,
    each [КолЭл] = Record.FieldOrDefault ( parameters, "Количество элементов в сочетании", null )
  ),
  toRec = Table.TransformColumns ( filterElements, { "comb", ( x ) => Record.FromList ( x, List.FirstN ( clmnNames, List.Count ( x ) ) ) } ),
  group = Table.Group ( toRec, { "comb", "КолЭл" }, { { "Повт", each Table.RowCount ( _ ), Int64.Type } } ),
  filterRepeats = Table.SelectRows ( group, each [Повт] >= Record.FieldOrDefault ( parameters, "Минимальное число повторений", null ) ),
  sort = Table.Sort ( filterRepeats, { { "КолЭл", Order.Descending }, { "Повт", Order.Descending } } ),
  expandRecs = Table.ExpandRecordColumn ( sort, "comb", List.FirstN ( clmnNames, sort[КолЭл]{0} ) )
in
  expandRecs

Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
Всем привет и всех с новым годом:) Может кто пожалуйста добавить в код surkenny в лист "Фильтр" максимальное число элементов в сочетании. То есть так же, как он сделал сообщением выше в пункте 2:
Цитата
написал:
2. Правая таблица - фильтр результатов (сочетания от скольких элементов ищем, от какого количества повторов выводим): не нужно руками править код.
Только сочетание до скольки элементов ищем :D  
Макрос для нахождения значений и удаление соседних значений
 
DANIKOLA,
Попробовала, все круто работает, как и надо:) Спасибо большущее :*  Сейчас вот ещё раз пригодился.
Изменено: Мария Гончарова - 04.12.2021 16:32:29
Макрос для нахождения значений и удаление соседних значений
 
Цитата
написал:
Мария Гончарова  написал:Только почему-то не оставляет однозначные цифры. Двузначные удаляет, однозначные нет.
Я тут опечаталась. Только почему-то оставляет* однозначные цифры.
Я там имела ввиду, если вводить двузначные цифры/буквы, остаются однозначные цифры/буквы. То есть, если ввести в это окошко "Введите искомый текст" что либо, кроме однозначных значений, то однозначные значения остаются почему-то.
Но все равно, больше Вам спасибо за помощь :)  
Макрос для нахождения значений и удаление соседних значений
 
DANIKOLA, Добрый день :)  Вот сейчас накидала цифр. Однозначные остаются так же. Буквы или цифры, не важно. Прикреплю пример. Может быть у меня что-то нет? Может быть версия excel не подходит?
Изменено: Мария Гончарова - 27.11.2021 16:44:40
Макрос для нахождения значений и удаление соседних значений
 
Всем спасибо, как всегда, отдельный поклон DANIKOLA
Сегодня не было времени испробовать, вот сейчас села за пк, вроде работает:) Только почему-то не оставляет однозначные цифры. Двузначные удаляет, однозначные нет. :(  
Макрос для нахождения значений и удаление соседних значений
 
Всем привет, уже создавала схожую тему, но дабы не апать, создаю другую. Просьба немного другая. В соседней моей теме, уже помогли, особенно DANIKOLA. За что ему, больше спасибо.
Он написало код, для поиска значений и удалений их со сдвигом влево. Так сказать, упростил мне жизнь:) Надоело, каждый раз через найти и заливку всё делать. Может ли кто нибудь изменить его код так, чтобы так же искать значения, но при этом удалять не их, а те, которые не искались, то есть те, которые остались(соседние). И так же со сдвигом влево. Вот его код:
Код
Sub DeleteCellByVal()
    Dim r As Range, s As String, sDefaultText As String, sArr As Variant, i As Byte
    sDefaultText = GetSetting("DeleteCellByValue", "Folder1", "DefaultString")
    s = InputBox("Введите искомый текст", "Удаление текста", sDefaultText)
    s = Application.WorksheetFunction.Trim(s)
    If s = "" Then Exit Sub
    SaveSetting "DeleteCellByValue", "Folder1", "DefaultString", s
    If TypeName(Selection) = "Range" Then
        Set r = Selection
        If r.Cells.Count = 1 Then
            MsgBox "Выделенна только одна ячейка!", vbQuestion, "Вы серьёзно?"
            Exit Sub
        End If
    Else
        Exit Sub
    End If
    Application.ScreenUpdating = False
    If InStr(1, s, " ") > 0 Then
        sArr = Split(s, " ")
        For i = LBound(sArr) To UBound(sArr)
            r.Replace sArr(i), "", 1
        Next i
    Else
        r.Replace s, "", 1
    End If
        r.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlToLeft
End Sub
Надеюсь нормально объяснила :oops:  Если надо, приложу пример.
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
surkenny, Вы лучший, спасибо ещё раз. Мастер своего дело. Довели до совершенства, стало удобнее регулировать мин. кол-во элементов и число повторений. Прямо искусство. Я теперь всё верно отображается, в плане пустых строк.
Цитата
написал: Стыдно, что наврал Вам про количество сочетаний:)
Ничего страшного, со всеми бывает. Я тогда тоже раз 50 подставляла под Вашу формулу и не понимала, почему не правильно. Но не стала спорить, ибо на практике главное, было верно:)
Изменено: Мария Гончарова - 25.11.2021 17:52:32
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
surkenny, Извиняюсь, помогите добавить в исключения пустые ячейки в Вашем коде :)  
Изменено: Мария Гончарова - 25.11.2021 14:27:26
Удаление значений в строках и удаление пустой ячейки со сдвигом влево.
 
Цитата
написал: так у вас в ячейке E18 написано "h". Это случайно или какой-то другой метод "выкидывания" ?
Это я нечаянно пропустила:) Вручную для примера вбивала)
Цитата
написал:  Выделяете диапазон -- жмите кнопки Ctrl+H -- в Найти пишите букву h -- жмите Заменить всё --  в Найти пишите букву c -- жмите заменить всё -- Закрыть -- клавиша F5 -- Выделить -- Пустые ячейки -- ОК -- на ленте находите Удалить -- треугольничек рядом с кнопкой -- Ячейки, со сдвигом влево -- ОК.
А я так и делаю всегда, но это не удобно и долго, когда значений много)

Цитата
написал: Добрый вечер. У Вас буква "с" в одной ячейке русская, в другой латинская...?
Да видимо опять же, при ручном вводе, нечаянно переключила раскладку:)
Получается свои значения подставлять в:
Код
 If r.Cells(i).Value = "h" Or r.Cells(i).Value = "c" Or r.Cells(i).Value = "с" Then 
? Это работает и на буквы и на цифры да?

Всем большое спасибо за помощь🦾

Upd. Все работает:) Не знаю, быстрее ли это конечно, чем ручками, ибо большой диапазон проходит дольше, чем обычное удаление пустых ячеек со сдвигом. Но зато меньше клацать:)
Удаление значений в строках и удаление пустой ячейки со сдвигом влево.
 
Добрый вечер, не нашла в поиске готового решения. Не поделится кто нибудь? Приложу пример :)  
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
,Ещё раз огромнейшее спасибо. Работает как часы. Насчёт сочетаний поняла. Попробовала для проверки сделать 10 строк и 20 значений. Поискал комбо на  5 значениях. Вышло 150к строк. Поиск на 6 значениях, уже 300к.
Цитата
написал:
Если нужно найти комбинации, которые повторяются более 3-х раз, то после шага group добавьте выбор нужных строк:
Не поняла вот это :sceptic: .

Да уж, строк выходит много. В каком шаге редактировать, чтобы количество повторений регулировать? Как раз таки случаем не filter2? Пробовала так:
Код
filter2 = Table.SelectRows ( group, each [Число повторений] = 2 ),
Не получилось :D . Большинство строк имеет кол-во повторений-1. То есть это же значения, которые не повторяются вовсе? Хотелось бы вообще тогда не выводить их, дабы ускорить процесс. Так пк мой вроде бы хороший:)
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
Цитата
написал:
То есть для одной строки в 5 элементов - это 24 сочетания, для 7 элементов - 720. Для 20 значений в одной строке 1,2 * 10^17, а для 8 строк это миллиард миллиардов сочетаний.
Не поняла. В одной строке ведь не может быть сочетаний. 20 уникальных значений. Нужно же 2 минимум строчки. Запуталась в Ваших вычислениях :D . Но думаю, туплю я с утра. Раз так, можно как-то переделать так, чтобы можно было указать сколько комбинаций в этих строках я хочу найти. К примеру строчки с 4 комбинациями?
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
surkenny, Спасибо огромное. Как раз пользовалась и вот как раз делала Ваш третий вариант:) Но так как в pq не бум-бум, заняло бы это долгое время. Не подскажете, возможно как-то ограничивать вывод повторяющихся значений, к примеру до 4. А то я добавила до 20 значений в строке и сделала чуть больше строк, уже начало дольше работать(намного). Я так понимаю, как раз из-за вывода повторяющихся значений один, два раза и т.д. И кстати, я ведь могу и цифры подставлять туда, не надо ведь нигде number прописывать и т.д.?
Изменено: Мария Гончарова - 23.11.2021 09:40:44
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
Выше макрос работает, почему то в начала ошибку синтаксиса показывал, но всё же, значения то, повторяющиеся я не знаю:(
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
Ну да. Я там в верхнем макросе ещё не разобралась. По идее так и надо. Есть только строчки со значениями. Надо найти повторяющиеся значения в строках. Потом эти строки вывести так, чтобы наибольшое кол-во повторений было вверху. То есть на убывание.

P.S.
Выше макрос работает, почему то в начала ошибку синтаксиса показывал, но всё же, значения то, повторяющиеся я не знаю:(
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
Цитата
написал:
а в приведеном Вами примере (желаемый результ) почему не содержит строкуfsegjдля (s e)
Не увидела, писала же ручками:) Сейчас попробую в макросе разобраться. Но на вряд ли разберусь :D  
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
Радуга просто чтобы указать на строчки с повторяющиеся значения :D  :D   Я не знаю как правильно объяснить. Есть несколько строчек, как в примере. Там 7 строчек. В каждой строчке есть значения вынесенные в отдельный столбец(ячейку). Строчка может быть и из 10 значений и из 20. Не важно. И вот в каждой строчке есть повторяющиеся значения. Я хотела как-то отсортировать эти строчки по кол-ву повторяющихся в них значений. В примере использовала просто английские буквы.
Upd. Прикреплю ещё раз пример, без радуги :D  Как бы не важна сама сортировка. Главное вынести строки с одинаковыми значениями отдельно. Ну если так будет удобнее. Как в примере, в 3 строчках 5 значений повторились. Потом ещё в 2 других строчках повторились так же 5 значений и тд. Затем строчки, где уже 4 значения повторились, затем 3 значения и тд.
Изменено: Мария Гончарова - 22.11.2021 17:01:28
Поиск одинаковых значений в строках и сортировка строк в порядке убывания
 
Добрый вечер всем, специально зарегистрировалась тут, дабы задать вопрос, в надежде, что тут помогут. Самой не хватает знаний:( Искала в поиске на данном форуме похожий вопрос, но вроде бы прямо такого нету.
В общем, есть определенное количество строк со значениями. Значения вынесены в отдельный столбец(ячейку). Нужно найти строчки с нужными мне повторяющимися значениями и как то вынести их и отсортировать в порядке убывания. Приложу пример. Если что, объясню подробнее... Я не знаю, нужна тут формула или может быть макрос какой нибудь. Или утилита.
Страницы: 1
Наверх