利用了VBA神器,多工作表的大数据搜索,真的非常简单
2024-07-10 0
在过去的两周里,我一直在解释如何使用VBA在EXCEL中跨多个工作表查询大数据。今天我总结一下这两周的内容。想要使用这些程序的朋友可以复制下面的代码放入编译器中直接使用。
1SubKK()
2Sheets('SHEET1')选择
3I2
4DoWhileCells(I,1)''
5Cells(I,1)选择
6TT细胞(I,1)
7细胞(I,2)''
8
9SetFJXSheets('A')Range('A1:A'Sheets('A')Range('A1')End(xlDown)Row)Find(TT,AFTER:[A1],LOOKAT:xlWhole)
10IfNotFJXIsNothingThenCells(I,2)Sheets('A')Cells(FJXRow,2)
11
12SetFJXSheets('B')Range('A1:A'Sheets('B')Range('A1')End(xlDown)Row)Find(TT,AFTER:[A1],LOOKAT:xlWhole)
13IfNotFJXIsNothingThenCells(I,2)Sheets('B')Cells(FJXRow,2)
14
15SetFJXSheets('C')Range('A1:A'Sheets('C')Range('A1')End(xlDown)Row)Find(TT,AFTER:[A1],LOOKAT:xlWhole)
16IfNotFJXIsNothingThenCells(I,2)Sheets('C')Cells(FJXRow,2)
17号
18SetFJXSheets('D')Range('A1:A'Sheets('D')Range('A1')End(xlDown)Row)Find(TT,AFTER:[A1],LOOKAT:xlWhole)
19IfNotFJXIsNothingThenCells(I,2)Sheets('D')Cells(FJXRow,2)
20II1
21套FJX无
22循环
23结束子
代码片段:
工作表截图:注意名称
这是代码的逐行解释:
1SubKK()’KK给出程序的名称
2Sheets('SHEET1')Select'是指选择工作表sheet1并进行操作
3I2'是给变量i赋一个初始值,一般使用DimiasInteger声明。这里可以简单地使用Dimi或者保持简单直接使用。然而,这并不意味着VBA是一种动态语言。相反,它只是说明了VBA作为静态语言的灵活性。
4DoWhileCells(I,1)''DOWHILE是一个循环,循环标识是WHILE循环,循环条件是指第i行第一个单元格不为空才能建立循环。变量为i,条件是第i行之前的第一个单元格为空。
5Cells(I,1)Select'必须找到I行的单元格,这也是为了程序的可见性。
6TTCells(I,1)',然后提取其值并将其分配给TT。这也是为了以后操作方便。这里也直接使用TT,省略了声明语句。
7Cells(I,2)''''如果要清除另一个单元格,两个中间没有任何内容的半角双引号是空值,与空格不同,空格是''。
8
9SetFJXSheets('A')Range('A1:A'Sheets('A')Range('A1')End(xlDown)Row)Find(TT,AFTER:[A1],LOOKAT:xlWhole)
'SET表示FJX等于该值(这里FJX也必须提前声明,这个过程省略),
Sheets('A')指名为A的工作表;
Range('A1:A'Sheets('A')Range('A1')End(xlDown)Row)指从单元格A1开始,向下到最后一个非空白单元格的范围;
叶子('A')Range('A1:A'Sheets('A')Range('A1')End(xlDown)Row)指的是A的工作表中从A1到最后一个不为空的单元格范围;
Find(TT,AFTER:[A1],LOOKAT:xlWhole)想要查找值为TT的单元格。查询从A1开始。该区域与后续操作之间存在间隙。
这会分配FJX搜索结果。
10IfNotFJXIsNothingThenCells(I,2)Sheets('A')Cells(FJXRow,2)
'ifthen语句ifthen查询的结果放在FJX中。Nothing意味着没有找到结果。给它一个逻辑否定,即在前面加一个NOT,表示不为Null就找到FJX。如果发现了该怎么办?fjxRow指的是数据所在的行号。Sheets('A')Cells(FJXRow,2)是工作表A中找到的行号的第二个单元格的值,Cells(I,2)Sheets('A')。Cells(FJXRow,2)表示第i行第二个单元格的值将与工作表A上找到的行号第二个单元格的值相同。哪个工作表是Cells(I,2)?指工作表(“SHEET1”)。
11
12SetFJXSheets('B')Range('A1:A'Sheets('A')Range('A1')End(xlDown)Row)Find(TT,AFTER:[A1],LOOKAT:xlWhole)
13IfNotFJXIsNothingThenCells(I,2)Sheets('B')Cells(FJXRow,2)'这两行与第9行和第10行类似,处理对工作表B的继续搜索操作。找到后,第13行将执行与第10行中的操作相同的操作。注意:首先,xlwhole指的是查找整个单元格匹配。其次,字符串连接符号是&,不能使用加号。如果使用cells,则必须在其前面使用With。
14
15SetFJXSheets('C')Range('A1:A'Sheets('C')Range('A1')End(xlDown)Row)Find(TT,AFTER:[A1],LOOKAT:xlWhole)
16IfNotFJXIsNothingThenCells(I,2)Sheets('C')Cells(FJXRow,2)
第15行和第16行是工作表“C”搜索,含义是:首先搜索工作表“A”,然后搜索“B”,然后再次搜索“C”。找到后,将此行第二个单元格的VALUE赋给Sheets('SHEET1')工作表第一行第二个单元格的值,实现跨表查询。
17号
18SetFJXSheets('D')Range('A1:A'Sheets('D')Range('A1')End(xlDown)Row)Find(TT,AFTER:[A1],LOOKAT:xlWhole)
19IfNotFJXIsNothingThenCells(I,2)Sheets('D')Cells(FJXRow,2)
第18行和第19行对工作表D执行查找。总之,从第9行到第19行总共运行了4个工作表
20II1'I的值加1
2121SetFJXNothing'且FJX为空以准备下一轮搜索
22Loop程序回调DOWHILE的第4行
23EndSub程序结束。
有兴趣的朋友可以尝试使用一下。如果效果不错,别忘了分享哦。如果有改进,请不要忘记分享代码。
分享成果,享受正能量
本站文章均由用户上传或转载而来,该文章内容本站无法检测是否存在侵权,如果本文存在侵权,请联系邮箱:2287318951@qq.com告知,本站在7天内对其进行处理。