search两列并从第三个VBA返回值

我的一个同事有一个由3列组成的excel电子表格,希望能够让他们更容易search。

他所拥有的是两个单元格,一个是从第一列input值,第二列是从第二列input值。 他想要做的是在电子表格中search第一列和第二列中同一行中存在值为1和2的实例,然后从位于同一行中的列3返回值。

例如,我有一个如下所示的表格,所以如果他将B和2input到单元格中,那么BP会返回到第三个单元格。

1个AP

B 2 BP

C 3 CP

谢谢

让我们在一个新的Excel模块中创build以下函数:

Function FindValue(rng1 As Range, rng2 As Range) As Variant Dim varVal1 As Variant Dim varVal2 As Variant Dim rngTargetA As Range Dim rngTargetB As Range Dim lngRowCounter As Long Dim ws As Worksheet varVal1 = rng1.Value varVal2 = rng2.Value Set ws = ActiveSheet lngRowCounter = 2 Set rngTargetA = ws.Range("A" & lngRowCounter) Set rngTargetB = ws.Range("B" & lngRowCounter) Do While Not IsEmpty(rngTargetA.Value) If rngTargetA.Value = varVal1 And rngTargetB.Value = varVal2 Then FindValue = ws.Range("C" & lngRowCounter).Value Exit Function End If lngRowCounter = lngRowCounter + 1 Set rngTargetA = ws.Range("A" & lngRowCounter) Set rngTargetB = ws.Range("B" & lngRowCounter) Loop ' if we don't find anything, return an empty string ' FindValue = "" End Function 

上面的函数需要两个范围值,所以你可以像使用Excel中的其他函数一样使用它。 使用上面提供的示例,将这些单元格复制到单元格A2:C5中。 接下来,在单元格A1中放入A 在B1格放1 。 在C1中,put =FindValue(A1,B1) 。 这将执行上面的代码,并返回一个匹配,如果它发现。

此外,如果您更改单元格A1或B1的“input值”,您的答案将相应更新。

使用ADO的另一种可能性:

 Dim cn As Object Dim rs As Object Dim strFile As String Dim strCon As String Dim strSQL As String Dim r1 As Range Dim r2 As Range Dim r3 As Range strFile = ActiveWorkbook.FullName ''Note HDR=No, so F1,F2 etc is used for column names ''If HDR=Yes, the names in the first row of the range ''can be used. strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _ & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";" Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") Set r1 = Worksheets("Sheet11").Range("F1") Set r2 = Worksheets("Sheet11").Range("F2") Set r3 = Worksheets("Sheet11").Range("F3") cn.Open strCon ''Case sensitive, one text (f1), one numeric (f2) value strSQL = "SELECT F3 FROM [Sheet11$A1:C4] WHERE F1='" & r1.Value _ & "' AND F2=" & r2.Value rs.Open strSQL, cn, 3, 3 ''Copies all matches r3.CopyFromRecordset rs 

如果他可以忍受上面提到的左边的另一个柱子(你可以从正常的视angular隐藏),你可以不使用任何VBA。

可以使用VLOOKUP(x,A1:Dn,4) – 其中x是string(“A1”,“B2”),等等),他希望查找,n是数据集中的行数。

希望有所帮助。