См. Правила п. 2.3 - особенно о РЕАЛЬНОЙ СТРУКТУРЕ И ФОРМАТАХ. И главное - где ваши попытки решения? Отномеровать данные и затем обработать... сводной таблицей, см. Приемы.
Z написал: Отномеровать данные и затем обработать... сводной таблицей, см. Приемы.
Сводная таблица не подойдет, так как:
1. диапазон критериев состоит из 30 строк 2. в таблице данных могут быть не все критерии, придется каждый период вбивать через фильтр все эти 30 критериев для отражения актуальной картины.
Посмотрите вот это вариант: Мне было трудно решить что именно вам нужно было... Я так понял что необходимо сделать выборку: В этом примере-решение я сделал Список - по счету; настроил выпадающий список; и на основе его с помощью СчетЕсли вычислил число повторений... P.S. Возможно я не правильно понял (уточните)... P.P.S. При работе на вашем файле у меня не работали ссылки на ячейки (сам не пойму чего) - пришлось создавать новый файл.
Vasiu написал: Я так понял что необходимо сделать выборку...
Задача состоит в том чтобы сперва подсчитать кол-во строк равное кол-ву повторений всех критериев из списка (например критерии 123 и 126 встречаются 10 раз). Потом написать формулу и протянуть, которая бы выводила номер строки 1-го совпадения, второго и так далее до конечного номера совпадений.
Например критерии указанные ниже встречаются в моей базе данных пять раз. Как подсчитать это кол-во совпадений, не используя метод =СЧЁТЕСЛИ(C4:C17;E4)+СЧЁТЕСЛИ(C4:C17;E5)+СЧЁТЕСЛИ(C4:C17;E6)? Так как на самом деле таких критериев 30 штук.
1234-ав-56
цук-1234
нгш-654-вап
Вторая задача вывести все номера строк в которых встречаются эти совпадения в виде списка. Например, как вариант показать 1-е совпадение, 2-е и так далее.
Function КСОВП(rng1 As Range, rng2 As Range)
For Each cl2 In rng2.Cells
For Each cl1 In rng1.Cells
If cl1 = cl2 Then КСОВП = КСОВП + 1
Next
Next
End Function
Согласие есть продукт при полном непротивлении сторон
Это то, что вы ищете? (см. вложение) Внимание! Если данных в столбце [C] тысячи, то формулы поиска строк могут сильно замедлять пересчет. И еще формулы в диапазоне [H12:Q14] - формулы массива, т.е. ввод комбинацией клавиш {Shift} , {Ctrl} + {Enter}, а не просто {Enter}
airflight написал: 1 - остается понять как вывести номера строк всех этих повторений. 2 - у меня кол-во повторения 10 тыс
Вот с этой заморочкой вы бы сами для начала разобрались: одна строка показывает, что значение XXX имеет 100 повторений и к этой строке/ячейке подставлять 100 строк с их номерами??!
При таком объеме и с такими формулами в любом случае зависнет Нужно писать макрос. Если никто из любителей программировать не откликнется раньше, ночью набросаю макрос.
Power Query: в 2010 Pro Plus SP1, 2013 - надстройка; 2016 - часть Excel. По использованию: заполняете таблицу "База" на листе Sheet1, меняете критерии в таблице "Критерии", а затем на таблице "Отчёт" правая клавиша - Обновить. Успехов.
Function Мяу(r As Range, s As Range)
Dim sRow&, arr, lCount, sStr$, i&
sRow = r(1).Row
arr = r.Value
For i = 1 To UBound(arr)
If arr(i, 1) = s.Value Then
sStr = sStr & "," & sRow + i - 1
End If
Next
lCount = UBound(Split(sStr, ","))
ReDim arr(1 To 2)
arr(1) = lCount
arr(2) = Mid$(sStr, 2)
Мяу = arr
End Function
Такой вариант, исходя из параметров и примера заданных airflight:
Код
Sub test()
Dim rngData As Range, rngCriteria As Range, rngList As Range, c As Range
Dim arrCriteria(), arr(), i
With Worksheets(1)
Set rngData = .Range(.Cells(4, 3), Cells(.Rows.Count, 3).End(xlUp))
Set rngCriteria = .Range(.Cells(4, 5), Cells(.Rows.Count, 5).End(xlUp))
Set rngList = .Cells(12, 8)
End With
Application.ScreenUpdating = False
arrCriteria = rngCriteria.Value
ReDim Preserve arr(0)
For Each i In arrCriteria
Set c = rngData.Find(What:=i, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Set c = rngData.FindNext(c)
arr(UBound(arr)) = c.Row - rngData(1, 1).Row + 1
ReDim Preserve arr(UBound(arr) + 1)
Debug.Print c.Address
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
Next i
ReDim Preserve arr(UBound(arr) - 1)
With rngList.Resize(UBound(arr) + 1, 1)
.Value = Application.Transpose(arr)
.Sort Key1:=rngList.Offset(-1, 0), Header:=xlYes
End With
Application.ScreenUpdating = True
End Sub
Попробовал его запустить. Но у меня некорректно выдает результат. Подскажите пож-та где в этом макросе диапазоны критериев и поиска? Чтобы я мог подстроить под конечный вариант
В макросе изложенном выше все находится на одной вкладке. Подскажите пож-та как мне изменить макрос. В моем финальном файле база данных во вкладке "A", а список критериев во вкладке "B".
With Worksheets("Sheet1")
Set rngData = .Range(.Cells(4, 3), Cells(.Rows.Count, 3).End(xlUp))
Set rngCriteria = Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(4, 5), _
Worksheets("Sheet2").Cells(.Rows.Count, 5).End(xlUp))
Set rngList = .Cells(12, 8)
End With