Страницы: 1 2 След.
RSS
Выборка из диапазона данных
 
Добрый день!

Люди нужна ваша проф помощь! Есть диапазон критериев. Нужно каждый из этих критериев найти в табличке.

1234-ав-56
цук-1234
нгш-654-вап
задача вывести все номера строк в которых встречаются эти совпадения в виде списка. Например, как вариант показать 1-е совпадение, 2-е и так далее.  
Изменено: airflight - 07.01.2016 13:42:14
 
См. Правила п. 2.3 - особенно о РЕАЛЬНОЙ СТРУКТУРЕ И ФОРМАТАХ.
И главное - где ваши попытки решения?
Отномеровать данные и затем обработать... сводной таблицей, см. Приемы.
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Цитата
Z написал: Отномеровать данные и затем обработать... сводной таблицей, см. Приемы.
Сводная таблица не подойдет, так как:

1. диапазон критериев состоит из 30 строк
2. в таблице данных могут быть не все критерии, придется каждый период вбивать через фильтр все эти 30 критериев для отражения актуальной картины.
 
Посмотрите вот это вариант:
Мне было трудно решить что именно вам нужно было...
Я так понял что необходимо сделать выборку:
В этом примере-решение я сделал Список - по счету; настроил выпадающий список; и на основе его с помощью СчетЕсли вычислил число повторений...
P.S. Возможно я не правильно понял (уточните)...
P.P.S. При работе на вашем файле у меня не работали ссылки на ячейки (сам не пойму чего) - пришлось создавать новый файл.
 
Количество совпадений =СЧЁТЕСЛИ(C4:C17;E4)+СЧЁТЕСЛИ(C4:C17;E5)+СЧЁТЕСЛИ(C4:C17;E6)
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Vasiu написал: Я так понял что необходимо сделать выборку...
Задача состоит в том чтобы сперва подсчитать кол-во строк равное кол-ву повторений всех критериев из списка (например критерии 123 и 126 встречаются 10 раз). Потом написать формулу и протянуть, которая бы выводила номер строки 1-го совпадения, второго и так далее до конечного номера совпадений.  
 
Например критерии указанные ниже встречаются в моей базе данных пять раз. Как подсчитать это кол-во совпадений, не используя метод =СЧЁТЕСЛИ(C4:C17;E4)+СЧЁТЕСЛИ(C4:C17;E5)+СЧЁТЕСЛИ(C4:C17;E6)? Так как на самом деле таких критериев 30 штук.
1234-ав-56
цук-1234
нгш-654-вап
Вторая задача вывести все номера строк в которых встречаются эти совпадения в виде списка. Например, как вариант показать 1-е совпадение, 2-е и так далее.  
 
Паразитируя на ответе Sanja:

=СУММПРОИЗВ(СЧЁТЕСЛИ(C4:C17;E4:E6))
KL
 
UDF для кол-ва совпадений
Код
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
Согласие есть продукт при полном непротивлении сторон
 
Цитата
KL написал: =СУММПРОИЗВ(СЧЁТЕСЛИ(C4:C17;E4:E6))
Ура первая задача решена. Теперь остается понять как вывести номера строк всех этих повторений.
Спасибо.
 
Не за что. Не забудьте закрепить $ диапазоны поиска и критериев :)
KL
 
Это то, что вы ищете? (см. вложение)
Внимание! Если данных в столбце [C] тысячи, то формулы поиска строк могут сильно замедлять пересчет.
И еще формулы в диапазоне [H12:Q14] - формулы массива, т.е. ввод комбинацией клавиш {Shift} , {Ctrl} + {Enter}, а не просто {Enter}
Изменено: KL - 07.01.2016 13:59:49
KL
 
Цитата
KL написал: Это то, что вы ищете?
Почти. Но нужно чтобы указание было на диапазон критериев, но не на каждый в отдельности.
 
А так не лучше? Подставьте формулы прямо к диапазону критериев. Нет?
KL
 
у меня кол-во повторения 10 тыс. Боюсь файл просто зависнет.
 
Цитата
airflight написал:
1 - остается понять как вывести номера строк всех этих повторений.
2 - у меня кол-во повторения 10 тыс
Вот с этой заморочкой вы бы сами для начала разобрались:
одна строка показывает, что значение XXX имеет 100 повторений и к этой строке/ячейке подставлять 100 строк с их номерами??! ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
При таком объеме и с такими формулами в любом случае зависнет :( Нужно писать макрос. Если никто из любителей программировать не откликнется раньше, ночью набросаю макрос.
KL
 
Спасибо Вам огромное за помощь!!!
 
Доброе время суток.
Цитата
KL написал: Если никто из любителей программировать
Программирование... Да, конечно, вариант на Power Query.

С Рождеством Христовым!
 
Цитата
Андрей VG написал:
Программирование... Да, конечно, вариант на Power Query.
Подскажите пож-та как этим пользоваться в эксель?
 
Power Query: в 2010 Pro Plus SP1, 2013 - надстройка; 2016 - часть Excel. По использованию: заполняете таблицу "База" на листе Sheet1, меняете критерии в таблице "Критерии", а затем на таблице "Отчёт" правая клавиша - Обновить.
Успехов.
 
Массивная UDF
Код
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
Изменено: KL - 07.01.2016 18:45:58
KL
 
Попробовал его запустить. Но у меня некорректно выдает результат. Подскажите пож-та где в этом макросе диапазоны критериев и поиска? Чтобы я мог подстроить под конечный вариант
 
Цитата
Но у меня некорректно выдает результат
А, если изменить строку (диапазоны и критерии как у вас в файле из поста #1)
Код
arr(UBound(arr)) = c.Row - rngData(1, 1).Row + 1
на
Код
arr(UBound(arr)) = c.Row
 
Kuzmich, спасибо! Сработало.
 
В макросе изложенном выше все находится на одной вкладке. Подскажите пож-та как мне изменить макрос. В моем финальном файле база данных во вкладке "A", а список критериев во вкладке "B".  
 
rngData  диапазоны
rngCriteria критерии
 
Цитата
RAN написал:
rngData  диапазоны
rngCriteria критерии
А как указать в макросе где эти критерии и диапазоны находятся?
 
Код
    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
Страницы: 1 2 След.
Наверх