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

Excel技术问询:如何按姓名和姓氏查找当前行的历史薪资记录

实现双条件匹配的Excel旧薪资查找方案

需求说明

在Excel表格中,需根据当前行的**Name(姓名)和Surname(姓氏)双条件,查找当前行之前的匹配记录,将对应Current Salary(当前薪资)的值填入该行的Old Salary(旧薪资)**列。例如:

IDNameSurnameCurrent SalaryOld Salary
1LisaSmith10000
2ThomasPhu5000
3LisaFranklin90000
3LisaSmith2000010000(匹配第一行的姓名+姓氏,取对应薪资)

修改后的VBA函数(双条件适配)

针对你提供的单条件VBA函数,修改为支持双条件匹配且仅查找当前行之前记录的版本:

Function OldSalaryLookup(LookupName As String, LookupSurname As String, DataRange As Range) As Variant
    Dim currentRow As Long
    Dim i As Long
    ' 获取当前公式所在的行号
    currentRow = Application.Caller.Row
    
    ' 从当前行的上一行开始,向上遍历数据区域查找匹配项
    For i = currentRow - 1 To DataRange.Row Step -1
        ' 确保遍历的行在指定的数据范围内
        If i >= DataRange.Row Then
            ' 匹配姓名和姓氏双条件
            If DataRange.Cells(i - DataRange.Row + 1, 2) = LookupName And _
               DataRange.Cells(i - DataRange.Row + 1, 3) = LookupSurname Then
                ' 返回对应行的Current Salary(第4列)
                OldSalaryLookup = DataRange.Cells(i - DataRange.Row + 1, 4)
                Exit Function
            End If
        End If
    Next i
    
    ' 无匹配记录时返回空值
    OldSalaryLookup = ""
End Function

使用方法

  1. 按Alt + F11打开VBA编辑器,插入一个新模块,将上述代码粘贴进去。
  2. 返回Excel,在Old Salary列的第一个数据单元格(比如E2)中输入公式:
    =OldSalaryLookup(B2, C2, $A$1:$D$100)
    
    • B2:当前行的姓名单元格
    • C2:当前行的姓氏单元格
    • $A$1:$D$100:包含所有数据的区域(根据实际数据范围调整)
  3. 下拉填充公式到所有需要计算的行即可。

非VBA替代方案(公式实现)

如果不想使用VBA,可以直接用XLOOKUP函数(适用于Excel 365/2021及以上版本):

=XLOOKUP(B2&C2, $B$1:B1&$C$1:C1, $D$1:D1, "", 0, 1)
  • B2&C2:拼接当前行的姓名和姓氏作为查找值
  • $B$1:B1&$C$1:C1:仅查找当前行之前的姓名+姓氏拼接区域
  • $D$1:D1:对应区域的Current Salary
  • 最后一个参数1表示从上到下查找第一个匹配项(即最早的历史记录)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:10:51