【问题标题】:Matching a row number and value to a row on another sheet将行号和值与另一张纸上的行匹配
【发布时间】:2017-07-07 19:26:08
【问题描述】:

正如标题所示,我正在尝试创建一个系统,其中一个单元格(与特定行匹配)将搜索另一个工作表,找到与其行号匹配的数字,然后输入配对值。我已附上屏幕截图以获得更清晰的图片。

这是我迄今为止尝试过的,但没有成功。

IF(INDEX(A2:B8,2,2)=?,____,"")

我对 INDEX 和 MATCH 函数有点独立理解,但对如何将两者结合起来解决这个问题没有具体的理解。另外,我已经尝试在谷歌上搜索以寻求帮助,但甚至不知道要输入什么作为搜索词,所以这方面的帮助对于未来的问题也很有帮助。

提前致谢!

【问题讨论】:

  • 你试过什么? Vlookup()/Index/Match?
  • @BruceWayne 已编辑以包含我尝试过的内容
  • 你能包括实际使用的公式吗?谢谢!

标签: excel excel-formula vba


【解决方案1】:

在 A2 中使用以下内容:

=IFERROR(INDEX(Sheet1!$B$2:$B$8,SMALL(IF(Sheet1!$A$2:$B$8=ROW(),ROW(Sheet1!$A$2:$A$8),999999),COLUMN(A1))-1),"")

数组公式同时按Ctrl+Shift+Enter代替Enter
将同一行中的公式向下拖动。

Sheet1!$A$2:$A$8, Sheet1!$B$2:$B$8 是行和值列
If() 将为新工作表中的 Row() 测试 A2:A8 中的每个值,并返回 sheet1 中的行号
如果没有 Row() 匹配,则 99999 具有最大值(If 的错误部分)
列 (A1) 返回小 ( ,1)
当您在同一行中拖动时,它将变为 Column(B1)(对于同一行号的多个值)
如果没有数字,iferror 将返回 "" 空

表 1

    A    B
    Row Value
    5   20
    2   30
    7   40
    8   50
    2   60
    3   70
    2   100

Sheet2 结果

Row/Col   A     B    C 
 1    
 2        30    60  100
 3        70        
 4          
 5        20        
 6          
 7        40        
 8        50        

【讨论】:

  • 感谢您的帖子,我今天学习了 kbd 标签。我可以自私地问我在哪里可以找到样式备忘单吗?
  • @Ryan L 您可以在 Excel 中写入您的数据,复制 - 粘贴到答案中,选择并按 Ctrl+K 会有所帮助
  • @yass 谢谢你的回答。出于某种原因,我无法将这个简单的示例翻译成我正在使用的工作簿。当更改所有单元格以匹配示例中使用的单元格时,即使我知道特定匹配项应该在哪里,整个内容都是空白的。
  • 修改公式后同时按Ctrl+Shift+Enter 数组公式
  • 并保留 $ 用于固定引用,您可以在评论中粘贴您的公式吗?
【解决方案2】:

使用 VBA 你可以做到这一点。只需将此代码粘贴到新模块中并运行即可。

Sub PasteToNewSheet()
Dim wsSource As Worksheet: Set wsSource = Worksheets(1)
Dim lastrow As Long: lastrow = wsSource.Cells(Rows.Count, 1).End(xlUp).Row
Dim wsDest As Worksheet: Set wsDest = Worksheets.Add(After:=wsSource)
Dim rngRows As Range: Set rngRows = wsSource.Range("A2:A" & lastrow)
Dim rng As Range
wsDest.Range("A1").Value = "Value"

For Each rng In rngRows
    If rng = "" then
        rng = rng
    ElseIf wsDest.Cells(rng.Value, 1) = "" Then
        wsDest.Cells(rng.Value, 1) = rng.Offset(, 1).Value
    ElseIf wsDest.Cells(rng.Value, 2) = "" Then
        wsDest.Cells(rng.Value, 2) = rng.Offset(, 1).Value
    ElseIf wsDest.Cells(rng.Value, 3) = "" Then
        wsDest.Cells(rng.Value, 3) = rng.Offset(, 1).Value
    End If
Next rng

End Sub

【讨论】:

  • 谢谢。运行后收到错误“Runtime error 1004”Application defined or object-defined error
  • 我这样做是为了让您在 sheet1 处于活动状态时运行它,并且代码必须在模块中,而不是在工作表代码中。我对其进行了更新,以便它可以在任何地方工作,只需确保第一张表是带有行号和值的表。
  • 我想我知道出了什么问题。我正在使用的数据对于某些行号有空白。当我删除“行号”3时,它给了我这个错误。也许我可以用 9999 替换行号列中的所有空白单元格,然后 if 将忽略这些空白?
  • 如果该单元格是空白的,它会给你错误,因为它使用该数字来查找表 2 上的行号。我更改了代码以基本上跳过那些,所以它现在应该在没有你的情况下工作不得不做任何事情。如果您想更改它,您可以从 rng = rng 更改为 rng = 9999 或任何其他您想要的值,如果您希望它脱颖而出。你甚至可以让它改变空白单元格的颜色。让我知道你想做什么,但代码现在已经编辑,应该适合你。
  • 非常感谢,阿什顿。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
相关资源
最近更新 更多