【Excel VBA编程】坐标定位查询:让数据筛选从“大海捞针”变为“精准定位
- 2026-11-02 06:55:25
总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
我们在Excel数据处理中,经常需要根据特定的行和列两个维度来交叉定位获取数据,这就是坐标定位查询
坐标定位查询如同为数据世界安装了一套精准的GPS导航系统,将抽象的数据关系转化为直观的“行-列”坐标,改变我们与数据表格的交互方式
接下来就介绍一种利用VBA编码方式,来实现坐标定位查询
1 功能需求
如下图所示,数据从第2行开始(第1行为表头),A列为产品信息,B~E列是4个销售员对应的销量,且数据不重复

根据以上数据表格,按照销售员和产品进行查询并将结果输出到I列

2 代码及说明
2.1 操作步骤
打开你的.xlsm文档
按下 Alt + F11 快捷键,打开VBA编辑器
在VBA编辑器左侧的“工程资源管理器”窗口中,右键点击你的工作簿名称,选择“插入” -> “模块” 将文中完整代码粘贴到新打开的模块代码窗口中
以上操作完成后,回到Excel数据表格界面,依次选择【开发工具】【宏】宏名“MultiConditionLookup”执行即可
2.2 代码实现
参考代码
Sub MultiConditionLookup()Dim dict As ObjectDim ws As WorksheetDim srcData As Variant, queryData As VariantDim i As Long, j As LongDim lastRowSrc As Long, lastRowQuery As LongDim key As StringDim salesperson As String, product As StringDim salespersonCol As LongApplication.ScreenUpdating = False' 设置工作表:当前活动工作表Set ws = ThisWorkbook.ActiveSheetSet dict = CreateObject("Scripting.Dictionary")lastRowSrc = ws.Cells(ws.Rows.Count, "A").End(xlUp).RowsrcData = ws.Range("A2:E" & lastRowSrc).Value'字典构建For i = 1 To UBound(srcData, 1)product = Trim(CStr(srcData(i, 1)))For j = 2 To 5salesperson = Trim(ws.Cells(1, j).Value)key = salesperson & "|" & productdict(key) = srcData(i, j)Next jNext i'查询lastRowQuery = ws.Cells(ws.Rows.Count, "G").End(xlUp).RowIf lastRowQuery >= 2 ThenqueryData = ws.Range("G2:H" & lastRowQuery).ValueFor i = 1 To UBound(queryData, 1)salesperson = Trim(CStr(queryData(i, 1)))product = Trim(CStr(queryData(i, 2)))If salesperson = "" Or product = "" Thenws.Cells(i + 1, "I").Value = "条件不完整"Elsekey = salesperson & "|" & productIf dict.Exists(key) Thenws.Cells(i + 1, "I").Value = dict(key)Elsews.Cells(i + 1, "I").Value = "未找到"End IfEnd IfNext iElseMsgBox "未找到查询条件(G列和H列为空)。", vbInformationEnd IfSet dict = NothingApplication.ScreenUpdating = TrueMsgBox "查询完成!结果已输出至I列。", vbInformationEnd Sub
其中,代码核心逻辑是字典构建:
代码首先遍历数据源(A~E列)的每一行,对于每一行,再遍历B~E四个销售员列,来构建一个唯一的“销售员|产品”字符串作为字典的键,并将对应单元格的销量作为值存入字典,最终效果如下图所示:

在查询时,代码遍历G列和H列的每一对查询条件。用同样的方式构建“销售员|产品”键,就可以直接在字典中查找了
3 结尾
好了,今天的编程知识到此结束了。又到每日分享冷知识的时间了,今天聊一聊汉字
汉字在计算机中并非直接存储其“形状”,而是存储其对应的编码值。平时我们通过键盘输入汉字,看似简单,其实每一个汉字从键盘输入到屏幕显示,都要经过“输入码-机内码-字形码”三层编码转换
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识