【问题标题】:Search, Copy, Insert row, Paste and Change Value搜索、复制、插入行、粘贴和更改值
【发布时间】:2014-10-29 18:43:41
【问题描述】:

我正在尝试查找值“PLGDY”,从该行复制数据,在找到的行上方插入新行,将数据粘贴到新行中,将值“PLGDY”替换为“PLGDN”。

我编写了一个宏,它不是将数据复制到新行中,而是粘贴到右侧的单元格中。它还将两行中的值更改为“PLGDN”。

我想使用 For Next 循环,因为我有很多值要更改。是否可以检查要更改的值?我想用这个数字作为计数器。

 Sub Find_and_Change()
'

'Find a "PLGDY" and set an active cell
Cells.Find(What:="PLGDY", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate

'select a block of data in a row
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
'copy selected block of data
        Selection.Copy
'insert a row above  active cell
        ActiveSheet.Cells(ActiveCell.Row, 1).Select
        ActiveCell.EntireRow.Insert
'set an active cell at the beginig of a row and move into column A 
        ActiveSheet.Cells(ActiveCell.Row, 1).Select
' paste copied data into this cell
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
'Now I select whole row
        ActiveCell.EntireRow.Select
'I need to replace PLGDY with PLGDN in this row
Selection.Replace What:="PLGDY", Replacement:="PLGDN", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
'I need to move active cell 10 columns right and one row down because I want to find next PLGDY
        ActiveCell.Offset(1, 10).Select

End Sub

【问题讨论】:

    标签: excel vba replace copy-paste


    【解决方案1】:

    mrbungle 的答案是正确的!效果很好。

    对于发现此问题并打算使用此代码复制具有多个值的行的任何人,需要进行一项调整。 我能够复制/粘贴循环并更改变量以适应,唯一的例外是我需要在ActiveCell.EntireRow.Insert 之后添加ActiveCell.EntireRow.Select,否则当第二个循环出现时,它会替换原始值以及未选择新行。出于我的目的更新的代码是:

    Private Sub LT2V()
    
    Dim vCount As Integer
    
    'Add Lesser tier of 2V
     vCount = Application.WorksheetFunction.CountIf(Range("D:D"), "2V")
    
    Do Until vCount = 0
    Cells.Find(What:="2V", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
           :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
           False, SearchFormat:=False).Activate
    
    ActiveCell.EntireRow.Copy
    ActiveCell.EntireRow.Insert
    ActiveCell.EntireRow.Select
    
    Selection.Replace What:="2V", Replacement:="1V", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
    
    ActiveCell.Offset(1, 10).Select
    vCount = vCount - 1
    Loop
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      您是新手,我知道您可能不知道所有快捷方式和内置功能。我仍然一直在学习新的东西。在这种情况下,我使用内置的工作表函数CountIf 来获取值出现的次数。然后循环遍历,我喜欢使用Do Until Loop,然后在每个循环中减去 1,直到达到 0。

      Sub Find_and_Change()
      
      
      vCount = Application.WorksheetFunction.CountIf(Range("A1:Z100"), "PLGDY")
      
      Do Until vCount = 0
      
          Cells.Find(What:="PLGDY", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
                 :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
                 False, SearchFormat:=False).Activate
      
          ActiveCell.EntireRow.Copy
          ActiveCell.EntireRow.Insert
      
          Selection.Replace What:="PLGDY", Replacement:="PLGDN", LookAt:=xlPart, _
          SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
          ReplaceFormat:=False
      
          ActiveCell.Offset(1, 10).Select
          vCount = vCount - 1
      
      Loop
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        相关资源
        最近更新 更多