总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
我们在Excel数据处理中,经常需要根据特定的行和列两个维度来交叉定位获取数据,这就是坐标定位查询
坐标定位查询如同为数据世界安装了一套精准的GPS导航系统,将抽象的数据关系转化为直观的“行-列”坐标,改变我们与数据表格的交互方式
接下来就介绍一种利用VBA编码方式,来实现坐标定位查询
1 功能需求
如下图所示,数据从第2行开始(第1行为表头),A列为产品信息,B~E列是4个销售员对应的销量,且数据不重复
根据以上数据表格,按照销售员和产品进行查询并将结果输出到I列
2.1 操作步骤
- 在VBA编辑器左侧的“工程资源管理器”窗口中,右键点击你的工作簿名称,选择“插入” -> “模块”
以上操作完成后,回到Excel数据表格界面,依次选择【开发工具】【宏】宏名“MultiConditionLookup”执行即可
2.2 代码实现
参考代码
Sub MultiConditionLookup() Dim dict As Object Dim ws As Worksheet Dim srcData As Variant, queryData As Variant Dim i As Long, j As Long Dim lastRowSrc As Long, lastRowQuery As Long Dim key As String Dim salesperson As String, product As String Dim salespersonCol As Long Application.ScreenUpdating = False ' 设置工作表:当前活动工作表 Set ws = ThisWorkbook.ActiveSheet Set dict = CreateObject("Scripting.Dictionary") lastRowSrc = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row srcData = ws.Range("A2:E" & lastRowSrc).Value '字典构建 For i = 1 To UBound(srcData, 1) product = Trim(CStr(srcData(i, 1))) For j = 2 To 5 salesperson = Trim(ws.Cells(1, j).Value) key = salesperson & "|" & product dict(key) = srcData(i, j) Next j Next i '查询 lastRowQuery = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row If lastRowQuery >= 2 Then queryData = ws.Range("G2:H" & lastRowQuery).Value For i = 1 To UBound(queryData, 1) salesperson = Trim(CStr(queryData(i, 1))) product = Trim(CStr(queryData(i, 2))) If salesperson = "" Or product = "" Then ws.Cells(i + 1, "I").Value = "条件不完整" Else key = salesperson & "|" & product If dict.Exists(key) Then ws.Cells(i + 1, "I").Value = dict(key) Else ws.Cells(i + 1, "I").Value = "未找到" End If End If Next i Else MsgBox "未找到查询条件(G列和H列为空)。", vbInformation End If Set dict = Nothing Application.ScreenUpdating = True MsgBox "查询完成!结果已输出至I列。", vbInformationEnd Sub
其中,代码核心逻辑是字典构建:
代码首先遍历数据源(A~E列)的每一行,对于每一行,再遍历B~E四个销售员列,来构建一个唯一的“销售员|产品”字符串作为字典的键,并将对应单元格的销量作为值存入字典,最终效果如下图所示:
在查询时,代码遍历G列和H列的每一对查询条件。用同样的方式构建“销售员|产品”键,就可以直接在字典中查找了
3 结尾
好了,今天的编程知识到此结束了。又到每日分享冷知识的时间了,今天聊一聊汉字
汉字在计算机中并非直接存储其“形状”,而是存储其对应的编码值。平时我们通过键盘输入汉字,看似简单,其实每一个汉字从键盘输入到屏幕显示,都要经过“输入码-机内码-字形码”三层编码转换
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识