问题描述
我使用 LimeSurvey 答案来验证我在 Excel 中需要的数据。
为了检查我是否有正确的人,他们在调查中输入了 ID 号码。
然后是这样的:
我读取了身份证并从他们的身份证中提取了他们的身份证号码,然后使用此代码将其放入单元格“Personalia: 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?
我尝试了在此问答中找到的一些代码,但它们不起作用。
我也尝试了一些自定义格式,但它也没有改变。我猜是因为它是参考而不是手动输入。
解决方法
替换前导字符
上下文:...不导出前导零...
- 如果您需要删除多个零,您可以使用
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