Excel精英培训网

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

[已解决]VBA实现查表 返回五行属性

[复制链接]
发表于 2017-2-28 09:29 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-2-28 13:52 编辑

VBA实现查表 返回五行属性


最佳答案
2017-2-28 13:27

  1. Sub Tj()
  2.     Dim Rng As Range, Arr
  3.     Set Rng = [d1:e5]
  4.     Arr = [a1].CurrentRegion
  5.     For i = 1 To UBound(Arr)
  6.         Cells(i, 2) = Cells(Rng.Find(Arr(i, 1), , , xlWhole).Row, "F")
  7.     Next
  8.     MsgBox "查表完成"
  9.    
  10. End Sub

  11. Sub TJ2()
  12.     Dim Arr, Brr
  13.     Brr = [d1:f5]
  14.     Arr = [a1].CurrentRegion
  15.     For i = 1 To UBound(Arr)
  16.         For j = 1 To UBound(Brr)
  17.             If Arr(i, 1) = Brr(j, 1) Or Arr(i, 1) = Brr(j, 2) Then
  18.                 Cells(i, 2) = Brr(j, 3)
  19.             End If
  20.         Next
  21.     Next
  22.     MsgBox "查表完成"
  23. End Sub
复制代码
数组和find两种方法实现,你看一下,你这天天都是弄啥东西啊。


VBA实现查表 返回五行属性.jpg

VBA实现查表 返回五行属性.rar

5.91 KB, 下载次数: 6

发表于 2017-2-28 12:08 | 显示全部楼层
回复

使用道具 举报

发表于 2017-2-28 12:41 | 显示全部楼层
Sub IfuleU()
Dim d, arr, brr, r&, c%
[b1:b888] = ""
Set d = CreateObject("scripting.dictionary")
arr = Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row)
brr = [d1].CurrentRegion
For c = 1 To 2
    For r = 1 To UBound(brr)
        d(brr(r, c)) = brr(r, 3)
    Next
Next
For r = 1 To UBound(arr)
    arr(r, 2) = d(arr(r, 1))
Next
[a1].Resize(UBound(arr), 2) = arr
Set d = Nothing
End Sub

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-2-28 12:46 | 显示全部楼层
望帝春心 发表于 2017-2-28 12:08
到底用函数还是用VBA?

现在需要用VBA
函数已经有人做了



回复

使用道具 举报

 楼主| 发表于 2017-2-28 12:46 | 显示全部楼层
xiangbaoan 发表于 2017-2-28 12:41
Sub IfuleU()
Dim d, arr, brr, r&, c%
= ""

请用数组方法做

评分

参与人数 1 +3 收起 理由
xiangbaoan + 3 呵呵,真会搞的……

查看全部评分

回复

使用道具 举报

发表于 2017-2-28 12:47 | 显示全部楼层
laoau138 发表于 2017-2-28 12:46
现在需要用VBA
函数已经有人做了

你是要别人给你用VBA写一个LOOKUP和VLOOKUP吗?老师你太暴力了...
回复

使用道具 举报

 楼主| 发表于 2017-2-28 13:11 | 显示全部楼层
望帝春心 发表于 2017-2-28 12:47
你是要别人给你用VBA写一个LOOKUP和VLOOKUP吗?老师你太暴力了...

用VBA可以      可以不用lookup和VLOOKUP
回复

使用道具 举报

发表于 2017-2-28 13:27 | 显示全部楼层    本楼为最佳答案   

  1. Sub Tj()
  2.     Dim Rng As Range, Arr
  3.     Set Rng = [d1:e5]
  4.     Arr = [a1].CurrentRegion
  5.     For i = 1 To UBound(Arr)
  6.         Cells(i, 2) = Cells(Rng.Find(Arr(i, 1), , , xlWhole).Row, "F")
  7.     Next
  8.     MsgBox "查表完成"
  9.    
  10. End Sub

  11. Sub TJ2()
  12.     Dim Arr, Brr
  13.     Brr = [d1:f5]
  14.     Arr = [a1].CurrentRegion
  15.     For i = 1 To UBound(Arr)
  16.         For j = 1 To UBound(Brr)
  17.             If Arr(i, 1) = Brr(j, 1) Or Arr(i, 1) = Brr(j, 2) Then
  18.                 Cells(i, 2) = Brr(j, 3)
  19.             End If
  20.         Next
  21.     Next
  22.     MsgBox "查表完成"
  23. End Sub
复制代码
数组和find两种方法实现,你看一下,你这天天都是弄啥东西啊。


评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-2-28 13:51 | 显示全部楼层
lmze2000 发表于 2017-2-28 13:27
数组和find两种方法实现,你看一下,你这天天都是弄啥东西啊。

实在太菜了,你不要见怪

VBA计算多列最大连续  用数组方法不要用字典

http://www.excelpx.com/thread-428091-1-1.html


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 23:47 , Processed in 0.384497 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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