実現したいこと
大項目ごとの合計数字を代入したい。該当する列に。
添付の画像の①30行目と②40行目のカテゴリー別の合計行に、①には、23行目と29行目の小項目の合計を、②には、33行目と39行目の小項目の合計を該当する列に代入したい。
小項目の合計だけをうまく取得して、カテゴリー別の合計行に代入できないかと考えています。
発生している問題・分からないこと
<困っていること>
合計する行は固定の行ではないので、「合計」という文字列のある行を取得して、合計するようにしていますが、
①だけならうまくいくのですが、
②の合計を算出する際に、①の下の行からカウントしなければならないのですが(1行目からだと二重計上になるため)、それがうまくいきません。
なぜか、②の行には0が代入されてしまいます。
該当のソースコード
※試しに以下のコードで一つの列で合計値を出したのですが、問題なく算出され代入されます。 Sub CalculateSpecificSum() Dim ws As Worksheet Dim lastRow As Long Dim sumRow As Long Dim totalSum As Double Dim currentRow As Long ' シートを指定 Set ws = ThisWorkbook.Sheets("収益状況") ' 合計値を初期化 totalSum = 0 ' A列の最初の「合計」行を取得 sumRow = ws.Columns("A").Find(What:="合計", LookAt:=xlPart, MatchCase:=False).Row ' A列の「合計」行までループ For currentRow = 6 To sumRow - 1 ' 合計行の直前まで ' B列が「合計」の場合のみ処理 If ws.Cells(currentRow, "B").value Like "*合計*" Then ' 12列目(L列)の値を加算 totalSum = totalSum + ws.Cells(currentRow, 12).value End If Next currentRow ' 合計値をA列の「合計」行のL列に代入 ws.Cells(sumRow, 12).value = totalSum MsgBox "指定された合計の計算が完了しました!", vbInformation End Sub ※以下は、各列ごとに合計値を算出するようにしているはずなのですが、0となり算出されません。 Sub ProcessRevenueSums() Dim ws As Worksheet Dim sumRow As Long Dim totalSum As Double Dim currentRow As Long Dim colIndex As Variant Dim sumColumns As Variant ' シートを指定 Set ws = ThisWorkbook.Sheets("収益状況") ' 合計する列を指定 sumColumns = Array(12, 13, 14, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 30, _ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48) ' A列の最初の「合計」行を取得 sumRow = ws.Columns("A").Find(What:="合計", LookAt:=xlPart, MatchCase:=False).Row ' 各列を順次処理 For Each colIndex In sumColumns ' 合計値を初期化 totalSum = 0 ' A列の「合計」行までの範囲をループ For currentRow = 6 To sumRow - 1 ' 合計行の直前まで ' B列が「合計」の場合のみ処理 If ws.Cells(currentRow, "B").value Like "*合計*" Then ' 該当列の値を加算 totalSum = totalSum + ws.Cells(currentRow, colIndex).value End If Next currentRow ' 合計値をA列の「合計」行に代入 ws.Cells(sumRow, colIndex).value = totalSum Next colIndex MsgBox "指定された列に順次合計を代入しました!", vbInformation End Sub
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
上記に記載のとおりですが、どうしてもうまくいきません。
Excelの関数でしたら実現できると思うのですが、該当する行が変わるので、その都度入力する手間もかかるため、VBAで実現できないかと考えています。
どなたか力を貸していただければ幸いです。
よろしくお願いいたします。
補足
特になし
回答4件
あなたの回答
tips
プレビュー