VBA - 使用 .Find 方法进行故障排除

VBA - troubleshooting with .Find method

我正在使用 .Find 方法查找包含部分值 "TL" 和 "CT" 的行中的单元格。代码当前所做的是查看 C 列的每一行,修剪 "TL-" 的任何变化(即 "TL- "、"TL - "、"TL -"),然后限制其后的数字只有6个数字。例子:如果有5个数,就在"TL-"后面加一个0,如果有4个数,就在"TL-"后面加2个0,以此类推

我在单元格中有其他值,所以它现在所做的是更改所有值以执行上述方法(如下所示)

Start:         Output:
TL-000872  ->  TL-000872
TL-0786    ->  TL-000786
CT-74      ->  TL-000074
GS8; 278K  ->  TL-008278

我需要它做什么 是有效的代码,但仅适用于包含一些 "TL" 值的单元格,执行相同的代码但只有 4 个数字在包含一些 "CT" 值的单元格上,跳过(保持原样)任何其他内容。

Start:         Output:
TL-000872  ->  TL-000872
TL-0786    ->  TL-000786
CT-74      ->  CT-0074
GS8; 278K  ->  GS8; 278K

我的 .Find 方法肯定不起作用。我认为这是主要问题;它没有正确找到带有 "TL" 和 "CT" 的单元格。有什么建议吗?

注意:StartSht 是包含代码的工作簿,其中存在所有要更改的值。

Dim str As String, ret As String, tmp As String, j As Integer, k As Integer

If Not StartSht.Range("C2").End(xlDown).Find(What:="TL", LookAt:=xlPart, LookIn:=xlValues) Is Nothing Then
For k = 2 To StartSht.Range("C2").End(xlDown).Row
    ret = ""
    str = StartSht.Range("C" & k).Value
        For j = 1 To Len(str)
            tmp = Mid(str, j, 1)
            If IsNumeric(tmp) Then ret = ret + tmp
        Next j

        For j = Len(ret) + 1 To 6
            ret = "0" & ret
        Next
        ret = "TL-" & ret
        StartSht.Range("C" & k).Value = ret

        Next k

ElseIf Not StartSht.Range("C2").End(xlDown).Find(What:="CT", LookAt:=xlPart, LookIn:=xlValues) Is Nothing Then
For k = 2 To StartSht.Range("C2").End(xlDown).Row
    ret = ""
    str = StartSht.Range("C" & k).Value
        For j = 1 To Len(str)
            tmp = Mid(str, j, 1)
            If IsNumeric(tmp) Then ret = ret + tmp
        Next j

        For j = Len(ret) + 1 To 4
            ret = "0" & ret
        Next
        ret = "CT-" & ret
        StartSht.Range("C" & k).Value = ret

Next k

Else

End If

编辑:

当前代码采用 "TL-" 后少于 6 个数字的 TL,并在 "TL-" 后立即添加一个 0,直到长度为 6。 (即TL-0098 -> TL-000098,加了两个0)。如果 TL 的数字超过 6 个,我还需要它来捕捉并删除紧跟在 "TL-" 之后的零,直到长度为 6 更简单的代码可能是简单地删除“-”后面的任何数字,直到长度为六。

示例:

TL-0009999   ->  delete one 0  -> TL-009999
TL-0948398   ->  delete one 0  -> TL-948398
TL-00000008  ->  delete two 0s -> TL-000008

用下面的代码替换上面的代码。

更新代码:

Dim str As String, ret As String, tmp As String, j As Integer, k As Integer

For k = 2 To Sheets("Test").Range("C2").End(xlDown).Row
        ret = ""
        str = Sheets("Test").Range("C" & k).Value

        If InStr(str, "TL") > 0 Then
            For j = 1 To Len(str)
                tmp = Mid(str, j, 1)
                If IsNumeric(tmp) Then
                    ret = ret + tmp
                ElseIf j > 5 And tmp = "T" Then
                    Exit For
                End If

            Next j

            For j = Len(ret) + 1 To 6
                ret = "0" & ret
            Next j

            If Len(ret) > 6 Then
                Debug.Print Len(ret)
                For j = Len(ret) To 7 Step -1
                If Mid(ret, 1, 1) = "0" Then
                    ret = Right(ret, j - 1)
                End If
                Next j
            End If

            ret = "TL-" & ret
            Sheets("Test").Range("C" & k).Value = ret
        ElseIf InStr(str, "CT") Then
            For j = 1 To Len(str)
                tmp = Mid(str, j, 1)
                If IsNumeric(tmp) Then ret = ret + tmp
            Next j

            For j = Len(ret) + 1 To 4
                ret = "0" & ret
            Next
            ret = "CT-" & ret
            Sheets("Test").Range("C" & k).Value = ret
        End If

      Next k