No.2ベストアンサー
- 回答日時:
コード が A1 セルから下向きに並び,
金額 が B1 セルから下向きに並んでいるとすると,
つまりこんな感じに↓,
A B
1 10
1 20
1 50
2 40
2 20
2 30
3 50
3 10
この場合,
マクロコードは次のようになると思います。
------------------------------------
Sub 空白セルに合計を算出()
' 変数mySubtotal(小計) の初期化
mySubtotal = 0
' 変数mySum(合計) の初期化
mySum = 0
' 最終行の取得
LastRow = Range("A65536").End(xlUp).Row
' 最終行の次の行まで繰り返し
For i = 1 To LastRow + 1
' A列が空白セルでなかったらB列を足す
If Range("A" & i) <> "" Then
mySubtotal = mySubtotal + Range("B" & i).Value
' A列が空白セルだったらB列に合計を記入
Else
Range("A" & i).Value = "計"
Range("B" & i).Value = mySubtotal
mySum = mySum + mySubtotal
' 変数myTotal の初期化
mySubtotal = 0
End If
Next i
' A列の最終行の2つ下のセルに「合計」を記入
Range("A" & LastRow + 2) = "合計"
' A列の最終行の2つ下のB列セルに「合計」を出力
Range("B" & LastRow + 2) = mySum
End Sub
------------------------------------
まず,上の行から順に,
A列 が空白行でないかぎり,B列 の値を変数(mySubtotal)上で合計して行き,
A列が空白だと,それまでの変数上の合計を B列に書き出し,
変数上の合計を 0 にもどす。
というのを,
A列の最終セルの次のセルまで繰り返しているだけです。
合計 mySum の方は,
mySubtotal を 0 に戻す前に,
加算後代入して行き,最後に A列 の最終行の2つ下のB列セルに「合計」を出力しているだけで,
全体の流れから言うと副産物に近いです。
変数の宣言は省略しました。
また,実際のデータを見ないとエラーの推測ができないので,エラー処理は入れていません。
No.4
- 回答日時:
#1さんのご指摘のように、なぜ、マクロかという問題が残りますね。
計算されるデータは、特殊な状態にあるものですから、当然、マクロは、その特殊な状態をチェックする必要が出てきます。私のマクロの半分以上は、そのチェックに費やされています。また、すでに計算されたもの(ただし、私のマクロで計算されたもの)に対しては、再実行が可能なように作られています。
このような場合は、最初からコードを書くほうが楽だと思います。
Sub BlankEnterSubTotal()
Dim titleChk As Integer
Dim myRng As Range
Dim myArea As Range
Dim ar As Range
Dim strArea As String
Dim dummy As Range
'一行目に項目があるか、チェック
If VarType(Range("A1").Value) = vbString Then titleChk = 1
'一行目が空ならマクロを抜ける
If IsEmpty(Range("A1")) Then Exit Sub
Set myRng = Range(Range("B1").Offset(titleChk), Range("B65536").End(xlUp))
'データチェック
On Error Resume Next
Set dummy = myRng.SpecialCells(4) 'xlCellTypeBlanks
On Error GoTo 0
If dummy Is Nothing Then
If MsgBox("すでに、計算されているか、空白行のないデータです" & vbCrLf & _
"範囲の計算式を消去してやり直しますか?", vbQuestion + vbOKCancel, "式の消去") = vbCancel Then
GoTo Endline
End If
End If
On Error Resume Next
Set dummy = myRng.SpecialCells(xlCellTypeFormulas, 23)
On Error GoTo 0
If dummy Is Nothing Then
MsgBox "このデータは、加工できないデータです。終了します。", vbQuestion
GoTo Endline
Else
With dummy
.ClearContents
.Offset(, -1).ClearContents
Set myRng = Range("B2", Range("B65536").End(xlUp))
End With
End If
'計算実行
Application.ScreenUpdating = False
Set myArea = myRng.SpecialCells(2, 1) 'xlCellTypeConstants, xlNumbers
For Each ar In myArea.Areas
With ar
.Cells(.Cells.Count + 1).FormulaLocal = "=SUBTOTAL(9," & .Address(0, 0) & ")"
.Cells(.Cells.Count + 1).Offset(, -1).Value = "計"
End With
Next ar
With myRng
.Cells(.Count + 2).FormulaLocal = "=SUBTOTAL(9," & .Address(0, 0) & ")"
.Cells(.Count + 2).Offset(, -1).Value = "合 計"
End With
Application.ScreenUpdating = True
Endline:
Set myRng = Nothing
Set myArea = Nothing
End Sub
詳しいコードをありがとうございました。
コード2と3の計は、うまくいきましたが、
コード1の計は、1行目が集計されませんでした。
No.3
- 回答日時:
Sub test01()
rs = 2
d = Range("A65536").End(xlUp).Row
MsgBox d
'---
While d > rs
Cells(rs, "A").Select
re = Selection.End(xlDown).Row
MsgBox re
t = 0
For i = rs To re
t = t + Cells(i, "A")
Next i
Cells(re + 1, "A") = t
rs = re + 2
Wend
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) エクセルの表でダブりを解消する方法を、教えてください。 5 2023/04/12 12:11
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/07/13 12:31
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- 会計ソフト・業務用ソフト VBA 記録簿の行間を空けないコードを教えて欲しい。 5 2023/07/10 19:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/04 17:58
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
エクセル マクロで数値が変った時行挿入できますか
Excel(エクセル)
-
空白セルから空白セル間の計算方法
その他(Microsoft Office)
-
エクセル 空白セルまでの合計値を求める方法
Excel(エクセル)
-
-
4
空白行から空白行までの合計値とその間の最大値の算出方法について
Excel(エクセル)
-
5
エクセル 空白行にSUM関数を入力するには
その他(Microsoft Office)
-
6
空白セルまでの合計を求める方法
その他(Microsoft Office)
-
7
エクセルマクロ オートSUM(合計)式の挿入
Excel(エクセル)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
ExcelのVBAで連番を振る。
Excel(エクセル)
-
10
エクセルで、合計をもとめたいが、空白セルがある
Excel(エクセル)
-
11
【Excel】【VBA】空白のセルに上のデータを入力する方法
その他(Microsoft Office)
-
12
「選択範囲を解除してアクティブセルを選択」をマクロで行うにはどうすればよいでしょうか
Excel(エクセル)
-
13
Excelで一行おきに2行の空白行を挿入したい
その他(Microsoft Office)
-
14
VBAでセル入力の数式に変数を用いたい
Excel(エクセル)
-
15
特定の文字を条件に行挿入とそこからセルデータを追加するVBAについて
Visual Basic(VBA)
-
16
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
17
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
18
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
19
VBAで空白セルにのみ数値を代入する方法
Excel(エクセル)
-
20
エクセルマクロで表の途中の集計行と合計行追加
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
Excel グラフのプロットからデ...
-
罫線の斜線を自動で引くマクロ
-
特定の文字がある行以外を削除...
-
アクティブになっている行をマ...
-
[EXCEL]ボタン押す→時刻が表に...
-
エクセル 上下で列幅を変えるには
-
AのセルとB行を比較して、一致...
-
EXCELで最後の行を固定
-
エクセル マクロで数値が変っ...
-
Excel 時刻の並び替え
-
VBAで色の付いているセルの行削除
-
Excel2007で、指定範囲の行高さ...
-
セルの色によって条件文をつけ...
-
結合されたセルをプルダウンの...
-
excelのデータで色つき行の抽出...
-
エクセルVBA:リストに登録した...
-
Excel VBA アクティブセルから...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセル マクロ オートフィ...
-
[EXCEL]ボタン押す→時刻が表に...
-
AのセルとB行を比較して、一致...
-
特定の文字がある行以外を削除...
-
エクセル 上下で列幅を変えるには
-
エクセル マクロで数値が変っ...
-
Excel グラフのプロットからデ...
-
excelのデータで色つき行の抽出...
-
結合されたセルをプルダウンの...
-
アクティブになっている行をマ...
-
VBAで色の付いているセルの行削除
-
セルの色によって条件文をつけ...
-
excel 小さすぎて見えないセル...
-
電話番号の入力方式が違うデー...
-
Excelでカタカナ・ひらがな・英...
-
エクセルVBA 最終行を選んで並...
-
EXCELマクロを使い、空白行では...
-
EXCELで最後の行を固定
おすすめ情報