VBA与ULookup

转载:http://zhidao.baidu.com/question/2201873141116490348
Private Sub CommandButton1_Click()

        With ActiveSheet
       
            For i = 4 To Range("A65536").End(xlUp).Row
        
            Sheets("当月").Cells(i, 3) = Application.WorksheetFunction.VLookup(Sheets("当月").Cells(i, 3),IF({1,0}Sheets("2013年").[C2:C129], Sheets("2013").[G2:G129]),2,0)
        
            If Sheets("当月").Cells(i, 3) = "#N/A" Then
            Sheets("当月").Cells(i, 3) = ""
        End If
        
    Next
        
End With
End Sub
 

代码的意思基本上就是以上内容 ,但是不熟悉VBA的语言,请高手帮忙看一下,应该怎样规范语言,谢谢

最佳答案:

IF({1,0}是EXCEL函数用法,写到VBA里大概有问题。

既然用到VBA,完全可以用循环替代Vlookup,效率更高。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private  Sub  CommandButton1_Click()
r = Range( "A65536" ). End (xlUp).Row
crr = Sheets( "2013年" ).[C2:C129]  '将单元格区域存入数组,提高运行效率
grr = Sheets( "2013年" ).[G2:G129]
For  Each  icell  In  Sheets( "当月" ).Range( "C4:C"  & r)
tmp =  ""
For  i = 1  To  UBound(crr)
     If  icell = crr(i, 1)  Then
     tmp = grr(i, 1)
     Exit  For
     End  If
Next  i
icell.Value = tmp
Next
End  Sub
追问

  恩,基本是我想要的结果,但细节之处在咨询一下。

  1.  我运行了下代码,似乎将原来 Sheets("当月")C列中的数据都替换掉了,我希望保留C留中的数据,将数据保存在其他空白列里,比如D列里。

  2. “'将单元格区域存入数组,提高运行效率”载入的区域能不能改成一个变量比如,如果以后C130有数据就变成[C2:C130],c131有数据就变成[C2:C131]以此类推...

不胜感激

回答
你的问题都可以实现:
 
1、循环变量icell是C列的单元格,用icell.offset(0,1)=tmp即可保存在D列
2、crr = Sheets("2013年").range("C2:C" & r1]
其中r1为变量,计算式可以为:r1=Sheets("2013年").Range("C65536").End(xlUp).Row

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值