相关文章推荐
帅呆的玉米  ·  连接opcserver时报错 ...·  5 月前    · 
憨厚的小马驹  ·  Wireshark中[TCP Window ...·  7 月前    · 
要出家的烈马  ·  find -exec ...·  1 年前    · 
英俊的野马  ·  sql多列求和计算列-掘金·  1 年前    · 

作工程报价,经常需要结合国家的定额来做报价单。根据定额的编号,很容易获得定额的价格,方便报价。以前做报价单的时候,都是用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中第一个匹配项的第二列。