我有一个带有一些标签的工作表,在第一个标签中有下表:
在第二个选项卡中,键入“ cliente”和“ tipo”字段,然后我想获取ID作为返回。
我正在使用以下代码:
tipo = ActiveCell.Offset(0, -1).Value
cliente = Range("D5").Value
ActiveCell.Offset(0, -2) = WorksheetFunction.Index(Sheets("Tab 1").[Table1[ID]], WorksheetFunction.Match(cliente & tipo, Sheets("Tab 1").[Table1[CLIENTE]] & Sheets("Tab 1").[Table1[TIPO]], 0))
我不知道到底是什么问题,但是我尝试了很多方法,包括一些示例,这些示例拆分代码并使用Evaluate函数。但是,什么也没发生。
我该怎么办?
答案 0 :(得分:4)
我更喜欢将常规公式用于此类操作。
假设按照您的示例布局A,B和C列,并且Cliente的查找值在F1中,而Tipo在F2中,那么这将是一个未作为数组输入的公式:
=INDEX(A1:A6,INDEX(MATCH(1,(F1=B1:B6)*(F2=C1:C6),0),1))
这将是等效的数组公式(用[Ctrl] + [Shift] + [Enter]输入):
{=INDEX(A1:A6,MATCH(1,(F1=B1:B6)*(F2=C1:C6),0))}
请参阅下文。...
答案 1 :(得分:1)
通常,=INDEX(MATCH, MATCH)
不是数组公式,而是普通的公式。但是,您的情况有所不同-您不匹配行和列,而是匹配两列,因此应该匹配。数组公式必须使用 Ctrl + Shift + Enter 输入。
如果您有这样的数据:
这是G1中的数组公式:
=INDEX(A1:A6,MATCH(1,(E1=B1:B6)*(F1=C1:C6),0))
这是使用vba的方法:
Public Sub TestMe()
Range("G1").FormulaArray = "=INDEX(A1:A6,MATCH(1,(E1=B1:B6)*(F1=C1:C6),0))"
End Sub
要查看此公式的工作原理,请在“公式”>“评估”选项卡({VERGLEICH
为MATCH
德语)中查看Excel的计算:
答案 2 :(得分:0)
在另一个标签中,转到单元格A1
并输入
='Tab 1'!B1&":"&'Tab 1'!C1
将其复制并粘贴到整个A
列中。
在单元格B1
中输入CD
或其他Cliente值。在单元格B2
中输入D
或其他TIPO值。在B3
中输入
=IFERROR(INDEX('Tab 1'!A:A,MATCH(B1&":"&B2,A:A,0)), "Not found!")
您应该在B3
中得到结果。
答案 3 :(得分:0)
如果在数组公式中可以使用max
=MAX(IF(Table1[[#All],[CLIENTE]]=A2,IF(Table1[[#All],[TIPO]]=B2,Table1[[#All],[ID]])))
使用 Ctrl + Shift + Enter
输入答案 4 :(得分:0)
如果您不介意采用程序化解决方案,则可以使用VBA程序而不是公式来遍历两个选项卡。
在VBA编辑器中,将此代码放置在第一张工作表的区域中,例如“ Sheet 1”或您拥有的任何内容。不要将其放在ThisWorkbook区域。
Private Sub Worksheet_Change()
Dim client As String
Dim type As String
Dim client2 As String
Dim type2 As String
Dim row As Integer
Dim row2 As Integer
Dim lastRow As Integer
Dim lastRowSheet2 As Integer
' Assuming your sheet is setup similar to Vityata's answer
lastRow = Sheets(1).Cells(Sheets(1).Rows.Count, "B").End(xlUp).row
lastRowSheet2 = Sheets(2).Cells(Sheets(2).Rows.Count, "B").End(xlUp).row
For row = 1 to lastRow
client = Worksheets(1).Range("B" & row).Value
type = Worksheets(1).Range("C" & row).Value
For row2 = 1 to lastRowSheet2
client2 = Worksheets(2).Range("B" & row2).Value
type2 = Worksheets(2).Range("C" & row2).Value
If client = client2 And type = type2 Then
Worksheets(1).Range("A" & row).Value = Worksheets(2).Range("A" & row2).Value
End If
Next
Next
End Sub
当然,您需要更改'A','B'和'C'以适合您的工作簿和所需范围。祝你好运。
答案 5 :(得分:0)
谢谢大家支持我。 我开始尝试使用Vityata的建议,并且有效。
我的最终代码是:ActiveCell.Offset(0, -2).FormulaArray = "=INDEX(Table1[ID],MATCH(1,(" & cliente & "=Table1[CLIENTE])*(" & valor & "=Table1[TIPO]),0))"