【问题标题】:Constant length string of numbers and letters恒定长度的数字和字母字符串
【发布时间】:2014-01-15 15:19:11
【问题描述】:

我想在一列长度和格式相同的字符串中搜索错误:(例如:B2013JMSL10764B2013JMSL11030)。

错误是指在数字应该是字母的地方,反之亦然,例如:字母O而不是数字0

是否可以找到所有有错误的字符串并将它们复制到一个新列中,但与找到它们的行相同。

谢谢。对于如何解决这个问题的任何建议,或者我可能需要的一些提示和代码行,我将不胜感激。

这是我目前所拥有的:

Sub sampleNoCheck()

    Sheets("sheet1").Activate
    Dim uColumn As String

    ' if your data is in a different column then change A to some other letter(s)
    uColumn = "j"

    Dim i As Long, j As Long, r As Range
    For i = 2 To Range(uColumn & Rows.Count).End(xlUp).Row
        Set r = Range(uColumn & i)

        {Dim part1 As String, part2 As Integer, part3 As String, part6 As String, part7 As String, part8 As String, part4 As Integer

        If Len(r) = 14 Then
            part1 = Left(r, 1)
            part2 = Mid(r, 2, 5)
            part3 = Mid(r, 6, 6)
            part6 = Mid(r, 7, 7)
            part7 = Mid(r, 8, 8)
            part8 = Mid(r, 9, 9)
            part4 = Right(r, 5)

        ElseIf Len(r) = 15 Then 'possibility of having an extra text digit 
            Dim part5 As String
            part1 = Left(r, 1)
            part2 = Mid(r, 2, 5)
            part3 = Mid(r, 6, 6)
            part6 = Mid(r, 7, 7)
            part7 = Mid(r, 8, 8)
            part8 = Mid(r, 9, 9)
            part4 = Mid(r, 10, 14)
            part5 = Right(r, 1)
        Else
            MsgBox "error in row " & i
        End If

        If IsText(part1) = true And IsNumber(part2) = True And IsText(part3) = True And IsText(part6) = True And IsText(part7) = True And IsText(part8) = True And IsNumber(part5) = True And (part5 = d Or part5 = e Or part5 = f) Then

    Next i

    Else
        MsgBox "error in row " & i

End Sub

【问题讨论】:

  • 这是否意味着在 excel 中使用 vba 完成?
  • 您使用的是哪种技术?
  • 嗨,到目前为止你有什么收获?你能给我们看一些代码吗?
  • @npst 是的,我打算在 excel 中组织这列 dta,理想情况下它包含 1500 行数据。
  • @msturdy 对不起,我仍然不知道如何解决这个问题,到目前为止还没有代码完成。

标签: string excel numbers vba


【解决方案1】:

很抱歉我的帖子不够专业,我终于可以将一个杂乱的代码放在一起完成大部分工作,以下代码检查错误并在发现错误时提供反馈:

Sub sampleNoCheck()

Sheets("sheet1").Activate
    Dim uColumn As String

    ' if your data is in a different column then change A to some other letter(s)
    uColumn = "A"

    Dim i As Long, j As Long, r As Range
For i = 2 To Range(uColumn & Rows.Count).End(xlUp).Row
        Set r = Range(uColumn & i)
Dim part1 As String, part2 As String, part3 As String, part6 As String, part7 As String, part8 As String, part4 As Integer, part5 As String
If Len(r) = 14 Then
part1 = Left(r, 1)
part2 = Mid(r, 2, 4)
part3 = Mid(r, 6, 1)
part6 = Mid(r, 7, 1)
part7 = Mid(r, 8, 1)
part8 = Mid(r, 9, 1)
part4 = Right(r, 5)

ElseIf Len(r) = 15 Then

part1 = Left(r, 1)
part2 = Mid(r, 2, 4)
part3 = Mid(r, 6, 1)
part6 = Mid(r, 7, 1)
part7 = Mid(r, 8, 1)
part8 = Mid(r, 9, 1)
part4 = Mid(r, 10, 5)
part5 = Right(r, 1)

Else: MsgBox "Insuffficient number of code digits in row " & i
End If
If IsNumeric(part1) = False And IsNumeric(part2) = True And IsNumeric(part3) = False And IsNumeric(part6) = False And IsNumeric(part7) = False And IsNumeric(part8) = False And IsNumeric(part4) = True And (part5 = D Or part5 = E Or part5 = F Or part5 = Null) Then
GoTo nextiteration
Else
MsgBox "error " & i
End If
nextiteration:
Next i

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2021-02-06
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多