Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1103|回复: 4

[已解决]求助数组加字典完成VLooKUP效果

[复制链接]
发表于 2023-1-4 17:11 | 显示全部楼层 |阅读模式
求助如何从数据源中工作表查找出汇总工作表中相应学号的人名及各科成绩。

以下是我参考别人写的,不知道啥问题,运行出错。

Sub multiVlookup()
Dim myDic As Object, i As Integer, sht1 As Worksheet, maxRow As Integer, totalCnt As Integer, values As String, sht2 As Worksheet
Application.ScreenUpdating = False
Set myDic = CreateObject("scripting.dictionary")
Set sht1 = ThisWorkbook.Sheets("数据源")
  Set sht2 = ThisWorkbook.Sheets("汇总")
maxRow = sht1.Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To maxRow
    values = sht1.Cells(i, 2).Value & "_" & sht1.Cells(i, 3).Value & "_" & sht1.Cells(i, 4).Value & "_" & sht1.Cells(i, 5).Value '此处以"_"作为拼接字符,如果您觉得该字符可能出现在value中,可以换其它非常用字符来代替
    If myDic.Exists(sht1.Cells(i, 1).Value) = False Then
        myDic.Add sht.Cells(i, 1).Value, values
    End If
Next

maxRow = sht2.Cells(Rows.Count, 1).End(xlUp).Row '读取第五列的最后一行行号
For i = 2 To maxRow
    values = myDic.Item(sht2.Cells(i, 1).Value) '根据第一列的key,将对应的item写入第六列
    sht2.Cells(i, 2).Value = Split(values, "_")(0) '存入split分段后的数组的第一个元素
    sht2.Cells(i, 3).Value = Split(values, "_")(1) '存入split分段后的数组的第二个元素
    sht2.Cells(i, 4).Value = Split(values, "_")(2)
    sht2.Cells(i, 5).Value = Split(values, "_")(3)
Next
Application.ScreenUpdating = True
End Sub
最佳答案
2023-1-4 21:58
本帖最后由 哥儿- 于 2023-1-4 22:00 编辑
jian82372387 发表于 2023-1-4 21:08
再请教个问题,如果汇总表里出现的学号在数据源表格里的查找不到如何跳过该学号查找下一个啊?(如果查找 ...

判断一下就OK

For i = 2 To maxRow


if myDic.exists(sht2.Cells(i, 1).Value) then
    values = myDic.Item(sht2.Cells(i, 1).Value) '根据第一列的key,将对应的item写入第六列
    sht2.Cells(i, 2).Value = Split(values, "_")(0) '存入split分段后的数组的第一个元素
    sht2.Cells(i, 3).Value = Split(values, "_")(1) '存入split分段后的数组的第二个元素
    sht2.Cells(i, 4).Value = Split(values, "_")(2)
    sht2.Cells(i, 5).Value = Split(values, "_")(3)
end if
Next




测试.rar

15.54 KB, 下载次数: 6

发表于 2023-1-4 19:14 | 显示全部楼层
myDic.Add sht.Cells(i, 1).Value, values  这一句有问题,没有sht这个变量,只有sht1和sht2,显然这里应该是sht1才对。
回复

使用道具 举报

 楼主| 发表于 2023-1-4 21:08 | 显示全部楼层
哥儿- 发表于 2023-1-4 19:14
myDic.Add sht.Cells(i, 1).Value, values  这一句有问题,没有sht这个变量,只有sht1和sht2,显然这里应该 ...

再请教个问题,如果汇总表里出现的学号在数据源表格里的查找不到如何跳过该学号查找下一个啊?(如果查找不到学号,会报下标越界)
回复

使用道具 举报

发表于 2023-1-4 21:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 哥儿- 于 2023-1-4 22:00 编辑
jian82372387 发表于 2023-1-4 21:08
再请教个问题,如果汇总表里出现的学号在数据源表格里的查找不到如何跳过该学号查找下一个啊?(如果查找 ...

判断一下就OK

For i = 2 To maxRow


if myDic.exists(sht2.Cells(i, 1).Value) then
    values = myDic.Item(sht2.Cells(i, 1).Value) '根据第一列的key,将对应的item写入第六列
    sht2.Cells(i, 2).Value = Split(values, "_")(0) '存入split分段后的数组的第一个元素
    sht2.Cells(i, 3).Value = Split(values, "_")(1) '存入split分段后的数组的第二个元素
    sht2.Cells(i, 4).Value = Split(values, "_")(2)
    sht2.Cells(i, 5).Value = Split(values, "_")(3)
end if
Next




回复

使用道具 举报

 楼主| 发表于 2023-1-4 22:28 | 显示全部楼层
哥儿- 发表于 2023-1-4 21:58
判断一下就OK

For i = 2 To maxRow

感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 17:31 , Processed in 0.380307 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表