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

我正在使用.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”值的单元格上,执行相同的代码,但在包含一些“CT”值的单元格上只有4个数字,并跳过(原样保留) 还要别的吗。

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

我的.Find方法是绝对不行的。 我认为这是主要的问题; “TL”和“CT”的单元格不正确。 有什么build议么?

注意: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之后的“TL-”less于6个数字的TL,并在“TL-”之后立即添加0直到长度为6。 (即TL-0098→TL-000098,加两个0)。 如果TL有6个以上的数字,并且在“TL-”之后立即删除零,直到长度为6,我也需要它来捕获。更简单的代码可能是简单地删除“ – ”后面的任何数字,直到长度为6。

例:

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

用上面的代码replace下面的代码。

更新的代码:

 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