Excel VBA类似Vlookup函数功能,想要实现同时可正向和反向查找
VBA写了类似Vlookup函数的功能,想要实现同时可正向和反向查找,代码是利用InputBox选择的区域当类似Vlookup第二个参数。怎样判断:如果InputBox选...
VBA写了类似Vlookup函数的功能,想要实现同时可正向和反向查找,代码是利用InputBox选择的区域当类似Vlookup第二个参数。怎样判断:如果InputBox选择是从左到右(如A1:C5)则正向查找返回C列值;如果InputBox选择是从右到左(如C1:A5)则逆向查找返回A列;求助怎样判断InputBox的选区是:从左到右还是从右到左选择的,谢谢!
展开
5个回答
展开全部
请确认百万条级的东西要在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选择区域,得出是要正向查找还是反向查找;请帮忙看看是否有代码可以实现,谢谢
追答
把你的代码贴上来,装两次字典即可。
展开全部
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都是同起点行号且只有单列的数组单元。上面自定义函数应该没毛病,可公式直接引用。自己测试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那你应该使用鼠标按下,弹起事件啊
捕捉是从左到右,还是从右到左
捕捉是从左到右,还是从右到左
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接用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 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
这个是调试过的,应该没问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写代码来实现
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询