2017-07-20 93 views
0

我有一个设置与板材中的列列d和重置价值的唯一标识符F.我需要:Excel的VBA - 搜索,偏移,更换

  • 遍历所有序列号在片settings列d
  • 找到具有相同序列的行中片test塔A
  • 得到settings F列
  • 替换值替换在列B中的数据上test片,在同一行中作为先前击发阻铁高等教育委员会串行

听起来很简单,但与下面的代码定义forto语句时,我得到一个类型不匹配错误。

Sub Replace_List() 
Dim rList As Range, cell As Range, n As Long 

    Application.ScreenUpdating = False 

    With ThisWorkbook.Sheets("Settings") 
     Set rList = .Range("D4", .Range("D" & Rows.Count).End(xlUp)) 
    End With 

    For Each cell In rList 
     For n = cell.Value To cell.Offset(0, 2).Value Step 1 
      ThisWorkbook.Sheets("test").Columns("B:B").Replace What:=n, _ 
           Replacement:=cell.Offset(0, 2).Value, _ 
           LookAt:=xlWhole 
     Next n 
    Next cell 

    Application.ScreenUpdating = True 

    MsgBox "Replaced all items from the list.", vbInformation, "Replacements Complete" 

End Sub 

任何指针,我在做什么错误在这里赞赏。 谢谢, A2K

编辑 如下截图:

设置 - 我找了调查ID,并想取代日期与正确一个 enter image description here

+0

当cell崩溃时'cell.Value'和'cell.Offset(0,2).Value'的值是什么? – YowE3K

+0

'cell.value'是它应该查找的序列号,而'cell.offset(0,2).value'是替换值 – Armitage2k

+0

但是它崩溃时的值是什么?例如。它是否大于2,147,486,647? – YowE3K

回答

2

我相信您希望使用Find查找每个匹配项,然后使用找到的位置的Offset替换该值:

Sub Replace_List() 
    Dim rList As Range, cel As Range, n As Long 
    Dim fnd As Range 
    Dim fndFirst As String 

    Application.ScreenUpdating = False 

    With ThisWorkbook.Sheets("Settings") 
     Set rList = .Range("D4", .Range("D" & .Rows.Count).End(xlUp)) 
    End With 

    For Each cel In rList 
     Set fnd = ThisWorkbook.Worksheets("test").Columns("A:A").Find(What:=cel.Value, LookAt:=xlWhole) 
     If Not fnd Is Nothing Then 
      fndFirst = fnd.Address 
      Do 
       fnd.Offset(0, 1).Value = cel.Offset(0, 2).Value 
       Set fnd = ThisWorkbook.Worksheets("test").Columns("A:A").FindNext(After:=fnd) 
      Loop While fnd.Address <> fndFirst 
     End If 
    Next 

    Application.ScreenUpdating = True 

    MsgBox "Replaced all items from the list.", vbInformation, "Replacements Complete" 

End Sub 
+0

'end if if if if'错误 – Armitage2k

+0

@ Armitage2k哎呀 - 愚蠢的错误 - 固定(希望) - 也改变了'循环while'之前的行 - 不知道这是否也会导致问题(我不使用'查找'很多),但决定改变它无论如何 – YowE3K

+0

永远不要急于你的午餐休息;)非常感谢,它现在完美的作品,感谢帮助! – Armitage2k