Excel извлекает строки на основе значения ячейки на другом листе - PullRequest
0 голосов
/ 27 сентября 2018

извините за то, что я абсолютный новичок в Excel!

У меня есть два листа, лист 1 с именем "Акции" и лист 2 с именем "Поиск акций".В «Акциях» у меня от А1 до В700 значений.В столбце A у меня есть символы акций, а в столбце B - символы эмитентов акций, поэтому каждая запись в столбце A уникальна, однако в столбце B могут быть повторяющиеся записи.

Итак, на листе «Акции»поиск ", если я введу в А1 символ эмитента, я хочу, чтобы формула пошла на поиск по листу" Акции "и извлекла все акции, которые есть у этого эмитента, в новых строках.

Как это можно сделать вформула?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Это VBA решение вопроса.ИМХО, это более уместно, чем формула (в данном случае).Подход с формулой - это нормально, но есть и недостатки: вы должны запомнить правило CSE, а затем скопировать формулы в нужное количество строк (которые вы не знаете заранее) и т. Д. И т. Д.

В этом коде используются те же предположения, что и при использовании формулы.

1 - листы = отчет об акциях и запасах
2 - данные в листах, столбцы A и B (заголовок в строке 1)
3 -код поиска находится в отчете об акциях
4 - вывод находится в отчете об акциях

Одно из преимуществ состоит в том, что если новые данные добавляются в лист акций (т. е. нижний ряд> 700), vba автоматически корректируется.

Код самодокументирован.Но суть в том, что он создает автофильтр на «Акции», используя значение поиска в качестве критерия;копирует строки, которые соответствуют критериям;и вставляет результат в выходной диапазон в «Отчетах о запасах».Диапазон вывода очищается перед началом копирования / вставки, так что нет остатков от любого предыдущего поиска.

Я думаю, что есть что сказать для создания раскрывающегося списка для ячейки поиска.Без сомнения, это тоже можно автоматизировать, получая коды из столбца А, получая уникальные значения, а затем применяя их к поисковой ячейке.Просто мысль;)


Sub so_52537740()

    ' CREDITS
    ' 
    ' Refer: https://stackoverflow.com/questions/17531128/copy-paste-calculate-visible-cells-from-one-column-of-a-filtered-table
    ' Date: 8 July 2013
    ' Submitted by: Jon Crowell (https://stackoverflow.com/users/138938/jon-crowell)


    Dim src As Worksheet, tgt As Worksheet
    Dim filterRange As Range, copyRange As Range
    Dim lastRow As Long
    Dim stocks As String, stockreport As String

    ' set values for sheet names
    stocks = "Stocks"
    stockreport = "Stock report"

    ' set values for Sheet variables
    Set src = ThisWorkbook.Sheets(stocks)
    Set tgt = ThisWorkbook.Sheets(stockreport)

    ' clear the exist target data
    tgt.Range("A4:B" & Rows.Count).ClearContents

    ' turn off any autofilters that are already set
    If src.AutoFilterMode Then src.AutoFilter.ShowAllData

    ' find the last row in the Stocks sheet with data in column A
    lastRow = src.Range("A" & src.Rows.Count).End(xlUp).Row

    ' the range that we are auto-filtering (all columns)
    Set filterRange = src.Range("A1:B" & lastRow)

    ' the range we want to copy (only columns we want to copy)
    ' in this case we are copying both columns A and B
    ' we set the range to start in row 2 to prevent copying the header
    Set copyRange = src.Range("A2:B" & lastRow)

    ' filter range based on column A being equal the the value in Cell A1 of the stockreport
    ' consider making this a dropdown list so that there are no errors
    filterRange.AutoFilter field:=1, Criteria1:=Format(Sheets(stockreport).Range("a1").Value)

    ' copy the visible cells to our target range
    ' note that you can easily find the last populated row on this sheet
    ' if you don't want to over-write your previous results
    copyRange.SpecialCells(xlCellTypeVisible).copy tgt.Range("A4")

    ' turn off any autofilters that are already set
    If src.AutoFilterMode Then src.AutoFilter.ShowAllData

End Sub

Надо отдать должное : Как говорится, под солнцем нет ничего нового.Я основал этот ответ на отличной работе Джона Кроуэлла по вопросу в StackOverflow « Копировать / Вставить / Рассчитать видимые ячейки из одного столбца отфильтрованной таблицы » в июле 2013 года. Просто чтобы показать, чтоможно немного погуглить и упорствовать.

0 голосов
/ 27 сентября 2018

Мне кажется, у меня есть для вас ответ.

Попробуйте

=IFERROR(INDEX('Stocks Search'!$A$1:$A$700,SMALL(IF('Stocks Search'!$B$1:$B$700=$A$1,ROW('Stocks Search'!$A$1:$A$700)-MIN(ROW('Stocks Search'!$A$1:$A$700))+1),COLUMNS($A$1:A1))),"")

Это формула CSE.Это означает, что как только вы введете его в ячейку B1, вам нужно нажать Control + Shift + Enter.Как только вы это сделаете, эти квадратные скобки появятся вокруг вашей формулы {}

Нажмите кнопку заполнения в правом нижнем углу ячейки и перетащите формулу вправо (вам нужно будет сделать это для столько ячеек, сколькоэто возможно для ответов).Таким образом, если у компании А есть 40 возможных ответов, вам нужно, чтобы эта формула прошла не менее 40 ячеек вправо.

Применение формул CSE может быть непростым делом.По сути, вам нужно перейти к концу формулы в строке формул, а затем использовать Control + Shift + Enter.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...