代码之家  ›  专栏  ›  技术社区  ›  Eitel Dagnin

vba-isNumber由于前缀而不返回任何内容

  •  0
  • Eitel Dagnin  · 技术社区  · 6 年前

    后续问题来自:

    VBA - Match Lookup With Multiple Parameters

    下面的代码工作得很好,但我后来意识到A列中的值有时包含前缀,因此不会返回任何内容。

    希望有人能编辑实际公式,在数字前面加上2个字母的前缀。

    代码:

    Sub PlaceFormula()
    Dim ws As Worksheet
    Dim lr As Long
    Dim lc As Long
    
    With Application
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
    Set ws = Sheets("Main")
    lr = ws.Cells(Rows.Count, 1).End(xlUp).Row
    lc = ws.Cells(1, Columns.Count).End(xlToLeft).Column
    
    ws.Range("B2", ws.Cells(lr, lc)).Formula = "=IF(ISNUMBER(MATCH($A2&B$1,INDEX(tStatus[[Employee Number]:[Employee Number]]&tStatus[[Wk Number]:[Wk Number]],),0)),""Match"","""")"
    ws.Range("B2", ws.Cells(lr, lc)).Value = ws.Range("B2", ws.Cells(lr, lc)).Value
    
    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    End Sub
    

    A列数据样本:

    一万二千三百四十五

    二万四千六百八十一

    七万八千九百五十六

    AB12345型

    A78956

    如果存在值,则表中的数据也将包含前缀。所以从本质上来说,这场比赛是在寻找一个精确的匹配。

    链接到示例文件:

    https://drive.google.com/file/d/1Uoa0Yn72nSckQaBnl6Y-a2q6UMJX6H3f/view?usp=sharing

    1 回复  |  直到 6 年前
        1
  •  1
  •   learnAsWeGo    6 年前

    此公式告诉您是否有2、1或0个非数字前缀。您可以使用此公式生成的数字从数字中删除前缀,然后进行匹配。

    公式1:

    =IF(ISNUMBER(NUMBERVALUE(LEFT(B2,1))),0,IF(ISNUMBER(NUMBERVALUE(RIGHT(LEFT(B2,2),1))),1,2))
    

    如果字符串左起的第一个字符是数字,则返回0;如果不检查字符串右起的第一个字符是否是数字,如果从字符串左起的前两个字符也是数字,则返回2,否则返回1。

    公式2:

    =RIGHT(B2,LEN(B2)-C2)