2013-08-23 70 views
0

请告诉我如何改变我的代码来选择行,只有当他们在BC列中的值(忽略完整的行,如果在BC列单元格为空白):跳过行与特定列空白单元格

Private Sub CommandButton3_Click() 
    Range("A:a,b:b,c:c,e:e,bc:bc").Select 
    Selection.Copy 
    Workbooks.Add   
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=True, Transpose:=False 
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=True, Transpose:=False 
End Sub 
+0

你想忽略列#11如果两个B11和C11是空的或忽略列# 11如果B11或C11是空白的? –

+0

我想忽略完整的行,如果BC3是空白 –

回答

0

首先按原样运行您的代码。

Sub dural() 
    Dim N As Long, I As Long, r As Range 
    N = Cells(Rows.Count, "BC").End(xlUp).Row 
    For I = N To 1 Step -1 
     Set r = Cells(I, "BC") 
     If IsEmpty(r) Then 
      r.EntireRow.Delete 
     End If 
    Next 
End Sub 
+0

确定它会删除有关其他过滤器的空白行,但什么@tigeravatar –

+0

私人小组CommandButton3_Click() 昏暗wsData作为工作表 昏暗wsNew作为工作表 设置wsData = ActiveSheet 设置wsNew = Sheets.Add 随着相交(wsData.UsedRange,wsData.Columns( “BK”)) .Parent.AutoFilterMode =假 .AutoFilter 1中, “<>” 相交(.SpecialCells(xlCellTypeVisible).EntireRow ,wsData.Range(“A:A,B:B,F:F,I:I,H:H,BK:BK”))复制 wsNew.Range(“A1”)。PasteSpecial xlPasteValues wsNew.Range( “A1”)。PasteSpecial的xlPasteFormats .AutoFilter 结束随着 wsNew.Move 集wsData =无 集wsNew =无 结束子 –

+0

私人小组CommandButton3_Click() 昏暗wsData作为工作表 暗淡wsNew作为工作表 集wsData = ActiveSheet 集wsNew = Sheets.Add 随着相交(wsData.UsedRange,wsData.Columns( “BK”)) .Parent.AutoFilterMode =假 .AutoFilter 1中, “<>” 相交(.SpecialCells(xlCell TypeVisible).EntireRow,wsData.Range(“A:A,B:B,F:F,I:I,H:H,BK:BK”))复制 wsNew.Range(“A1”)。PasteSpecial xlPasteValues wsNew.Range( “A1”)。PasteSpecial的xlPasteFormats .AutoFilter 结束随着 wsNew.Move 集wsData =无 集wsNew =无端子 进一步过滤柱BL日期当前月份或先前月份然后BM挂起/ RESOLV –

0

您可以通过使用过滤器做到这一点:通过取消选中

  1. 对BC柱过滤器(空白)
  2. 复制的列
  3. 然后在添加工作簿中执行的行删除粘贴到新的工作表或工作簿中

如果必须是VBA,这里有两个代码将根据需要执行。 这第一个代码使用自动筛选:

Private Sub CommandButton3_Click() 

    Dim wsData As Worksheet 
    Dim wsNew As Worksheet 

    Set wsData = ActiveSheet 
    Set wsNew = Sheets.Add 

    With Intersect(wsData.UsedRange, wsData.Columns("BC")) 
     .Parent.AutoFilterMode = False 
     .AutoFilter 1, "<>" 
     Intersect(.SpecialCells(xlCellTypeVisible).EntireRow, wsData.Range("A:A,B:B,C:C,E:E,BC:BC")).Copy 
     wsNew.Range("A1").PasteSpecial xlPasteValues 
     wsNew.Range("A1").PasteSpecial xlPasteFormats 
     .AutoFilter 
    End With 

    wsNew.Move 

    Set wsData = Nothing 
    Set wsNew = Nothing 

End Sub 

这第二,替代代码使用了查找循环:

Private Sub CommandButton3_Click() 

    Dim rngFound As Range 
    Dim rngCopy As Range 
    Dim strFirst As String 

    Set rngFound = Columns("BC").Find("*", Cells(Rows.Count, "BC"), xlValues, xlWhole) 
    If Not rngFound Is Nothing Then 
     strFirst = rngFound.Address 
     Set rngCopy = rngFound 
     Do 
      Set rngCopy = Union(rngCopy, rngFound) 
      Set rngFound = Columns("BC").Find("*", rngFound, xlValues, xlWhole) 
     Loop While rngFound.Address <> strFirst 
    End If 

    If Not rngCopy Is Nothing Then 
     Sheets.Add 
     Intersect(rngCopy.Parent.Range("A:A,B:B,C:C,E:E,BC:BC"), rngCopy.EntireRow).Copy 
     Range("A1").PasteSpecial xlPasteValues 
     Range("A1").PasteSpecial xlPasteFormats 
     ActiveSheet.Move 
    End If 

    Set rngFound = Nothing 
    Set rngCopy = Nothing 

End Sub 
+0

非常感谢第一个工作... –

+0

嗨,我是另一个问题的结果...参考第一个程序,如果我想在BC之后用另一列进一步过滤,我想用BD这是日期列过滤它。我想与当月和前一个月来过滤....然后我想是具有议决及正在申请的2个值来过滤它.... PLZ帮助 –

+0

私人小组CommandButton4_Click() 昏暗wsData作为工作表,wsNew作为工作表,usrname usrname =用Ucase(ENVIRON( “用户名”)) 集wsData = ActiveSheet 集wsNew = Sheets.Add wsNew.Name = “测试” 随着相交(wsData.UsedRange,wsData.Columns( “BK”) ) .Parent.AutoFilterMode = False .AutoFilter 1,“<>” Intersect(.SpecialCells(xlCellTypeVisible).EntireRow,wsData.Range(“E:E,F:F,G:G,A:A,BK :BK,BL:BL,BN:BN,博:博 “))复制 wsNew.Range(” A1 “)。PasteSpecial的xlPasteValues wsNew.Range(” A1" ).PasteSpecial xlPasteFormats .AutoFilter 尾随着 wsNew.Move 设置wsData =无 设置wsNew =无 结束小组 –

相关问题