Excel根据另一个工作表中的单元格值获取行

时间:2018-09-27 13:07:03

标签: excel google-sheets

很抱歉成为Excel的入门者!

我有两张纸,第一张纸名为“股票”,第二张纸名为“股票搜索”。 在“股票”中,我有A1到B700的值。在A列中有股票代码,在B列中有股票发行人代码,因此A列中的每个条目都是唯一的,但B列中可以有重复的条目。

因此,在“股票搜索”工作表中,如果我在A1中输入发行人的代码,则希望该公式在“股票”工作表中进行搜索,并获取该发行人在新行中拥有的所有股票。

这如何在公式中完成?预先感谢!

2 个答案:

答案 0 :(得分:0)

我相信我有一个答案。

尝试

=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。完成此操作后,这些括号将出现在您的公式{}

周围

单击单元格右下方的填充按钮,然后将公式拖动到右侧(您需要对尽可能多的单元格进行此操作,以尽可能找到答案)。因此,如果公司A有40个可能的答案,则您需要使该公式至少向右移动40个单元格。

CSE公式的应用可能很棘手。本质上,您需要转到编辑栏中的公式末尾,然后使用Control + Shift + Enter。

我希望这会有所帮助。

答案 1 :(得分:0)

这是该问题的VBA解决方案。恕我直言,这比公式更合适(在这种情况下)。公式方法可以,但是有缺点-您必须记住CSE规则,然后将公式向下复制到正确的行数(您事先不知道的行数),等等,等等。

此代码使用与公式方法相同的假设。

1-张=库存和库存报告
2-工作表中的数据,A和B列(第1行中的标题)
3-查找代码在库存报告中
4-输出在库存报告中

优点之一是,如果将新数据添加到“股票”表中(即最底行> 700),则vba会自动进行调整。

代码是自记录的。但是本质是,它使用查找值作为标准在“股票”上创建自动过滤器;复制符合条件的行;并将结果粘贴到“股票报告”上的输出范围。在复制/粘贴之前,将清除输出范围,以防止以前的查找遗留任何内容。

我认为要为查找单元格创建一个下拉列表要说些什么。毫无疑问,也可以通过从A列获取代码,获取唯一值,然后将其应用于查找单元来实现自动化。只是一个想法;)


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

给予应有的信誉:正如他们所说,在阳光下没有新事物。我的答案基于Jon Crowell于2013年7月在StackOverflow“ Copy/Paste/Calculate Visible Cells from One Column of a Filtered Table”中的一个问题所做的出色工作。这只是展示了一些Google搜索和毅力可以实现的东西。