VB全自动洗衣机为什么出现E2,全自动洗衣机显示e21怎么解决

首页 > 大全 > 作者:YD1662022-12-17 16:03:25

关于双条件查询常见的公式组合,可以查看这篇文章:

https://www.toutiao.com/i6793891504134816270/#comment_area

在文章后面,有位朋友在咨询用vba如何实现这两种类型的查找?

VB全自动洗衣机为什么出现E2,全自动洗衣机显示e21怎么解决(1)

读者咨询

为了让其他朋友也能看到VBA的方法,在此单独一一篇文章的形式,分享出来。


我们先看下我们经常会遇到的两种双条件查询(见下图):

VB全自动洗衣机为什么出现E2,全自动洗衣机显示e21怎么解决(2)

经常会遇到的两种双条件查询


第一种情况的VBA代码:

VB全自动洗衣机为什么出现E2,全自动洗衣机显示e21怎么解决(3)

第一种情况代码执行演示

用数组 字典的方式,实现双条件或多条件查询

Sub 双条件查找情况1()

Dim Arr, a, Dic

Set Dic = CreateObject("scripting.dictionary")

Arr = Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row)

FOR a = 1 To UBound(Arr, 1)

Dic(Arr(a, 1) & "-" & Arr(a, 2)) = Arr(a, 3)

Next

If Dic.exists(Range("E2") & "-" & Range("F2")) Then

Range("G2") = Dic(Range("E2") & "-" & Range("F2"))

Else

MsgBox "没有查询到数据", vbOKOnly vbCritical, "错误"

Exit Sub

End If

End Sub第二种情况的VBA代码:

VB全自动洗衣机为什么出现E2,全自动洗衣机显示e21怎么解决(4)

第二种情况代码执行演示

所用代码如下:


方法一的代码

Sub 双条件查找情况2—1()

Dim Arr, a, b, Dic

Set Dic = CreateObject("scripting.dictionary")

Arr = Range("A1:G" & Cells(Rows.Count, 1).End(xlUp).Row)

For a = 2 To UBound(Arr, 1)

For b = 2 To UBound(Arr, 2)

Dic(Arr(a, 1) & "-" & Arr(1, b)) = Arr(a, b)

Next b

Next a

If Dic.exists(Range("I2") & "-" & Range("J2")) Then

Range("K2") = Dic(Range("I2") & "-" & Range("J2"))

Else

MsgBox "没有查询到数据", vbOKOnly vbCritical, "错误"

Exit Sub

End If

End Sub


方法二的代码:

Sub 双条件查找情况2—2() '此方法类似于INDEX函数

Dim Arr, a, b

On Error Resume Next

Arr = Range("A1:G" & Cells(Rows.Count, 1).End(xlUp).Row)

For a = 2 To UBound(Arr, 1)

If Arr(a, 1) = Range("I2") Then

Exit For

End If

Next a

Do

b = b 1

Loop Until Arr(1, b) = Range("J2") Or b > UBound(Arr, 2)

If a > UBound(Arr, 1) Or b > UBound(Arr, 2) Then

MsgBox "没有查询到数据", vbOKOnly vbCritical, "错误"

Exit Sub

Else

Range("K2") = Arr(a, b)

End If

End Sub


方法三的代码:

Sub 双条件查找情况2—3()

Dim Arr, Brr, a, b

Arr = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)

Brr = Range("A1:G1")

a = Application.WorksheetFunction.Match(Range("I2"), Arr, False)

b = Application.WorksheetFunction.Match(Range("J2"), Brr, False)

Range("K2") = Cells(a, b)

End Sub


代码展示完毕。

代码中用到了数组、字典、工作表函数调用、FOR……NEXT循环、D0……LOOP循环、IF判断、On Error Resume Next容错代码,相关内容后续在分享VBA内容的时候,会有单独说明,希望朋友持续关注。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.