转载: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,效率更高。
123456789101112131415Private
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
追问恩,基本是我想要的结果,但细节之处在咨询一下。
我运行了下代码,似乎将原来 Sheets("当月")C列中的数据都替换掉了,我希望保留C留中的数据,将数据保存在其他空白列里,比如D列里。
“'将单元格区域存入数组,提高运行效率”载入的区域能不能改成一个变量比如,如果以后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