作工程报价,经常需要结合国家的定额来做报价单。根据定额的编号,很容易获得定额的价格,方便报价。以前做报价单的时候,都是用VlookUP函数来查找定额编号在反馈相应的价格。今天要讲的例子就是用VBA取代Vlookup函数。
报价单往往都有很多行。快速的数据处理,用VBA明显会比VlookUP要快的多。
问题如下:
解决的思路详解:
1:为了运行的速度,把定额工作表里面的数据,全部放入arr数组;
2:把定额编号作为字典的key,定额工作表里面的 项目名称+单位+数量作为字典的item。本例会把这三项数据,放入数组装入字典。 及字典套数组
3:查找字典的key,并输出数组。
代码运行的结果如下:
作工程报价,经常需要结合国家的定额来做报价单。根据定额的编号,很容易获得定额的价格,方便报价。以前做报价单的时候,都是用VlookUP函数来查找定额编号在反馈相应的价格。今天要讲的例子就是用VBA取代Vlookup函数。报价单往往都有很多行。快速的数据处理,用VBA明显会比VlookUP要快的多。问题如下:问题描述:1:根据定额工作表里面的定额编号,获取黄色单元格区域的内容;2:在报价单的工作里面...
<br />Excel里有
Vlookup
函数,查找匹配数据非常方便,在
VBA
里,也可以用worksheetfunction.
vlookup
方法来调用,今天我介绍一个另一种使用字典(dictionary)+数组的方法,速度也非常快。<br /> <br />数据源图片:<br /><br /> <br />代码:<br />Sub test()
Dim data, temp, arr
Dim d
Dim i&, k&
Set d = CreateObject("scri
SUB
代替
VLOOKUP
()
Dim d, ar, br, cr, wb As Workbook
Set d = CreateObject("Scripting.Dictionary")
br = Worksheets("Sheet1").[A1].CurrentRegion '需要配置的数据表
ar = Worksheets("R").[A1].CurrentRe...
'双匹配查询,和
VLookUp
函数类似,不同的是可以匹配2个字段KeyCell匹配数据的第一列,MatchCell 匹配数据的第MatchIndex 列,如果2个都相等则返回数据区域第ReturnIndex列的值
'KeyCell:第一列匹配的单元格
'MatchCell:第二个匹配项目,匹配第MatchIndex列
'Zone :数据区域
'MatchIndex:第二项匹配的列序号
'ReturnIndex:返回值的列序号
Function VlookMatch(KeyCell As Range, Mat
大量的
vlookup
会吃掉excel内存,导致文件变得很慢
下面提供一段
vba
的代码,让你在
vba
内部实行和
vlookup
完全一致的能力
因为使用的是在数组中比对数据的做法,计算速度会比在表内计算要提高数倍
在数据非常大量的情况下很适合使用
缺点是只能在
vba
内部使用,在外部不会留下函数,修改也只能在
vba
内部修改
以下是简单的代码外加注释说明
Function A_
Vlookup
()
Dim Lsr As Long, SHT
VLOOKUP
函数功能是按列查找、最终返回该列所需查询所对应的值,是Excel中广泛应用的查找、核对的函数。但局限性在于,只能返回匹配到第1个值,如果需要返回指定第N个值,就需要编写自定义函数进行扩展
Function
VLOOKUP
_INDEX(lookup_value As String, table_array As Range, Optional col_index As Integer = 2, Optional index As Integer = 1) As String
'函数定义V
Function my
VLOOKUP
(lookup_value As Variant, table_array As Range, col_index_num As Integer)
Dim lookup_array() As Variant
Dim i As Integer
'将表格数据存储到数组中
lookup_array = table_array.Value
'循环查找匹配项
For i = LBound(lookup_array) To UBound(lookup_array)
If lookup_array(i, 1) = lookup_value Then
my
VLOOKUP
= lookup_array(i, col_index_num)
Exit Function
End If
Next i
'如果没有找到匹配项,则返回错误
my
VLOOKUP
= CVErr(xlErrNA)
End Function
使用此代码,可以像使用
VLOOKUP
函数一样使用my
VLOOKUP
函数。例如,要在A1单元格中查找值为"apple"的单元格的第二列,请使用以下公式:
=my
VLOOKUP
("apple", A1:B10, 2)
这将返回表格范围A1:B10中第一个匹配项的第二列。