yhd-ExcelVBA根据条件查找指定文件的数据填写到当前工作表指定列

2022-10-25 13:56:29 浏览数 (1)

yhd-ExcelVBA根据条件查找指定文件的数据填写到当前工作表指定列

【问题】当我们要用一个表的数据来查询另一个表的数据时,我们常常是打开文件复制数据源表的数据到当前文件新建一个数据表,再用伟大的VLookup,查询过来。再删除掉数据源,这样才完成。

【解决方法】个人感觉这样不够快,所以想了一下方法,设计出如下的东东

【功能与使用】

  1. 设置好要取“数据源”的文件路径
  2. data_key_col = "B" data_item_col = "V"为数据源的key列与item列
  3. this**是当前的数据表的要的东东
代码语言:javascript复制
Sub getFiledata_to_activesheet()
    Dim mydic As Object, obj As Object, main_sht As Worksheet
    Dim Urng As Range
    Dim arr, brr, temp_rr()
    Set mydic = CreateObject("scripting.dictionary")
    Application.ScreenUpdating = False
    ti = Timer
'==========设定初始数据====================================、
    file = "F:家Excel学习yhd-Excelyhd-Excel-VBAyhd-ExcelVBA根据条件查找指定文件的数据填写到当前工作表指定列201908工资变动名册表.xls"
    file_sht = "工资变动名册"
    data_key_col = "B"
    data_item_col = "V" '===要取的数据的列
    this_key_col = "C"
    this_item_col = "AG" '===要输入的当前列
    this_star_n = 5
    this_end_n = 2468
' =========================================
    Set obj = GetObject(file)
    With obj.Worksheets(file_sht)
        brr = .UsedRange.Value
        For i = 1 To UBound(brr)
            s = .Cells(i, data_key_col)
            If s <> "" Then
                mydic(s) = .Cells(i, data_item_col)
            End If
        Next i
        
    End With
    obj.Close False
    Set obj = Nothing
    With ActiveSheet
        For i = this_star_n To this_end_n
            s = .Cells(i, this_key_col)
            If mydic.exists(s) Then
                .Cells(i, this_item_col) = mydic(s)
            Else
'                .Cells(i, this_item_col) = "无"
            End If
        Next i
    End With
    Application.ScreenUpdating = True
    MsgBox "完成!时间为:" & Format(Timer - ti, "0.000秒")
End Sub

完成时间,一个字“快”,比复制与vLookup快很多

====个人学习收藏用的====

0 人点赞