2016-11-10 105 views
3

我是这个论坛的新手,请耐心等待。VBA Excel - 以特定间隔删除行

我有一个CSV文件,我需要应用一些VBA模块来获取我需要的信息。

总之,我有3个宏一起以下:

  1. 创建一个新的行每20列
  2. 采取从上述(A列)细胞的数量和填补空白空间这个数字的新行。
  3. 从新行之前的20行中求和H列中的数字以获得总分。只要新行出现(每20行),随后就会完成此操作。

是否有可能在一个宏中获得这三个宏?这样可以更轻松地交给可能需要使用这些宏的其他人。

当前代码:

' Step 1 
Sub Insert20_v2() 
    Dim rng As Range 

    Set rng = Range("H2") 
    While rng.Value <> "" 
     rng.Offset(20).Resize(1).EntireRow.Insert 
     Set rng = rng.Offset(21) 
    Wend 
End Sub 

' Step 2 
Sub FillBlanks() 
    Columns("A:A").Select 
    Selection.SpecialCells(xlCellTypeBlanks).Select 
Selection.FormulaR1C1 = "=R[-1]C" 

End Sub 

' Step 3 
Sub AutoSum() 
    Const SourceRange = "H" 
    Dim NumRange As Range, formulaCell As Range 
    Dim SumAddr As String 
    Dim c As Long 

    For Each NumRange In Columns(SourceRange).SpecialCells(xlConstants, xlNumbers).Areas 
     SumAddr = NumRange.Address(False, False) 
     Set formulaCell = NumRange.Offset(NumRange.Count, 0).Resize(1, 1) 
     formulaCell.Formula = "=SUM(" & SumAddr & ")" 

     'change formatting to your liking: 
     formulaCell.Font.Bold = True 
     formulaCell.Font.Color = RGB(255, 0, 0) 

     c = NumRange.Count 
    Next NumRange 

End Sub 

感谢您的任何帮助。 最佳,

黑尔格

+1

我会用@ RCaetano的方法,因为最好让你的功能保持在最低限度。这样可以更容易维护和重复使用 –

回答

1

那应该不是那么难。

Public Sub main() 
     'deklaration 
     Dim rng As Range 
     Const SourceRange = "H" 
     Dim NumRange As Range, formulaCell As Range 
     Dim SumAddr As String 
     Dim c As Long 

     'Loop trough all Rows 
     Set rng = Range("H2") 
     While rng.Value <> "" 
      rng.Offset(20).Resize(1).EntireRow.Insert 
      Set rng = rng.Offset(21) 
     Wend 

     'Fill the Blank Rows in A 
     Columns("A:A").Select 
     Selection.SpecialCells(xlCellTypeBlanks).Select 
     Selection.FormulaR1C1 = "=R[-1]C" 


     For Each NumRange In Columns(SourceRange).SpecialCells(xlConstants, xlNumbers).Areas 
      SumAddr = NumRange.Address(False, False) 
      Set formulaCell = NumRange.Offset(NumRange.Count, 0).Resize(1, 1) 
      formulaCell.Formula = "=SUM(" & SumAddr & ")" 

      'change formatting to your liking: 
      formulaCell.Font.Bold = True 
      formulaCell.Font.Color = RGB(255, 0, 0) 

      c = NumRange.Count 
     Next NumRange 

End Sub 
+0

我无法幻想你是多么容易做到这一点。谢谢!! 如果我想添加颜色到'填充A中的空白行,我可以只添加(或更复杂?): formulaCell.Font.Bold = True formulaCell.Font.Color = RGB(255,0 ,0) 根据“Selection.FormulaR1C1 =”= R [-1] C“? – HelgeE

+1

您可以添加'Selection.Font.Bold = True',然后'Selection.Font.Color = RGB(255,0,0 )'Selection.FormulaR1C1 =“= R [-1] C'下方,它将起作用。但是我给你一个小建议:不惜一切代价避免'.Select'和'Selection',因为它们可能会导致错误。您应该使用*范围*代替。有关更多信息,请参阅以下网址:http://www.excel-easy.com/vba/range-object.html – RCaetano

+0

非常感谢您的评论。我一定会阅读范围! – HelgeE

3

您可以创建一个Sub呼吁所有已创建的其他潜艇。

例子:

Sub DoAllTasks() 

    Insert20_v2 
    FillBlanks 
    AutoSum 

End Sub 

然后你只需要创建一个按钮,并分配给DoAllTasks或直接运行宏。

HTH;)

+0

谢谢!我也会尝试这个。将有机会深入了解VBA的工作原理。 – HelgeE