2016-11-10 134 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