No.8
- 回答日時:
#6です
> "=SUM(R[-{%1}]C:R[-1]C)"
> Replace(CF, "{%1}", i)
> "{%1}"の意味がわかりません。
"{%1}" は、単に置き換える文字列を指定しているだけです
この式は、各表下の 合計 右側に設定するものになります
例えば、
F8 に設定する時には、同じ列の4行前から1行前まで
"=SUM(R[-4]C:R[-1]C)" を設定します
F16 に設定する時には、同じ列の5行前から1行前まで
"=SUM(R[-5]C:R[-1]C)" を設定します
この式の異なる部分は、4 → 5 の所だけ
置換えやすいように、その部分を {%1} としていただけです
何行前・・・・変数 i に作ってました
必要あれば、処理の内容解説しますが・・・・
押し付けはしません
No.7
- 回答日時:
No.6
- 回答日時:
まとめて処理してみた
添付画像、左側 → 右側に
処理対象は、アクティブシート(結果は上書き)
出来上がったものを対象に、再度実行しても変化なし・・・のハズ
どうなりますか
Option Explicit
Public Sub Samp1()
Dim rng As Range, r As Range, rL As Range
Dim vS As Variant, vG As Variant
Dim i As Long
Const CF As String = "=SUM(R[-{%1}]C:R[-1]C)"
Const CLM As String = "総合計"
Const CSM As String = "合計"
Application.ScreenUpdating = False
With ActiveSheet
Set r = .Range("E1").End(xlDown)
While (r.Row < Rows.Count)
If (r.Value <> CLM) Then
With r.CurrentRegion
i = .Rows.Count
If (r.Value = "単価") Then
If (rng Is Nothing) Then
Set rng = .Rows(1)
End If
i = i - 1
ElseIf (Not rng Is Nothing) Then
rng.Copy .Cells(0, 1)
End If
If (r.Offset(1).Value <> "") Then
Set r = r.End(xlDown)
End If
If (r.Value = CSM) Then
i = i - 1
Else
Set r = r.Offset(1)
r.Value = CSM
End If
r.Offset(, 1).FormulaR1C1 = Replace(CF, "{%1}", i)
vS = vS + WorksheetFunction.Sum(.Columns(3))
vG = vG + r.Offset(, 1).Value
End With
r.CurrentRegion.Borders.LineStyle = xlContinuous
Set rL = r
End If
Set r = r.End(xlDown)
Wend
If (Not rL Is Nothing) Then
rL.Cells(3, 0).Resize(, 3).Value = Array(vS, CLM, vG)
.Columns.AutoFit
End If
End With
Application.ScreenUpdating = True
End Sub
今回専用にするのなら
数量の合計は D 列を SUM すれば
金額の合計は F 列を SUM して ÷2するか
SUMIF で、E 列が "合計" の所の F 列を求めれば・・・
この回答へのお礼
お礼日時:2019/07/02 16:00
ありがとうございます。
いろんな答えがあり迷っています。
このコードわたしには難しいかもしれません。
"=SUM(R[-{%1}]C:R[-1]C)"
Replace(CF, "{%1}", i)
"{%1}"の意味がわかりません。
No.5
- 回答日時:
No.1(3はほっといて)です。
結局のところ
https://oshiete.goo.ne.jp/qa/11182075.html
このリンク先の左表が元々の状態ですよね?
そこに集団毎に『”合計”と”タイトル”』を付け足して、且つ今回の質問につなげたいと言う事ではないのかな?
それとも質問毎にプロシージャ―を分けて作成したいのか・・・?
ところで数量の総合計には2つの捉え方があります。
・品番を無視した数量の総合計
・品番毎に合計を出して一覧にする
前者は余り意味はない気がしますけどそれを求めているのか、後者は品番毎に管理できる(ある月の品番毎の売り上げ数を知ることが出来る)と思いますけど。
それに品番毎の小計も出せますしね。(でも品番が同じでも単価が違う場合がある?)
さてさてどちらが目的でしょうか?
No.4
- 回答日時:
今の所、表の塊が2つま場合に限ります。
右革に増えていくようなら、もう一度手直しします。No.2 の最後尾の
.Offset(, -1).Value = "総合計"
End With
Call QuantitiesTotal '← ここにこれを入れる
End Sub
Sub QuantitiesTotal()
Dim c As Range, r As Range, c1 As Range
Dim Rng As Range
Dim QTotal As Double
Dim lstC
Set c = Cells.Find(What:="数量*", After:=Range("A1"), LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows) '右方向に探していきます。
Set Rng = Range(c, Cells(Rows.Count, c.Column).End(xlUp))
QTotal = Application.Sum(Rng)
Set c1 = c
Set c = ActiveSheet.UsedRange.Find(What:="数量*", After:=c, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows)
If Not c Is Nothing And Not c Is c1 Then
Set Rng = Range(c, Cells(Rows.Count, c.Column).End(xlUp))
If Rng.Cells(Rng.Count).Offset(, -1).Value = "総数量" Then '誤動作を防ぐため
Set Rng = Rng.Resize(Rng.Count - 1)
End If
QTotal = Application.Sum(Rng) + QTotal
End If
Set r = ActiveSheet.UsedRange.Find(What:="総合計*", After:=c, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByColumns)
With r
.Offset(, -1).Value = QTotal
.Offset(, -2).Value = "総数量"
End With
End Sub
p.s. 作った後に気がついたけれども、数式をおいたほうが無難だったかなって思います。
No.3
- 回答日時:
No.1です。
”合計”と言う文字でやる方法もありましたね。
私ならSUMIF関数で、
Dim sosum As Long
'~略~
'~For~Next~
With Range("e4", Cells(Rows.Count, "e").End(xlUp))
sosum = WorksheetFunction.SumIf(Range(.Address), "合計", .Offset(, 1))
.Offset(.Rows.Count + 1).Resize(1, 2).Value = Array("総合計", sosum)
End With
こうしますかね。(No.1と同様左に表があると仮定して。)
No.2
- 回答日時:
合計という文字を探して、その左側が合計の数値があるとします。
文字がなければ、探せません。
'//
Sub TotalFinds()
Dim Rng As Range
Dim c As Range
Dim dTotal As Double
Dim col As Long
Dim rw As Long
Dim FirstAddress As String
Set Rng = ActiveSheet.UsedRange
'合計の文字を探す
Set c = Rng.Find("合計*", , xlFormulas, xlWhole)
If Not c Is Nothing Then
FirstAddress = c.Address
Do
dTotal = dTotal + c.Offset(, 1).Value
Set c = Rng.FindNext(c) '
Loop While Not c Is Nothing And c.Address <> FirstAddress
End If
'書き出す場所を探す(上部のデータの始まりの行が重要です)
col = Cells(3, Columns.Count).End(xlToLeft).Column
rw = Cells(Rows.Count, col).End(xlUp).Row
With Cells(rw + 2, col)
.Value = dTotal
.Offset(, -1).Value = "総合計"
End With
End Sub
No.1ベストアンサー
- 回答日時:
>月ごとに品番の数が変わります。
月毎ってどの集団を指しているのでしょう?
『売上月』かと思えば、とても『日付』とは思えないですし、まして
>各月の金額の総合計です。
>28行 L列に合計値
ならば尚更『????』ですね。
単に『月別シートにあるデータ区分の最終行から2行下に書き足したい』って感じならわかりますけど。
それとこの類似している質問で左右に表が存在してますが、実際は片方だけなのではないのでは?
なので今回は『L列に』とありますが実は『F列』だったり?
一応F列であると仮定して過去の回答を弄りました。
https://oshiete.goo.ne.jp/qa/11182920.html
の一部を変えて、
Dim sosum As Long '最初に宣言
'~略~
sosum = 0
For Each R In Range("f4", Cells(Rows.Count, "f").End(xlUp)).SpecialCells(xlCellTypeConstants, xlNumbers).Areas
With R.Resize(1)
if .Row > 4 Then .Offset(-1 , -4).Resize( , 5).Value = Range("B3:F3").Value
With .Offset(R.Rows.Count)
.Offset(, -1).Value = "合計"
.Value = WorksheetFunction.Sum(R)
sosum = sosum + .Value '個々の集団の合計を加算していく
End With
With .CurrentRegion
.Borders.LineStyle = 2
.BorderAround LineStyle = xlcontiuous
End With
End With
Next
Range("f" & Cells(Rows.Count, "f").End(xlUp).Row + 2).Offset(, -1).Resize(, 2).Value = Array("総合計" , sosum) '総合計を追加
とかかな?
Excel自体で検証してないのでミスってたらごめんなさい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル/列追加時、合計行の計算式 7 2023/03/15 11:14
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- Excel(エクセル) グループの最後の行に書式、計算式なども同じ行を追加するマクロを教えてもらえませんか。 7 2022/05/18 10:13
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- Excel(エクセル) SUBTOTAL SUMIF?? 2 2023/03/16 11:25
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Excel(エクセル) エクセルシートの合計の変動 5 2022/04/05 15:56
- 医療 医療費のお知らせに記入されている金額のズレがありました 7 2023/01/26 19:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
IIF関数の使い方
-
VBAでのリスト不一致抽出について
-
VBマクロ 色の付いたセルを...
-
マクロ 最終列をコピーして最終...
-
VBAを使って検索したセルをコピ...
-
エクセル VBA ユーザーフォー...
-
VBA A列にありB列にないものま...
-
B列の最終行までA列をオート...
-
複数処理 Worksheet_Change(ByV...
-
超難 日付に対するクロス集計
-
文字列の結合を空白行まで実行
-
VBA 値と一致した行の一部の列...
-
空白セルをとばして転記
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA intersect colu...
-
VBAのFind関数で結合セルを検索...
-
オートフィルタをマクロで作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報
月ごとに品番の数が変わります。
それにより、一番下の表の2行したに
総合計を表示させたいのです
申し訳ございません
もう一つだけ、お願いがあります。
数量の総合計と 金額の合計を
やりたいのですが、
教えては頂けませんでしょうか。
お願い申し上げます
わたしが辿り着いたのは
Sub 合計2()
Dim i As Long, j As Long
For j = 1 To 2
For i = 673 To 682
Cells(683, j) = Cells(683, j) + Cells(i, j)
Next i
Next j
End Sub
セルの番地は違いますが、こんな感じでした。
ふつうです。