2016-11-10 4 views
0

感謝を削除し、私は私が必要なものについては、以下のマクロを使用することができました:要するにVBAでCSVファイル内の行の特定の間隔ここで、このフォーラムでは、いくつかの素晴らしい人たちに

Public Sub main() 
    'declaration 
    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 

、これが作成されます20行目毎の行は空白行の列「A」の上のセルから番号を受け取り、列「H」の20番目の前のセルを合計して空白行に「合計スコア」を設定します。

もう1つ質問があります。

上記のマクロを実行すると、20行と20行の合計が新しい行に追加されます。理想的には、合計された20行のすべてを削除し、追加された行を残したいだけです。これの問題は、前のマクロの最後の部分が与えられた数のセルを合計し、行を削除すると加算が間違っていることです(列Aの上のセルの番号も同様です)。

マクロに何かを追加して、列Aの前のセルの合計と数値に影響を与えずに20行を削除する方法はありますか?

行2-21を削除し、行22をスキップし、行23-42を削除し、行43をスキップし、行44-63を削除し、行64をスキップするなどのようになります。

これはおそらく、以前に投稿されたマクロを変更する必要があることを意味しますが、尋ねる価値はあると思います。

ありがとうございました。

ベスト、ここでヘルゲ

+0

だから、基本的に、あなたはそれが変更されませんので、値に式から 'formulaCell'を変更したい、とあなたが行を削除したいですあなたはその公式で要約していた、正しい? – TheEngineer

+0

これは間違いない!さらに、上のセルの数値を桁Aで定数にしたいと考えています。 – HelgeE

答えて

1

あなたが行く:

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


    'Loop trough all rows in H column 
    Set rng = Range(SourceRange & "2") 
    While rng.Value <> "" 
     rng.Offset(20).Resize(1).EntireRow.Insert 
     With rng.Offset(20) 
      .Formula = "=sum(" & SourceRange & rng.Row & ":" & SourceRange & rng.Offset(19).Row & ")" 
      .Formula = .Value2 

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

      'set next group start 
      Set rng = rng.Offset(21) 

      'delete rows 
      iFirstRow = .Column - 1 
      With Range(.Offset(-20, -iFirstRow), .Offset(-1, -iFirstRow)) 

       iLastCell = .Cells(.Rows.Count, "A").End(xlUp).Row 

       'Fill the Blank Rows in A 
       With Cells(rng.Offset(-1).Row, 1) 
        .Formula = "=" & Cells(iLastCell, 1).Address 
        .Formula = .Value2 
       End With 

       'Delete group rows 
       .EntireRow.Delete 
      End With 

     End With 
    Wend 
End Sub 
+0

ありがとうございました!これは美しいです。しかし、1つの "問題"が残っています。 '空白行を塗りつぶす'は、行が削除されたときの情報を「保持」しません。他のすべての行を削除した後でも "sum"( "H")定数を作成するコードから見ようとしています。私はそれを見つけることができません。 – HelgeE

+0

私はあなたがA列にしたいことをかなり理解していませんでした。詳しく説明してください。関数を削除して値を保持するには、セルに '.Formula = .Value2'を使用します。 – cyberponk

+0

あなたはまさに正しいです。私は桁Aの関数を削除したいが、値を保持する。 .Formula = .Value2は 'Aで空白行を塗りつぶす'に書き込まれますが、マクロを実行すると前のセルから情報が引き継がれます。例として、桁Aは「候補」と命名されています。マクロA2、A3、A4、A5、A6は、最初に1,2,3,4,5の候補番号で満たされますが、マクロがA2、A3、A4、A5、A6の行を削除すると、その上のセルは「候補」です。これは意味がありますか?あなたのすべての協力に感謝します。 – HelgeE

関連する問題