0

我有一个类似这样的表(6K 记录)(完全未排序):

项目 | 子项  
-----|---------    
71 | 51  
71 | 51  
53 | 54  
51 | 52  
71a | 51a  
71a | 51a  
53 | 54  
51 | 52  
53 | 54  
53 | 54  
52a | 53a  
52 | 53  
51a | 52a  

基本上,它是一个多级项目结构,这意味着在 7* 里面有一个 5*,可能在那个 5* 里面还有另一个 5* 等等;我想要的是,第一列中的所有内容都被第一级项目替换,第一级项目总是以 7* 开头。最终会是这样的;

项目 | 子项  
-----|---------        
71 | 51  
71 | 51  
71 | 54  
71 | 52  
71a | 51a  
71a | 51a  
71 | 54  
71 | 52  
71 | 54  
71 | 54  
71a | 53a  
71 | 53  
71a | 52a  

我有以下代码,但它似乎不起作用,因为我得到了很多 5* 作为第一级项目

For i = 1 To LastRow
  mat_A = Cells(i, 1).Value
  type_A = Left(mat_A, 1)
  mat_B = Cells(i, 2).Value
  type_B = Left(mat_B, 1)

If type_A = 7 Then
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Replace What:=mat_B, Replacement:=mat_A, LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
End If

Next i

有人对此有什么建议吗?

4

1 回答 1

0

如果您想要的就像您描述的那样:将
71项目更改为71项目,那么您也许可以使用它:

Sub test()

Dim ws As Worksheet, rng, cel As Range, lrow As Long

Set ws = ThisWorkbook.Sheets("Sheet1")

With ws
    lrow = .Range("A" & .Rows.Count).End(xlUp).Row
    Set rng = ws.Range("A2:A" & lrow)
    For Each cel In rng
        If Left(cel.Value, 1) <> "7" Then
            If IsNumeric(cel.Value) Then
                cel.Value = 71
            Else
                cel.Value = 71 & Mid(cel.Value, 3, Len(cel.Value) - 2)
            End If
        End If
    Next cel
End With

End Sub

此代码使用 更改Item列中所有值的所有前 2 个字符71
假设您的数据在Column A & B.
现在,如果您有其他要求,请更新您的问题。:)

于 2013-11-14T06:07:14.833 回答