2016-05-13 68 views
0

enter image description here一系列清晰的内容如果单元格中包含特定文本

我要作出这样的清除细胞在蓝色边框(〜40.000行)的内容宏当细胞在红边框(列AX)包含文本“NoBO”(=无延期)而不会丢失列AP:AX中的公式。

Sub clear_ranges() 
Dim ws As Worksheet 
Dim x As Integer 
Dim clearRng As Range 

Application.ScreenUpdating = False 

Set ws = ThisWorkbook.Sheets("Input") 

For x = 6 To ws.Range("B" & Rows.Count).End(xlUp).Row 
    If (ws.Range("AX6" & x).Value = "NoBO") Then 
     If clearRng Is Nothing Then 
      Set clearRng = ws.Range("B6" & x & ":" & "AN6" & x) 
     Else 
      Set clearRng = Application.Union(clearRng, ws.Range("B6" & x & ":" & "AN6" & x)) 
     End If 
    End If 
Next x 
clearRng.Clear 
End Sub 

,由于某种原因:

For x = 6 To ws.Range("B" & Rows.Count).End(xlUp).Row 

给了我一个错误 “溢出”。搜索后,我知道这个错误意味着什么,但我找不到解决方案。

tl; dr - 我想删除范围B6:B #####(直到最后一行)到AN6:AN #### *(直到最后一行)如果单元格AX ##### containts NOBO

+0

x是一个Integer,只能保存32,767的值,所以如果你的数据超出了那个行,它就会溢出x的最大值。正如加里的回答所述 - 将其改为“龙”,无论如何它都更有效率。 –

+0

谢谢,我会试试 – Bluesector

回答

0

尝试:

Sub clear_ranges() 

Dim ws As Worksheet 
Dim x As Integer 
Dim clearRng As Range 

Application.ScreenUpdating = False 

Set ws = ThisWorkbook.Sheets("Input") 

For x = 6 To ws.Range("B" & Rows.Count).End(xlUp).Row 
    If ws.Range("AX" & x).Value = "NoBO" Then 
     ws.Range("B" & x & ":" & "AN" & x).Clear 
    End If 
Next x 

Application.ScreenUpdating = True 

End Sub 

我觉得Union功能只可以存储多达30米范围内,因此可能无法满足您的需求。

+0

仍然会出现溢出错误 – Bluesector

0

嗨,如果你正在删除行,这是最好使用For Each Loop或从列的底部开始并进行处理。

'Loop through cells A6:Axxx and delete cells that contain an "x." 
    For Each c In Range("AX6:A" & ws.Range("B" & Rows.Count).End(xlUp).Row) 
     If c.Value2 = "NoBo" Then 

      Set clearRng = ws.Range("B" & c.Row & ":" & "AN" & c.Row) 

     End If 
     clearRng.Clear 
    Next  
2

使用Integer太容易得到溢出。替换:

Dim x As Integer 

有:

Dim x As Long 
+0

谢谢!但是你知道如何解决这个问题吗? – Bluesector

+0

@Bluesector按照此响应中的建议将'X'从'Integer'更改为'Long'时发生了什么? –

+0

'clearRng.Clear'(代码结束)现在给我一个错误...即时通讯有点困惑,我认为这只是一个溢出。 - 对象变量或With块变量未设置 – Bluesector

0

试试这个

Option Explicit 

Sub clear_ranges() 
Dim ws As Worksheet 

Application.ScreenUpdating = False 
Set ws = ThisWorkbook.Sheets("Input") 
With ws 
    With .Range("B5:AX" & .Cells(.Rows.Count, "B").End(xlUp).Row) 'take all data 
     .AutoFilter Field:=49, Criteria1:="NoBO" 'filter to keep only rows with "NoBO" in column "AX" (which is the 49th column from column "B" 
     With .Offset(1).Resize(.Rows.Count - 1) 'offset from headers 
      If Application.WorksheetFunction.Subtotal(103, .Columns(1)) > 0 Then Intersect(.SpecialCells(xlCellTypeVisible), ws.Columns("B:AN")).ClearContents 'clear cells in columns "B:AN" of filtered rows 
     End With 
     .AutoFilter 'remove autofilter 
    End With 
End With 

Application.ScreenUpdating = True 
End Sub 
+0

'.AutoFilter字段:= 48,Criteria1:=“NoBO”'范围类的自动过滤器方法失败 – Bluesector

0

您可以尝试

假设有在AX列没有空单元格

Sub clr_cell() 

For i = 6 To ActiveSheet.Range("AX6", ActiveSheet.Range("AX6").End(xlDown)).Rows.Count 
'counts the no. of rows in AX and loops through all 

If ActiveSheet.Cells(i, 50).Value = "NoBo" Then 

ActiveSheet.Range(Cells(i, 2), Cells(i, 40)).ClearContents 
'clears range B to AN 

End If 

Next i 

End Sub 

我测试了这个40k行,它工作正常。由于没有,执行需要一段时间。的行也许。

相关问题