VBA代码开发需求:批量匹配Sheet2与Google maps起止点并返回距离
遍历Sheet2所有起点终点并获取Google Maps距离的VBA解决方案
看了你的现有代码,它目前只处理了Sheet2中B2这一个单元格的情况,没有实现遍历所有起点(A列)和终点(第1行)的需求,而且依赖Select和ActiveCell的写法不仅效率低,还容易因为操作界面导致错误。下面是优化后的完整代码,能实现你要的遍历功能:
Sub CalculateAllDistances() ' CalculateAllDistances Macro ' 遍历Sheet2所有起点与终点,获取Google Maps计算的距离 ' Keyboard Shortcut: Ctrl+Shift+D Dim wsGM As Worksheet Dim wsSheet2 As Worksheet Dim lastStartRow As Long Dim lastEndCol As Long Dim startRow As Long Dim endCol As Long ' 定义工作表对象,避免频繁切换和Select操作 Set wsGM = ThisWorkbook.Sheets("Google maps") Set wsSheet2 = ThisWorkbook.Sheets("Sheet2") ' 获取Sheet2中最后一个有数据的起点行(A列) lastStartRow = wsSheet2.Cells(wsSheet2.Rows.Count, "A").End(xlUp).Row ' 获取Sheet2中最后一个有数据的终点列(第1行) lastEndCol = wsSheet2.Cells(1, wsSheet2.Columns.Count).End(xlToLeft).Column ' 遍历所有起点(从A2开始,默认A1是表头) For startRow = 2 To lastStartRow ' 遍历所有终点(从B1开始,默认A1是起点列标题) For endCol = 2 To lastEndCol ' 将当前起点写入Google maps的C8 wsGM.Range("C8").Value = wsSheet2.Cells(startRow, "A").Value ' 将当前终点写入Google maps的C9 wsGM.Range("C9").Value = wsSheet2.Cells(1, endCol).Value ' 等待Google Maps公式计算完成(如果是实时API调用,可根据需要添加延时) DoEvents ' 将计算得到的距离写入Sheet2对应单元格 wsSheet2.Cells(startRow, endCol).Value = wsGM.Range("C18").Value Next endCol Next startRow ' 释放对象,避免内存占用 Set wsGM = Nothing Set wsSheet2 = Nothing MsgBox "所有距离计算完成!", vbInformation End Sub
关键改进说明:
- 抛弃Select/ActiveCell:直接通过工作表对象引用单元格,大幅提升代码稳定性和执行速度,不会因为手动点击工作表而打断流程。
- 动态适配数据范围:用
End(xlUp)和End(xlToLeft)自动识别Sheet2中起点、终点的最后一行/列,不用硬编码范围,数据增减都能自动适配。 - 双重循环全覆盖:外层循环遍历A列所有起点,内层循环遍历第1行所有终点,确保所有起点-终点组合都被处理。
如果你的Google Maps距离计算依赖外部API且存在延迟,可以在写入C8/C9后添加延时代码,比如:
Application.Wait Now + TimeValue("00:00:02") ' 等待2秒,可根据实际情况调整时长
内容的提问来源于stack exchange,提问作者Loop Dish
相关产品推荐
相关产品推荐

