Excel根据匹配行和匹配列输入表格

Excel根据匹配行和匹配列输入表格,excel,vba,Excel,Vba,基本上,我正在尝试创建一个“数据输入”选项卡。我有两个数据验证输入框,可以从表中动态提取数据。第一个单元格索引基于人员姓氏(表2[last])。第二个单元格索引表1[#HEADERS]。虽然这些都很好,但我需要输入两个相交的工作表单元格,并将相交的单元格从数据输入表上的单元格转换为数据 工作表1上的单元格“B2”是数据验证类型列表,带有表2[最后一个](在工作表2中)的下拉列表 工作表1上的单元格“C2”是数据验证类型列表,带有表1[#标题]的下拉列表(在工作表2中) 工作表1上的单元格“D2”

基本上,我正在尝试创建一个“数据输入”选项卡。我有两个数据验证输入框,可以从表中动态提取数据。第一个单元格索引基于人员姓氏(表2[last])。第二个单元格索引表1[#HEADERS]。虽然这些都很好,但我需要输入两个相交的工作表单元格,并将相交的单元格从数据输入表上的单元格转换为数据

工作表1上的单元格“B2”是数据验证类型列表,带有表2[最后一个](在工作表2中)的下拉列表

工作表1上的单元格“C2”是数据验证类型列表,带有表1[#标题]的下拉列表(在工作表2中)

工作表1上的单元格“D2”是数据验证类型“日期”,当我按下按钮时,它将被推送到工作表2上的相交单元格。下面的代码是我找到的并粘在一起的东西,我就是不明白为什么它在最后一行失败

Sub Button5_Click()

    Dim wsInfo As Worksheet: Set wsInfo = Worksheets("worksheet2")
    Dim lookupRange As Range
    Dim matchval As Range
    Dim indexVar As Long
    Dim myVal As Variant
    Dim matchval2 As Range
    Dim lookuprange2 As Range

    Set matchval = Sheets("worksheet1").Range("B2")
    Set lookupRange = wsInfo.Range("Table2[LAST]")
    If Not Application.WorksheetFunction.Sum(lookupRange) = 0 Then
        indexVar = Range(Application.Index(lookupRange, Application.Match(matchval, lookupRange))).Row
    End If

    Set matchval2 = Sheets("worksheet1").Range("B3")
    Set lookuprange2 = wsInfo.Range("Table1[#HEADERS]")
    If Not Application.WorksheetFunction.Sum(lookupRange) = 0 Then
        columnVar = Range(Application.Index(lookupRange, Application.Match(matchval2, lookuprange2))).Column
    End If

    wsInfo.Cells(indexVar, columnVar) = Sheets("worksheet1").Cells(2, "D").Value
End Sub

如果有一种更简单的方法让数据验证列表只提供一个相对的引用,我可以使用它。这也可以解释重复的姓氏。

感谢SJR为我指明了正确的方向

Sub Button5_Click()

    Dim wsInfo As Worksheet: Set wsInfo = Worksheets("worksheet2")
    Dim pltws As Worksheet: Set pltws = Worksheets("Data Entry Tab")
    Dim lookupRange As Range
    Dim myVal As Variant
    Dim lookuprange2 As Range

    'Set row value to look for
    matchval = pltws.Cells(2, "B").Value
    'Set column to look in
    Set lookupRange = wsInfo.Range("Table2[LAST]")
    'Set column value to look for
    matchval2 = pltws.Cells(2, "C").Value
    'Set row to look in
    Set lookuprange2 = wsInfo.Range("Table1[#HEADERS]")

    'Returns row (Relative to the actual range provided, not the worksheet) that data is found on
    indexVar = Application.Match(matchval, lookupRange, 0)
    'Returns column (Also relative to the range provided, not the worksheet) that the data is found in
    columnVar = Application.Match(matchval2, lookuprange2, 0)

    'Have to offset to account for actual tables position in the worksheet.
    wsInfo.Cells(indexVar + 3, columnVar + 3).Value = pltws.Cells(2, "D").Value

End Sub

你走过去了吗?我猜
indexVar
columnVar
是无效的。我认为你对射程的使用在这两种情况下都不正确。括号内的内容不会返回字符串地址。如果使用例如
indexVar=Application.Match(matchval,lookupRange,0)
和其他类似的方法,该方法是否有效?但它会返回什么?对于第一个,我需要选定的行,第二个,我需要选定的精确列。然后,我使用这两个来形成一个单元格引用。(否,上述操作也无效。)Match返回值在范围(或数组)中的位置。indexVar=Application.Match(matchval,lookupRange,0)。行返回“需要对象”错误。