【问题标题】:Index match over multiple sheets in excel 2013excel 2013中多张工作表的索引匹配
【发布时间】:2016-10-03 11:07:30
【问题描述】:

这是我的第一篇文章,如果有任何不妥之处,请告诉我,以便我更正。

对于一个项目,我正在构建一个原型,它将管道组件文件读取到 excel 中,提取部件和坐标并将它们显示在图表中。 有了一个宏,我可以通过单击坐标上的图表来订购零件,我可以手动对零件进行排序。在这张表中,我需要添加零件名称和绝对 Z 值等数据。 这就是我的问题所在。

到目前为止,我已经能够使用单独的 INDEX 和 MATCH 函数从其中一个管道数据表中调用我丢失的信息,但是当我将它们组合起来时,返回一个错误(我有 #N/A; #REF 和 #VALUE 对于初学者)。

我的问题是

  1. 如何构建 INDEX MATCH 函数以从一张表中返回名称和 Z 值?

  2. 是否可以嵌套此函数以搜索文件中的所有工作表以返回这些值?

  3. 我使用了公式和视觉基础的组合,哪个可以更动态?

任何帮助表示赞赏:)

背景信息: 我至少有 4 张包含管道数据的表格,1 张带有要单击的图表的表格,以及 1 张放置过滤数据的表格。

图表中的数据从数据表中调用。然后选择图表中的数据并将其复制到 Sheet3,其中黑线是从路径中调用的数据,红色是图表中的数据,蓝色是 grpah 的一个来源(我使用一个数据文件开始)(紫色/粉红色,我试过的东西)。 然后必须从数据表中调用所需的数据,所有数据表的格式相同。

图片 表 3

数据表

我确实找到了一些关于跨多个工作表的 VLOOKUP 的信息],但我无法在我的情况下实现该示例。我还检查了 subReddits Excel 和 Visual Basic 的信息,但收效甚微。

【问题讨论】:

  • 对问题 2 的思考):好吧,如果您有 VBA,并且想要检查多张工作表,只需让 VBA 循环遍历您要搜索的工作表,直到您找到某些东西,或者您得到到最后一张纸,仍然一无所获。您要搜索的东西可以在多张纸上找到吗?如果是这样,您正在考虑制定一个列表!
  • 仅供参考,将来您最好使用 imgur 上的第二个链接来链接您的图像。当你有足够的代表时,你可以在你的问题中使用第二个链接和插入图片工具,它会将链接的图片移动到我在 Imgur 上的 SO 帐户中,这样你的图片就不会在几个月内被删除。
  • 你说“结合他们”,“他们”是什么?您在两张图片中的哪一张上手动对零件进行分类? (我假设 N-557-49..)
  • 关于问题 1),我很难跟踪所有这些,您说“...从一张纸上返回名称和 Z 值”哪张纸是一张纸?这些是各种 N-... 表吗?
  • 好的,我想用我自己的话把这个扔给你,看看我是否理解正确。在第三张表上,您希望根据 A 列中的名称查找 Z 的值。您需要它在每个 N-.... E 列中的对应行。

标签: vba excel macros


【解决方案1】:

理想情况下,您的数据应该全部合并到一个选项卡中。如果您曾经尝试跨多个选项卡执行查找,这可能意味着您需要以不同的方式构建数据源。无论区分不同选项卡的标准是什么,只需在表格中将其作为一个新列即可。

如果您仍然对 #1 感到疑惑,您可以将多个索引/匹配函数连接在一起并更改列 #。

=INDEX($B$2:$D$8,MATCH($G$3,$A$2:$A$8,0),1)&" - "&INDEX($B$2:$D$8,MATCH($G$3,$A$2:$A$8,0),2)

【讨论】:

  • 所以如果我理解正确,请避免使用多选项卡方法并将所有等距数据收集在一个选项卡中,然后使用查找。我会调查这个,看看它会给我带来什么样的结果。谢谢。
  • 我发现您的电子表格越接近干净的数据库越好。 Excel 的强大之处在于,您可以在一个选项卡上拥有类似数据库表的内容,然后在下一个选项卡上构建漂亮的图表/仪表板,所有这些都在同一个软件中,而且时间很短。但是,这种灵活性和易用性可能会导致马虎(根据我自己的电子表格的个人经验)。
【解决方案2】:

借助 Reddit 网站上的 u/分号分号。这是我自己的问题的 VBA 解决方案。要使此代码正常工作,请检查我的workbook,其中包含我使用过的模块。对于我的解决方案,我使用了一些关于“如何在图表上获取 x andy”的 john peltiers 代码。类模块中的代码可以换成下面的代码。 感谢您花时间检查我的问题。

Private Sub EmbChart_MouseUp _
    (ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)

Dim ElementID As Long, Arg1 As Long, Arg2 As Long
Dim myX As Double, myY As Double
Dim rng As Range, t As String

If Button = xlPrimaryButton Then
    With EmbChart
       Call .GetChartElement(X, Y, ElementID, Arg1, Arg2) ' call the coordinates that have been clicked

        Application.StatusBar = "[" & ElementID & "]"

         If ElementID = xlSeries Or ElementID = xlDataLabel Then
                If Arg2 > 0 Then
                    myX = WorksheetFunction.Index(.SeriesCollection(Arg1).XValues, Arg2)
                    myY = WorksheetFunction.Index(.SeriesCollection(Arg1).Values, Arg2)
                    Application.StatusBar = "[" & myX & ", " & myY & "]"
                    Select Case Arg1
                     Case 1: t = "tabbleud"
                     Case 3: t = "tabblad"
                     Case 4: t = "tableeed"
                    End Select
                    With ActiveWorkbook.Worksheets("Sheet3").[B200].End(xlUp).Offset(1, 0)
                          .Value = myX
                          .Offset(0, 1).Value = myY
                          .Offset(0, -1).Value = Evaluate("=INDEX(" & t & "[IDENT name],SUMPRODUCT((" & t & "[X]=" & myX & ")*(" & t & "[Y]=" & myY & ")*(ROW(" & t & "[X])-ROW($A$2)+1)))")
                          .Offset(0, 2).Value = Evaluate("=INDEX(" & t & "[Z],SUMPRODUCT((" & t & "[X]=" & myX & ")*(" & t & "[Y]=" & myY & ")*(ROW(" & t & "[X])-ROW($A$2)+1)))")
                        End With
                End If
        Else
            If TypeName(Selection) = "Nothing" Then
                MsgBox "Chart element " & ElementID _
                    & " (" & Arg1 & ", " & Arg2 & ")."
            ElseIf ElementID = xlShape Then

                'Chart Embedded in Chart Sheet
                MsgBox "Chart element " & ElementID _
                    & " (" & Arg1 & ", " & Arg2 & ")."
            Else
                MsgBox "Chart element " & ElementID _
                    & " (" & Arg1 & ", " & Arg2 & ")."
            End If
        End If

    End With
End If
Application.StatusBar = False
End Sub

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多