Excel 信息对比_数组版

复制代码
复制代码
Sub LOOKUP_UChur()
    Dim i As Long
    
    '===  sourceWorksheet = 数据源表名称
    Dim sourceWorksheet As Worksheet
    Dim taskWorkSheet As Worksheet
    Dim bgnTime, endTime As Date
    
    '*********************************************
    ' [1] ------  数据源表 *** Sheet 名称
    Set sourceWorksheet = ThisWorkbook.Worksheets("低保数据")
    Const swsh_KeyColName = "B"   ' 关键列  , 身份证号所在的列名称
    Const swsh_BeginRow = 3       ' 开始行号
     
    ' [2] ------  任务表  *** Sheet 名称
    Set taskWorkSheet = ThisWorkbook.Worksheets("扶贫和低保比对")
    Const twsh_KeyColName = "F"   ' 关键列号  , 身份证号所在的列号
    Const twsh_BeginRow = 3       ' 开始行号
     
     
    '*********************************************
    bgnTime = Now()
    Dim arrKeyData() As Variant    ' 这种声明方式是声明一个动态数组
    arrKeyData = sourceWorksheet.Range(swsh_KeyColName & swsh_BeginRow & ":" & swsh_KeyColName & sourceWorksheet.UsedRange.Rows.Count)
 
    For i = twsh_BeginRow To taskWorkSheet.UsedRange.Rows.Count
        Debug.Print "第 ["; i & "]行: 已找到数据:" & taskWorkSheet.Range(twsh_KeyColName & i).Text
        DoEvents
         
        curRow = GetRowNo(arrKeyData, taskWorkSheet.Range(twsh_KeyColName & i).Text)
        If curRow > 0 Then
            '[3]  ???? ===== 任务表 J --> 数据源 A
            taskWorkSheet.Range("G" & i) = sourceWorksheet.Range("C" & swsh_BeginRow + (curRow - 1)).Text
        End If
    Next i
     
    endTime = Now()
    MsgBox ("任务已完成, 处理所需的时间: " & Application.WorksheetFunction.Text(DateDiff("s", bgnTime, endTime) / 3600 / 24, "[H]:mm:ss") & "" & vbCrLf _
             & "*****************************" & vbCrLf & bgnTime & vbCrLf & endTime)

    DoEvents
     
 
End Sub
 
 
Function GetRowNo(ByRef pArrKeyData As Variant, pFindValue As String) As Long
  
    GetRowNo = 0
    ' curRow = Application.Match(pFindValue, pArrKeyData, 0)
    '--  Application.Match  所需的时间比较多 6 秒
    '--  下面的循环方式查找数组 所需的时间   2 秒

    If Not (UBound(pArrKeyData) > 0) Then Exit Function
     
    Dim j As Long
    For j = LBound(pArrKeyData) To UBound(pArrKeyData)
        If Not (IsError(pArrKeyData(j, 1))) Then
            If pArrKeyData(j, 1) =  pFindValue  Then
                GetRowNo = j
                Exit Function
            End If
        End If
        
    Next j
    
    Exit Function
    
            
End Function
 
复制代码

 

复制代码
posted @   麦麦提敏  阅读(681)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示