Vba excel 2013中多张工作表的索引匹配

Vba excel 2013中多张工作表的索引匹配,vba,excel,macros,Vba,Excel,Macros,这是我的第一篇帖子,如果有什么不符合要求,请让我知道,这样我就可以纠正它 对于一个项目,我正在构建一个原型,将管道组件文件读入excel,提取零件和坐标,并将它们显示在图形中。 有了一个宏,我可以通过单击坐标图来对零件进行排序,我可以手动对零件进行排序。在这张表中,我需要添加数据,如零件名称和绝对Z值。 这就是我的问题所在 到目前为止,我已经能够使用一个单独的索引和匹配函数来调用其中一个管道数据表中缺少的信息,但是当我合并它们时,返回一个错误(我已经有了#N/a;#REF和#VALUE作为起点)

这是我的第一篇帖子,如果有什么不符合要求,请让我知道,这样我就可以纠正它

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

到目前为止,我已经能够使用一个单独的索引和匹配函数来调用其中一个管道数据表中缺少的信息,但是当我合并它们时,返回一个错误(我已经有了#N/a;#REF和#VALUE作为起点)

我的问题是

  • 如何构建索引匹配函数以从一张工作表返回名称和Z值

  • 是否可以嵌套此函数来搜索文件中的所有图纸以返回这些值

  • 我使用公式和视觉基础的组合,哪一个可以用来更具动态性

  • 感谢您的帮助:)

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

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

    图像 第3页

    数据表


    我确实在多个工作表中找到了一些关于VLOOKUP的信息),但在我的情况下,我无法实现该示例。我还检查了子插件Excel和visual basic以获取信息,但收效甚微。

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

    如果您仍然想知道#1,您可以将多个索引/匹配函数连接在一起,然后更改列#


    借助Reddit网站上的u/分号。下面是我自己问题的VBA解决方案。要使此代码正常工作,请检查包含我使用过的模块的my。在我的解决方案中,我使用了一些约翰·佩尔蒂埃(john peltiers)关于“如何让x安迪出现在你的图表上”的代码。类模块中的代码可以替换为下面的代码。 谢谢你花时间检查我的问题

    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
    

    对问题2的思考):如果你有VBA,并且你想检查多张工作表,只需让VBA在你想搜索的工作表中循环,直到你找到一些东西,或者你到达最后一张工作表时仍然没有找到任何东西。你要找的东西能在多张纸上找到吗?如果是这样的话,你正在考虑制定一份清单!仅供参考,将来您最好使用imgur上的第二个链接来链接您的图像。当你有足够的代表,你使用第二个链接和插入图像工具在你的问题,它将移动链接图像到SO的帐户在Imgur,这样你的图片在不删除在几个月的时间。你说“合并”,什么是“他们”?在这两个图像中,您会在哪一个图像上手动排序零件?(我假设N-557-49…)关于问题1),我很难跟踪所有这些,您说“…从一张纸返回名称和Z值”哪张纸是一张?这些是不同的N-。。。床单?好的,用我自己的话把这个扔给你,看看我是否理解正确。在第三张纸上,您希望根据A列中的名称找到Z的值。您需要它搜索N-…张纸上的J列,直到找到匹配项,并使用E列中相应行的Z。因此,如果我理解正确,避免使用多选项卡方法,在一个选项卡中收集所有等轴测数据,然后使用查找。我将对此进行调查,看看它会给我带来什么样的结果。谢谢。我发现你的电子表格离一个干净的数据库越近越好。Excel的强大之处在于,您可以在一个选项卡上创建类似数据库表的内容,然后在下一个选项卡上构建漂亮的图表/仪表板,所有这些都在同一个软件中,而且只需很短的时间。这种灵活性和易用性可能导致草率(从我自己的电子表格的个人经验来看)。
    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