1.在对数据表记录进行 *** 作时,有一个记录指针,指向当前的记录。
图1中假设rs返回若干条记录,通常正确执行rs.Open后,记录指针指向首记录。此时,rs的Bof属性和Eof属性都为False。
可以使用rs的MovNext方法把记录指针向记录集的前(上)部移动,也可以使用rs的MovePrevious方法把记录指针向记录集的后(下)部移动。在记录指针的移动过程中,只要记录指针指向一条存在的记录,rs的Bof属性和Eof属性都将保持为False。
2.当记录指针向前(上)部移动到数据表外时,rs的Bof属性变成True,而Eof属性仍然是False,见图2;
而当记录指针向后(下)部移动到数据表外时,rs的Bof属性仍然是False,而Eof属性变成True,见图3。
3.当rs返回的记录为零时,rs的Bof属性和Eof属性都为True。见图4。
详细请见下面图片。
EXCEL 判断某一单元格值是否包含在某一列中,可以使用COUNTIF函数,函数形式:=IF(COUNTIF(目标列,判断列首个单元格)>0,"是","否"),示例步骤如下:1.鼠标左键点击需要输入判断结果的单元格,如下图红框所示;
2.然后在fx后面输入“=IF(COUNTIF(A:A,B2)>0,"有","无")”,如下图红框所示;
3.然后按回车键,即可判断出第一个值是否在判断列里面,如下图红框所示;
4.然后利用填充柄下拉选择所有需要判断的数值的输出单元格,如下图红框所示;
5.就会自动套用公式,对其他的数值做出判断,输出判断结果
可能跟想象的不太一样,一本字典能称为秘密武器吗?其实,在这里更准确的说法应该是hashmap,它有一个非常好的优势,就是它的算法复杂度为O(1),注意这个1是个常数,也就是一,二,三的一。按算法来说,一般随着计算量的增加,我们要解决问题的难度也会加大。比如我们要在15个人里面看看有那几个人手里拿着旗子?可能一眼就能得到答案:3。但是如果现在有100万人呢?问题解决的难度就变得非常大了(O(n))。
a6ea16bf688852f9b691018b41ba5e3d.png
O(1)的算法有一个非常的好的特性,不管数据多寡,它总是以固定的时间将问题的答案抛给提问者。就像面对一面魔镜,只要问一个问题,不管问题多难,魔镜都能瞬间给出答案。而hashmap,或字典就有这样的能力。
03 VBA字典
VBA的自带数据类型里并没有字典。需要我们自己引入。VBA有个古老的Scripting库,从Scripting中我们可以引入Dictionary,也就是常说的字典。引入语法如下
Set dict = CreateObject("Scripting.Dictionary")
字典的主要属性如下
CompareMode Count Item key
方法如下
Add Exists Items Keys Remove RemoveAll
Dictionary 跟我们日常使用的字典相似点如下:
Dictionary的键相当于我们字典要查的”词“
Dictionary的值相当于我们字典中查到”词的解释“
并且一个dictionary实例的键是不能重复的。
今天主要用到的属性跟方法是
Item=>对某个键赋值
Add=>增加一对键、值
Exists=>判断某个键是否存在
关于如何使用VBA的Dictionary,先告一段落,接下来要解决我们开头的那个应用场景
04 解决问题 第一个版本
在Excel表中模拟了差不多50万行的记录,有三个字段,分别是索引字段 索引值1 索引值2
这些数据都是随机生成的,并没有什么意义。其中索引字段是从26个英文子母中随机挑选了7个,索引值1跟2随机从1到200中取了个整数。
接下来,我从索引字段中随机抽取了差不多1万个待检索值,目标是在结果中显示内容。
4c7bd7b4985d2417f298bec31e54f2c6.png
首先,我们选中f4:f10000,在其中填入自定义函数NEWVLOOKUP,这个函数有三个参数,第一个是要查询的一列数组,也就是E4:E10000,第二个参数是目标索引的列,也就是A3:A500000,第三个参数就是要索引的内容,在这里我们选择索引自身,也就是1
查找A列的数据,是否在 数据库这个表的A1:Z100这个区域存在?如果存在,就在B列显示 有Sub 查找()
Dim I%, X, C
For I = 2 To Range("A65536").End(xlUp).Row
With Sheets("数据库").Range("a1:Z100")
Set C = .Find(Cells(I, "a"), LookIn:=xlValues)
X = C.Row
End With
If X >0 Then
Cells(I, "b") = "有"
End If
Next
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)