全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 Excel
3170 2
2015-04-17
现在有一个表是这样的,这个是例子,实际可能有更多行,每次拿到都是不一样的,叫他表1
  • ID\       COID\             Equation \               equation_comment
  • 8649651  pol         D0798_wedfg *68768564                a
  • 8219418  pol         D0798_wfhgv *545489                   b
  • 8292384  pol         D0798_okng * P0650 * 786212          c
  • 9458128  pol         D0997_hbvyutyr * 10057                d
  • 8911892  pol         D0798_u6yrrd *5678                      e
所以每次遇到不同的表1,我想取equation这列*号前面的string然后vlookup另一个表,另一个表有300多行大概就是下面这样,这是个数据库,这表名字ADbac.xls
  • Longname
  • D0798_wedfg          
  • D0798_wfhgv             
  • D0798_okng     
  • D0997_hbvyutyr
  • D0798_wfhgvcvbn              
  • D0798_oknghjgg   
  • D0997_hbvyutyryjn     

303.D0798_u6yrrd

我想让MACRO给我再第一个表第五列也就是F列返回值,如果vlookup有对应数据回“TRUE”如果没有回“FALSE"
下面是code

  • Sub ADDValidation()
  • Dim N As Integer
  • Dim M As String
  • Dim InputRng As Range
  • Dim validatedriverequation_Row As Long
  • Dim validatedriverequation_Clm As Long
  • Dim wkbk As Workbook
  • Dim AD As Range
  • Dim cl As Variant
  • Dim TMP As Worksheet
  • xTitleId = "validatedriverequation"
  • Set InputRng = Application.Selection
  • Set TMP = InputRng.Worksheet
  • Set InputRng = Application.InputBox("Equation Range ", xTitleId, InputRng.Address, Type:=8)
  • validatedriverequation_Row = TMP.Application.Range("F2").Row
  • validatedriverequation_Clm = TMP.Application.Range("F2").Column
  • Set wkbk = Workbooks.Open("P:\ADbac.xls")
  • Set AD = wkbk.Worksheets("ADbac_active").Range("C4:C303")
  • 'On Error Resume Next
  •   'On Error GoTo Errhandler:
  • For Each cl In InputRng
  •    N = InStr(1, cl, "*") - 2
  •    M = Left(cl, N)
  •     TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm) = Application.WorksheetFunction.VLookup(M, AD, 1, False)
  •     If TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm) = Application.WorksheetFunction.VLookup(M, AD, 1, False) Then
  •   TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm).Value = " True"
  • Else: TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm).Value = "False"
  • End If
  •     validatedriverequation_Row = validatedriverequation_Row + 1
  • Next cl
  • wkbk.Close
  • 'Errhandler:
  • 'TMP.Cells(validatedriverequation_Row, validatedriverequation_Clm).Value = "False"
  • 'Resume Next
  • MsgBox "Done"
  • End Sub












































但现在有几个问题
1.当equation这列没有数据或者数据错误的时候,也就是N找不到*时,系统总是告诉我bug在27行。当vlookup找不到对应选项,bug在28行。我试过加入on error这种语句,但不是只停在第一个false就是全部返回true。有没有大神能帮我写一下if error或者on error这样的code在里面

2.数据库表有300多个,我本来想放到code里,这样每次就不用打开这个表,但没办法,太长了,大神能不能帮我想想办法。谢啦



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-4-18 05:15:33
有没有人会呀?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-4-19 04:35:57
???????
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群