在vba宏中写一个函数来查找cell的值

时间:2016-01-03 17:11:47

标签: excel excel-vba vba

我在宏中编写了一个函数,它没有很好地响应。 宏的描述:

我想通过3个字符找到一个单元格的值

  1. 项目
  2. 我的商品质量
  3. 日期
  4. 我想编写一个可以在任何工作表中接受不同变量范围的函数,并搜索这3个字符以找到该值。

    我的代码在这里

    Function findvalue(x1 As Variant, x2 As Range, x3 As Variant, x4 As Range, x5 As Variant, x6 As Range)
        Dim cell As Range
        Dim cell2 As Range
        Dim cell3 As Range
    
        For Each cell In x2 
            If x1 = cell.Value Then
                For Each cell2 In x4
                    If x3 = cell2.Value Then
                        For Each cell3 In x6
                            If x5 = cell3.Value Then
                                findvalue = Cells(cell2, cell3)
                            End If
                        Next cell3
                        Exit For
                    End If
                Next cell2
                Exit For
            End If
        Next cell
    End Function
    

    项目和项目的质量应该在列中,日期应该在行

    我附上了我的文件

    Sheet1包含我的数据,Sheet2我希望找到我的价值

    Download my sheet

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,这个公式已经作为数组公式存在,不需要重新发明。我没有下载你的文件,就像其他我不相信的网站一样。

我把一些垃圾数据扔到一起:enter image description here

然后设置一个快速查找字段,如下所示:

enter image description here

在B21中的下列公式中:

=INDEX(C2:O13,MATCH(B19,IF(A2:A13=A19,B2:B13),0),MATCH(C19,C1:O1,0))

这是一个数组公式,需要使用Ctrl-Shift-Enter确认。

如果你想要一个UDF,那么使用它:

Function findvalue(x1 As Variant, x2 As Range, x3 As Variant, x4 As Range, x5 As Variant, x6 As Range)
Dim i&, j&
Dim rw&, clm&
For i = 1 To x2.Rows.Count
    If x2.Cells(i, 1) = x1 And x4.Cells(i, 1) = x3 Then
        rw = x2.Cells(i, i).Row

         For j = 1 To x6.Columns.Count
            If x6.Cells(1, j) = x5 Then
                clm = x6.Cells(1, j).Column
                findvalue = ActiveSheet.Cells(rw, clm)
                Exit Function
            End If
        Next j
    End If
Next i

findvalue = "N/A"
End Function