【问题标题】:Excel to find three characters left of a field that variesExcel查找不同字段左侧的三个字符
【发布时间】:2016-01-02 18:52:39
【问题描述】:

为了我的工作,我创建了一个 VBA 代码,用于将显示当月采购的报告中的新帐户添加到包含所有帐户和库存的主表中。我需要从采购订单号中提取区域,但这取决于采购类型。

区域始终是 6 位数字左侧的前三个字符:ABC123456A。在这种情况下,我需要提取字母 ABC。

但它会根据订单的类型而变化。有些订单会在前面的订单号和下划线后面加上一个子域,比如XYZABC_ABC123456A。

如果订单是新账户的,右边最后一个字母是A,如果是寄售订单,它是C,但如果是矫形器和假肢,它会变成OP:ABC123456OP

当字符数可能不同时,我需要一个公式来帮助我专门提取 6 位数字之前的三个字母区域。请帮忙。

【问题讨论】:

  • =IFERROR(MID(A1,FIND("_",A1)+1,3),LEFT(A1,3))???
  • 如果 Dirk 的公式不起作用,那么您没有提供足够的示例来显示您的 PO 编号中可能存在的可变性。
  • 是您需要的工作表单元格中的公式还是您需要的 VBA 代码?您的问题和标签有冲突。

标签: excel excel-formula excel-2010 excel-2013 vba


【解决方案1】:

如果您确实想要一个 vba 解决方案,您可以使用 split 函数来存储代码的各个部分,然后提取最后一个数组条目的前三个字母...

Dim Code As String: Code = "XYZABC_ABC123456A"
Dim Arr() As String: Arr = Split(Code, "_")
MsgBox Left(Arr(UBound(Arr)), 3)

【讨论】:

  • 仍然:Public Function GetCode(Code As String) As String: GetCode = Mid(Code, InStr(Code, "_") + 1, 3): End Function 会更快:P
  • 是的 - 但假设只有一个或更少的子区域。在存在多个下划线的情况下[实际上并没有提到只会有一个或更少],那么上面的代码仍然应该返回正确的字符串
  • 是和否...没有说需要如何处理多个下划线...如果只寻找第一个下划线,您的下划线将失败...但假设永远不会超过一个,所有代码都应该没问题...
  • 对于最后一个下划线,您可以使用Public Function GetCode(Code As String) As String: GetCode = Mid(Code, InStrRev(Code, "_") + 1, 3): End Function... 也会更快:P
猜你喜欢
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多