You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel for Mac VBA实现匹配两列相同值填充对应单元格数据

优化后兼容Excel for Mac的VBA宏代码

以下代码采用字典预存球员-积分映射关系,仅需2次遍历即可完成所有匹配,相比原硬编码写法效率提升明显,且支持任意数量的球员数据,完全兼容Mac版Excel:

Sub fantasyPlayer()
    Dim wb As Workbook, ws As Worksheet
    Dim lastRowA As Long, lastRowC As Long, i As Long
    Dim playerDict As Object
    
    ' 晚绑定创建字典,无需提前引用库,适配Mac版Excel
    Set playerDict = CreateObject("Scripting.Dictionary")
    Set wb = ActiveWorkbook
    Set ws = ActiveSheet
    
    With ws
        ' 获取C列、A列最后有数据的行号
        lastRowC = .Cells(.Rows.Count, "C").End(xlUp).Row
        lastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row
        
        ' 遍历C、D列,预存球员姓名和对应积分到字典
        For i = 2 To lastRowC
            If Not playerDict.Exists(.Range("C" & i).Value) Then
                ' 若C列有重名球员,默认保留第一个出现的积分,如需保留最后一个可去掉上面的If判断
                playerDict(.Range("C" & i).Value) = .Range("D" & i).Value
            End If
        Next i
        
        ' 遍历A列,匹配字典内容直接填充B列
        For i = 2 To lastRowA
            If playerDict.Exists(.Range("A" & i).Value) Then
                .Range("B" & i).Value = playerDict(.Range("A" & i).Value)
            End If
        Next i
    End With
    
    ' 释放对象
    Set playerDict = Nothing
    Set ws = Nothing
    Set wb = Nothing
End Sub

补充说明

  • 代码默认C列无重复球员,若存在重名会保留第一个出现的球员积分,如需保留最后一次出现的积分,删除预存字典环节的If Not playerDict.Exists判断即可
  • 所有操作均在内存中完成匹配,不会产生多余的单元格读写操作,数据量较大时也能保持很高的运行速度

内容的提问来源于stack exchange,提问作者Jason McCoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:24:02