使用VBA在多级项目结构中搜索和替换

时间:2013-11-14 03:53:25

标签: excel vba excel-vba

我有一张桌子(6K记录)就像这样(完全未分类):

Item    |    Subitem  
--------|---------    
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 *开头。 哪个最终会是这样的;

Item    |       Subitem  
--------|---------        
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

有人对此有一些建议吗?

1 个答案:

答案 0 :(得分: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更改71列中所有值的前2个字符 假设您的数据位于Column A & B 现在,如果您有其他要求,请更新您的问题。 :)