【问题标题】:Remove leading zero from a reference从引用中删除前导零
【发布时间】:2021-02-13 09:45:44
【问题描述】:

我使用 LimeSurvey 的答案来验证我在 Excel 中需要的数据。

为了检查我是否有正确的人,他们在调查中输入了 ID 号。
然后,它是这样的:
我读取了一张身份证并从他们的身份证中提取了他们的身份证号码,并使用此代码将其放在单元格“个人:B7”中(这是一个包含值的文本)。

=LEFT(PROPER(RIGHT(eIDimport!A2;LEN(eIDimport!A2)-FIND(CHAR(34);eIDimport!A2)));FIND("h=";PROPER(RIGHT(eIDimport!A2;LEN(eIDimport!A2)-FIND(CHAR(34);eIDimport!A2))))-13)

它的值也与“Dataimport: M2 and L7 (=Personalia!B7)”相关联

问题在于调查不会导出前导零,而 ID 中的值会。
在我的代码中,要检查哪一行数据是必需的,身份证号码(来自卡)和调查号码必须相同。
如果它从零开始,逻辑上,值不匹配,我得到一个错误。

示例:
我的身份证号码是 026548321。
身份证上的值是 026548321。
调查结果为 26548321。

如果 IDcard 值以 0 开头,如何删除单元格“Dataimport M2”中的第一个 0?

我尝试了在此问答中找到的一些代码,但它们不起作用。
我也尝试了一些自定义格式,但它也没有改变。我想这是因为它是参考而不是手动输入。

【问题讨论】:

  • 请尝试:If left(IDcard, 1) = "0" Then IDcard = Mid(IDcard, 2)
  • 或者像一个公式,假设“M2”有要处理的值:==IF(LEFT(M2,1)="0",MID(M2,2,100),M2),使用这个公式所在的单元格(而不是M2)。
  • @FaneDuru 谢谢,第二个工作正常,只有语法错误:“,”必须是“;”让公式起作用。
  • 我为标准设置做了它。如果您的区域设置涉及“;”作为列表分隔符,是的,就是这样。但是 VBA 解决方案在所有情况下都以标准方式工作。你也试过了,还是不行?
  • 我只是测试了公式方式,我没有使用VBA代码。

标签: excel vba leading-zero limesurvey


【解决方案1】:

替换前导字符

上下文:...不导出前导零...

  • 如果您需要删除多个零,您可以使用RegEx 'based' UDF。图片展示了它的工作原理。

  • Excel:

    =relaceLeadingChars('DataImport'!M2,"0")
    
  • VBA:

    Sub replaceLeadingCharsTEST()
        Dim SearchString As String: SearchString = "000203456"
        Dim ResultString  As String
        ResultString = replaceLeadingChars(SearchString, "0")
        Debug.Print ResultString ' Result: "203456"
    End Sub
    

用户定义函数 (UDF)(在标准模块中,例如 Module1

Function replaceLeadingChars( _
    ByVal SearchString As String, _
    ByVal FindChar As String, _
    Optional ByVal ReplaceChar As String = "", _
    Optional ByVal doIgnoreCase As Boolean = False) _
As String
    '=replaceLeadingChars(A1,"0")
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = doIgnoreCase
        .Pattern = "^[" & FindChar & "]*"
        replaceLeadingChars = .Replace(SearchString, ReplaceChar)
    End With
End Function

你当然可以简化:

Function removeLeadingZeros( _
    ByVal SearchString As String) _
As String
    '=removeLeadingZeros(A1)
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "^[0]*"
        removeLeadingZeros = .Replace(SearchString, "")
    End With
End Function

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 2011-04-09
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多