论坛(http://www.)的一位同学提问。
以下代码有很多的地方看不懂,请老师们麻烦给详细添加一下注释,小弟在学习中,希望老师赐教! Sub lqxs() Dim Arr, i&, d, Arr1 Set d = CreateObject('Scripting.Dictionary') Sheet1.Activate Arr = Sheet2.[a1].CurrentRegion For i = 2 To UBound(Arr) d(Arr(i, 2)) = Arr(i, 1) Next Arr1 = [a1].CurrentRegion For i = 2 To UBound(Arr1) If d.exists(Arr1(i, 2)) Then Arr1(i, 1) = d(Arr1(i, 2)) Next [a1].CurrentRegion = Arr1 End Sub
烟花版主的解答:
Sub lqxs()
Dim Arr, i&, d, Arr1
'创建字典对象
Set d = CreateObject('Scripting.Dictionary')
'激活sheet1
Sheet1.Activate
'取Sheet2工作表中A1单元格所在的区域数据
Arr = Sheet2.[a1].CurrentRegion
'遍历数据,添加到字典中
'key为B列,item为A列
For i = 2 To UBound(Arr)
d(Arr(i, 2)) = Arr(i, 1)
Next
'取SHEET1工作表中A1单元格所在的区域数据
Arr1 = [a1].CurrentRegion
'根据B列单元格中的内容,取出对应的Item
'实现的应该就是类似于跨表查找对应值,
For i = 2 To UBound(Arr1)
If d.exists(Arr1(i, 2)) Then Arr1(i, 1) = d(Arr1(i, 2))
Next
'数据写回sheet1中
[a1].CurrentRegion = Arr1
End Sub
冥王 的解答 Sub lqxs()
Dim Arr, i&, d, Arr1
Set d = CreateObject('Scripting.Dictionary') '设定d=创建对象('Scripting.Dictionary')
Sheet1.Activate '激活工作表Sheet1
Arr = Sheet2.[a1].CurrentRegion 'Sheet2工作表[a1单元格的当前区域赋值给变量Arr(变量Arr变成了一个数组)
For i = 2 To UBound(Arr) '设定变量i的范围为2到数组Arr的上标
d(Arr(i, 2)) = Arr(i, 1)
Next '下一个循环
Arr1 = [a1].CurrentRegion '[a1]的当前区域赋值给变量Arr1(变量Arr1变成了数组)
For i = 2 To UBound(Arr1) '设定变量范围为i=2到UBound(Arr1)
If d.exists(Arr1(i, 2)) Then Arr1(i, 1) = d(Arr1(i, 2)) '如果 d.exists(Arr1(i,2)) 则执行 Arr1(i,1)=d(Arr1(i,2))
Next '下一个循环
[a1].CurrentRegion = Arr1 '数组Arr1的元素写入[a1]的当前区域
End Sub
继续提问 For i = 2 To UBound(Arr) d(Arr(i, 2)) = Arr(i, 1) 这部分还是不理解,能不能联系实现工作表,详细
烟花老师的答案
标准工作表(sheet2)中A1:B66中的数据,这是一个二维数组。 因为第1行是标题,所以在循环数组的时候,只需要从第二行开始。
在循环这些标准数据时,通过字典把工资标准与其对应的薪级档次放入到字典对象中。 例如:80对应的是第1级
查看原贴请单击左下角原文链接
|