首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel数据复制

Excel数据复制
EN

Stack Overflow用户
提问于 2013-11-12 17:49:03
回答 2查看 79关注 0票数 0

我在工作表中有两列,如下所示。

我想要做的是从第二列中提取值,但前提是对应的第一列值与我指定的值匹配。但是,我也希望能够从第一列匹配的数组中指定行号。

例如,如果我将值设置为'2‘,将行号设置为'2’,它将给我值14,因为它匹配第1列中的第一个值,并创建了一个数组,然后给我该数组的第二行,即14。

有什么想法吗?

代码语言:javascript
复制
1   10
1   11
1   12
2   13
2   14
2   15
3   16
3   17
3   18
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-12 18:13:24

如果您的数据按示例中的数据排序,即。第一列上升,然后第二列上升。然后,您可以使用OFFSET()INDEX()MATCH()的组合。

代码语言:javascript
复制
=OFFSET(INDEX(second_column,MATCH(lookup_a,first_column,0)),entry_row-1,0)

这首先获取与查找值匹配的第一个单元格的INDEX(..., MATCH())的单元格地址,然后OFFSET()函数将该单元格地址降低到该组中您想要的行数。当然,这完全取决于所描述的排序。

如果您希望在未排序的第二列中使用最小的kth项(但仍在第一列上分组),则可以使用:

代码语言:javascript
复制
=SMALL(OFFSET(second_column,MATCH(lookup_a,first_column,0)-1,0,MATCH(lookup_a,first_column,1)-MATCH(lookup_a,first_column,0)+1,1),entry_row)

如果您超出了选择的范围,这具有返回#N/A的优点。用IFERROR(...., "")包围它。

或者,对未排序的第二列数据使用第一种方法,只检查偏移量以确定它是否保留查找值,您可以使用:

代码语言:javascript
复制
=IF(OFFSET(OFFSET(INDEX(second_column,MATCH(lookup_a,first_column,0)),entry_row-1,0),0,-1)=lookup_a,OFFSET(INDEX(second_column,MATCH(lookup_a,first_column,0)),entry_row-1,0),"")
票数 1
EN

Stack Overflow用户

发布于 2013-11-12 18:04:56

答案使用VBA选择“Find”的第二个结果可以扩展到您的情况,使用您正在寻找的事件数作为输入。

这是Excel查找第n次事件/实例的改编

代码语言:javascript
复制
Function FindNth(Table As Range, Val1 As Variant, Val1Occrnce As Integer, ResultCol As Integer)
'Finds the Nth value in the first Column of a table that has a stated value on the same row in another Column.
  Dim i As Integer
  Dim iCount As Integer
  Dim rCol As Range

  iCount = 0
  For i = 1 To Table.Rows.Count
    If (Table.Cells(i, 1) = Val1) Then
      iCount = iCount + 1
    End If

    If iCount = Val1Occrnce Then
      FindNth = Table.Cells(i, ResultCol)
      Exit For
    End If
  Next i
End Function

下面是使用用户定义函数的结果(公式栏在单元格G3中显示了公式):

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19936305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档