Добрый день. Есть код, написанный ув. 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
Всем привет, уже создавала схожую тему, но дабы не апать, создаю другую. Просьба немного другая. В соседней моей теме, уже помогли, особенно 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
Надеюсь нормально объяснила Если надо, приложу пример.
Добрый вечер всем, специально зарегистрировалась тут, дабы задать вопрос, в надежде, что тут помогут. Самой не хватает знаний:( Искала в поиске на данном форуме похожий вопрос, но вроде бы прямо такого нету. В общем, есть определенное количество строк со значениями. Значения вынесены в отдельный столбец(ячейку). Нужно найти строчки с нужными мне повторяющимися значениями и как то вынести их и отсортировать в порядке убывания. Приложу пример. Если что, объясню подробнее... Я не знаю, нужна тут формула или может быть макрос какой нибудь. Или утилита.