【问题标题】:VBA - IsNumber Returns Nothing Due to PrefixVBA - IsNumber 由于前缀不返回任何内容
【发布时间】:2018-05-23 12:43:04
【问题描述】:

后续问题来自:

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 列中的数据示例:

12345

24681

78956

AB12345

A78956

如果值存在,表中的数据也将包含前缀。所以本质上,MATCH 正在寻找完全匹配。

链接到示例文件:

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

【问题讨论】:

  • 请展示一些示例数据
  • @Luuklag 在屏幕截图中还是您想要文件链接?
  • 只是列中的一些数据,您可以在问题中以文本形式发布
  • 所有的前缀都是2个字符吗?
  • @Nathan_Sav 有些可能只有 1 个字符

标签: vba excel excel-formula


【解决方案1】:

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

一级方程式:

=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)

【讨论】:

  • 非常感谢您的回复,您的方法会起作用,但我认为这可能会带来一些误报,因为表中的数据还包含前缀数字和非前缀数字,所以很有可能在删除前缀后,它最终可能与表中的相同数字匹配,但这并不一定意味着它是正确的数字。除此之外,我认为我需要对我的表应用相同的方法,以便尝试将 12356 与 123456 匹配,而不是尝试将 123456 与 AB123456 匹配。
  • 我相信我的意思是搜索字符串匹配而不是数字匹配。但是,我问错了,你回答了我的问题。因此,我将其标记为已解决。谢谢你的努力:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 2020-04-27
  • 2019-04-06
  • 2012-02-15
  • 2020-09-07
  • 2021-11-22
相关资源
最近更新 更多