很抱歉成为Excel的入门者!
我有两张纸,第一张纸名为“股票”,第二张纸名为“股票搜索”。 在“股票”中,我有A1到B700的值。在A列中有股票代码,在B列中有股票发行人代码,因此A列中的每个条目都是唯一的,但B列中可以有重复的条目。
因此,在“股票搜索”工作表中,如果我在A1中输入发行人的代码,则希望该公式在“股票”工作表中进行搜索,并获取该发行人在新行中拥有的所有股票。
这如何在公式中完成?预先感谢!
答案 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搜索和毅力可以实现的东西。