Excel VBA类似Vlookup函数功能,想要实现同时可正向和反向查找

发布网友 发布时间:2022-04-23 11:17

我来回答

5个回答

热心网友 时间:2023-10-12 04:44

请确认百万条级的东西要在EXCLE中查么?会非常慢的,出一个简单的循环,表达一下达成的意思。

Function nlookup(rng1 As Range, rng2 As Range, col As Integer, n As String)
'n = InputBox("确定顺序,请输入Y或N,N为反查")
Dim icol%, irow%, i%
icol = rng2.Columns.Count
irow = rng2.Rows.Count
If n = "N" Then
    For i = 1 To irow
       If rng1 = rng2.Cells(i, icol) Then
       nlookup = rng2.Cells(i, icol - col + 1)
        Exit For
    End If
    Next
Else
    For i = 1 To irow
       If rng1 = rng2.Cells(i, 1) Then
       nlookup = rng2.Cells(i, col)
       Exit For
       End If
    Next
End If
End Function追问谢谢您的关注,因为工作中使用比较频繁,我用的字典+数组方式写的,正查已OK;已用一个inputbox选择区域当类似Vlookup第二个参数;为了代码的通用性,所以想要可以加句代码判断出inputbox选择区域,得出是要正向查找还是反向查找;请帮忙看看是否有代码可以实现,谢谢

追答把你的代码贴上来,装两次字典即可。

热心网友 时间:2023-10-12 04:45

vlookup(条件,条件区域,匹配区域)
你的正反向查找是个什么概念?
条件存在于条件区域内,匹配匹配区域,存在于匹配区域内,匹配条件区域?
这样写个自定义高数,双向遍历就行了追答

Function  双向lookup(A,B,C)
dim  bc,aa
aa=A.value
for each bc in B
if bc.value=aa then 
双向lookup=C.Parent.cells(bc.row,C.column).value
exit Function
end if
next
for each bc in C
if bc.value=aa then 
双向lookup=B.Parent.cells(bc.row,B.column).value
exit Function
end if
next
end Function

'B和C都是同起点行号且只有单列的数组单元。上面自定义函数应该没毛病,可公式直接引用。自己测试

热心网友 时间:2023-10-12 04:45

那你应该使用鼠标按下,弹起事件啊
捕捉是从左到右,还是从右到左

热心网友 时间:2023-10-12 04:46

直接用VLOOKUP不行吗
for i = 1 to 5
Cells(i, 10) = Evaluate("=VLOOKUP(G" & i & ",IF({1,0},C:C,A:A),2,0)")
NEXT追问数据太大了,有接近一百万行,想写一个通用性强的代码,正向查找现在没问题,逆向不知道该怎么判断出来

追答

这就是逆向查找啊,for i =1 to 1000000,要不把你的代码看看,要快就用find函数查找C列区域,找到后获取行号,返回A列对应行号的单元格如返回cells(i,1)

在C列查找G列对应值,返回A列,写于H列

Sub 宏999()
Dim j%, n, rc, c
On Error Resume Next
rg = Range("G65536").End(xlUp).Row
rc = Range("C65536").End(xlUp).Row
Range("H2:H" & rg).Clear
For j = 2 To rg
c = Range("G" & j).Text
n = Range("C2:C" & rc).Find(What:=c, lookat:=xlWhole).Row
If n <> "" Then
    Range("H" & j) = Range("A" & n)
    n = ""
  End If
 Next 
End Sub
这个是调试过的,应该没问题。

热心网友 时间:2023-10-12 04:47

写代码来实现

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com