КАК ВЫБРАТЬ ОТ ГДЕ в excel?Возвращать строки из базы данных - PullRequest
0 голосов
/ 11 июля 2019

Я хочу вернуть строки из таблицы, где выполняются определенные условия, в Excel.

ProdGroup   Width (mm)  Diameter (mm)   Date
Prod1           1120            1000   2016-01-11
Prod2           600             1000   2017-10-18
Prod1           930             800    2015-04-11
Prod3           1250            1200   2016-04-18
Prod2           840             1000   2019-06-27
Prod2           840              900   2018-03-21

Я хочу сделать эквивалент: "SELECT * FROM Table WHERE ProdGroup =" Prod2 "И диаметр = 1000 "в Excel.Моя идея состоит в том, что я ввожу значения в две ячейки и что строки возвращаются на основе того, что я пишу в двух ячейках.

Я попытался использовать функцию = INDEX (), но мне удалось только найти строкисоответствует только 1 условию.Кроме того, мне удалось вернуть только один ряд.

=INDEX(B2:D6,MATCH(A10,A2:A6,0),1)

Это дает мне только один параметр IN.С Prod2 это вернуло бы только одну строку.

С входами "Prod2" и 1000:

ProdGroup         Diameter
Prod2             1000

Я хочу получить такой результат:

Prod2           600             1000            2017-12-18
Prod2           840             1000            2019-06-27

Я понятия не имею, как это сделать.,Может кто-нибудь помочь, пожалуйста?

С уважением, pbdude

Ответы [ 3 ]

1 голос
/ 11 июля 2019

Вот вариант:

enter image description here

Формула в I2:

=IFERROR(INDEX(A$1:A$7,SMALL(IF((($A$2:$A$7=$F$2)*($C$2:$C$7=$G$2))>0,ROW($A$2:$A$7),""),ROW(1:1))),"")

Подтвердите с помощью Ctrl Shift Введите

Перетащите вниз и вправо ...

0 голосов
/ 11 июля 2019

Если вы ищете автоматизированный пример, вы можете использовать макрос. Это избавит вас от необходимости перетаскивать формулу вниз и повысит целостность ваших данных, поскольку это снижает вероятность ошибок и исключает вероятность того, что формула не охватит весь диапазон ячеек данных или не будет набрана.

Если вы не знакомы с VBA ...

  • Сохранение вашей книги в виде файла .xlsm (книга с поддержкой макросов)
  • Нажмите Alt + F11, чтобы открыть окно VBE
  • Щелкните правой кнопкой мыши на имени вашего файла в проводнике проектов в левой части экрана
  • Выберите «Вставка»> «Модуль»
  • Во вновь созданном модуле вставьте этот код ниже.
  • Вы можете запустить макрос, зайдя в Developer> Macros или оттуда, выбрав Options и назначив сочетание клавиш на ваш выбор.

Чтобы настроить это для ваших конкретных данных, вам нужно всего лишь заменить текст внутри кавычек на ваше конкретное имя таблицы и именованные диапазоны в разделе Set Variables.

В приведенном ниже примере я использовал именованные диапазоны для ячеек, которые будут использоваться в качестве параметров фильтра. Я также отформатировал данные для фильтрации в виде таблицы. Имя таблицы - t_ProductSizes.

Этот фрагмент показывает отфильтрованный результат и именованный диапазон активной ячейки.

enter image description here

Sub FilterTable_ByCellReference()

'~~> Declare the variables
Dim t As ListObject
Dim p As String
Dim w As String
Dim dm As String
Dim dt As String

'~~> Set the variables
'~~> Replace the text inside the quotation marks with your table names and named ranges.

Set t = ActiveSheet.ListObjects("t_ProductSizes")
p = Range("filter_product") 'named range
w = Range("filter_width") 'named range
dm = Range("filter_diameter") 'named range
dt = Range("filter_date") 'named range

'~~> Check your variables if you like (view the immediate window)
Debug.Print "t = " & t.Name
Debug.Print "p = " & p
Debug.Print "w = " & w
Debug.Print "dm = " & dm
Debug.Print "dt = " & dt

'~~> Remove existing filters.
    t.Range.AutoFilter Field:=1

'~~> Filter the table based on the values specified in the filter cells.
'~~> Only filter the corresponding column if the cell is not blank.

    With t.Range

        If p <> "" Then

            .AutoFilter Field:=1, _
                Criteria1:=p

        End If

        If w <> "" Then

            .AutoFilter Field:=2, _
                Criteria1:=w

        End If

        If dm <> "" Then

            .AutoFilter Field:=3, _
                Criteria1:=dm

        End If

        If dt <> "" Then

            .AutoFilter Field:=4, _
                Criteria1:=DateValue(dt)

        End If

    End With


'~~> Clear the variables from memory.
Set t = Nothing
p = vbNullString
w = vbNullString
dm = vbNullString
dt = vbNullString

End Sub
0 голосов
/ 11 июля 2019

Что вам нужно, объясняется в этой статье, вам нужно будет манипулировать в соответствии с вашими потребностями https://www.get -digital-help.com / 2009/09/28 / extract-all-row-from-a-диапазон-что-Meet-критерий-в-один-колонок-в-первенствует /

...