2015-08-12 1 views
0

Я пишу макрос в Excel. Часть кода находит ячейку, в которой есть «Attached Packaging», а затем удаляет содержимое группы ячеек, окружающих эту ячейку.Excel код VBA, чтобы найти определенную ячейку и удалить ее окружение

Вот код, который в настоящее время достигает этого:

Cells.Find("Attached Packaging").Activate 
ActiveCell.Resize(2, 4).Select 
Selection.Clear 
ActiveCell.Offset(1, -1).Select 
Selection.Clear 

Моя проблема сейчас в том, что я, неожиданно, несколько ячеек с «Attached Packaging» в них, которые в настоящее время также должны быть удалены.

Итак, подведем итог: мне нужно изменить этот код, чтобы он находил все ячейки «Attached Packaging» в электронной таблице и удалял группу вокруг них.

+0

http://stackoverflow.com/questions/31479575/vba-how-to-find-search-value-from-sheet-dmr-and-then-from-found-search-value/31480620# 31480620 – findwindow

ответ

2
Sub clear() 

Dim ws As Worksheet 
Dim search As String 
Dim f As Variant 
Dim fRow As Long 
Dim fCol As Long 

search = "Attached Packaging" 
Set ws = ThisWorkbook.Worksheets("Sheet4") 'change sheet as needed 

With ws.Range("A1:AA1000") 'change range as needed 
    Set f = .Find(search, LookIn:=xlValues) 
    If Not f Is Nothing Then 
     Do 
      fRow = f.Row 
      fCol = f.Column 
      ws.Range(Cells(fRow, fCol), Cells(fRow + 1, fCol + 3)).clear 
      ws.Cells(fRow + 1, fCol - 1).clear 
      Set f = .FindNext(f) 
     Loop While Not f Is Nothing 
    End If 
End With 

End Sub 
+0

Найти лучше, чем смотреть на каждую ячейку. – brettdj

0
Sub clearCells() 
Dim ws As Worksheet 
Dim lastrow As Long, currow As Long 
Dim critvalue As String 

Set ws = Sheets("Sheet1") 

' Change A to a row with data in it 
lastrow = ws.Range("A" & Rows.Count).End(xlUp).Offset(1).Row - 1 

'Change 2 to the first row to check 
For currow = 2 To lastrow 
    critvalue = "Attached Packaging" 

    ' Change A to the row you are looking in 
    If ws.Range("A" & currow).Value = critvalue Then 

     ' Use the currow to select the row and then create an offset 
     ws.Range("A" & currow).offset("B" & currow - 1).clear 
     ws.Range("A" & currow).offset("B" & currow + 1).clear 

    End If 
Next currow 

End Sub 

Внесите необходимые изменения там, где я прокомментировал. Он должен работать.

+0

Вы принимаете предположение, что критическая оценка встречается только в столбце А, который мы не знаем, если это правда. Вы хотите использовать find, как я упоминал в своем комментарии. – findwindow

Смежные вопросы