繁体   English   中英

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

[英]Excel fetch rows based on a cell value in another sheet

很抱歉成为Excel专家!

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

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

如何在公式中完成? 提前致谢!

我相信我有一个答案。

尝试

=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。

我希望这有帮助。

这是该问题的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

给予应有的信誉 :正如他们所说,在阳光下没有新事物。 我在2013年7月基于StackOverflow上的一个问题“ 从已过滤表的一列复制/粘贴/计算可见单元格 ”中的一个问题,基于乔恩·克罗威尔的出色工作,得出了这个答案。这只是展示了一些Google搜索和毅力可以实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM