[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『番号が同じだったら数量を合算したい』(キリン)
お世話になっております。
番号が同じだった場合は、合算数量を記入するマクロを作成したいと思っていますが、
うまくできず、教えていただきたく、よろしくお願いいたします。
(合算数量シート)
1行目タイトル
(A1)数量 (B1)番号 (C1)合算数量
(A2)100 , A1, 1100
(A3)200 ,(空白セル), 200
(A4)300 , B3 , 1000
(A5)400 ,A1 , 1100
(A6)500 , (空白セル),500
(A7)600 , A1 , 1100
(A8)700 , B3 , 1000
・・
表は変動しており、A列が最大行となります。
空白セルは、文字記載ではなく、本当に空白セルとなります。
C列の合算数量を、マクロで求めたいものとなります。
番号A1は、この場合3つあるので、100+400+600 =1100を記載したく、
空白セルの場合は、合算ではなく、その行のA列の数量をそのまま記載したいです。
変数に格納するのかと思ったのですが、よくわからず教えていただけましたら助かります。
よろしくお願いいたします。
Sub gassan()
Dim gasSh As Worksheet
Dim gyo As Long
Dim suryo As Variant
Set gasSh = Worksheets("合算数量")
For gyo = 2 To gasSh.Cells(Rows.Count, "A").End(xlUp).Row
suryo = ""
suryo = suryo + gasSh.Cells(3, "A").Value
Next
End Sub
< 使用 Excel:unknown、使用 OS:unknown >
=SUMIF(B1:B8,"=A1",A1:A8)
他
=SUMPRODUCT((B2:B8="A1")*(A2:A8))
kk = "A1"
ans = Application.Evaluate("SUMPRODUCT((B2:B8=""" & kk & """)*(A2:A8))")
MsgBox ans
(納豆スパ) 2021/12/04(土) 17:23
Option Explicit
Sub test() Dim gasSh As Worksheet Dim r As Range
Set gasSh = Worksheets("合算数量") Set r = gasSh.Range("A2", gasSh.Cells(Rows.Count, "A").End(xlUp)).Columns(3)
r.Formula = "=IF(B2="""",A2,SUMIF(B:B,B2,A:A))" r.Value = r.Value
End Sub
(マナ) 2021/12/04(土) 18:24
マナ様
ご回答有難うございます。
サンプルテストでは、起動できたのですが、実際の大きなシートでは、#NAME?の表示になってしまいました。
#NAME?を調べてみたところ、構文エラーと出てきたので(コピペが出来ない環境なので)よく見直してみましたが
やはり" : , など記載間違えはなさそうです。
実際は、Aに当たる箇所が、Kになり
Bに当たる箇所が、APになり
Cに当たる箇所が、AYになります。
Set r = gasSh.Range("A2", gasSh.Cells(Rows.Count, "A").End(xlUp)).Columns(3) → (41)にしましたのでAYに記入されています。 gasSh.Range("A2", gasSh.Cells(Rows.Count, "A")は、 番号A1は、3つと捉えているのでしょうか? それとも、100+400+600 =1100と捉えているのでしょうか?
r.Formula = "=IF(B2="""",A2,SUMIF(B:B,B2,A:A))" →r に、数式を入れる。 もし、B2(番号)が空白セルだったら、A2数量を記入する そうでなかったら、の後がよくわからず、もしかしたら、ここの書き方でエラーになっているのかもしれません。 r.Value = r.Value →すみません。こちらの意味も教えていただきたく、よろしくお願いいたします。
サンプルでは、起動できたのですが
大きいシートでは、起動出来ずに、本当に申し訳ございません。
エラーになってしまう理由がわかりますでしょうか?
よろしくお願いいたします。
(キリン) 2021/12/04(土) 21:31
Sub test2() Dim gasSh As Worksheet Dim r As Range
Set gasSh = Worksheets("合算数量") Set r = gasSh.Range("K2", gasSh.Cells(Rows.Count, "K").End(xlUp)).EntireRow.Columns("AP")
r.Formula = "=IF(AP2="""",K2,SUMIF(AP:AP,AP2,K:K))" r.Value = r.Value
End Sub
(マナ) 2021/12/04(土) 23:02
ブランクの箇所は、その行の数量Kをそのまま記入したいのですが
今は、ブランクのセルの合算が記入されてしまいます。
こちらも、サンプルでは上手く起動するのですが、大きい表でのみ合算になってしまいます。
何度も大変申し訳ないのですが、ご確認いただけましたら幸いです。
宜しくお願いいたします。
(キリン) 2021/12/05(日) 00:10
(マナ) 2021/12/05(日) 09:49
r.Formula = "=IF(Trim(AP2)="""",K2,SUMIF(AP:AP,AP2,K:K))"
または、データを修正してもよいなら
Sub test3() Dim gasSh As Worksheet Dim r As Range
Set gasSh = Worksheets("合算数量") With gasSh.Range("K2", gasSh.Cells(Rows.Count, "K").End(xlUp)).EntireRow .Columns("AP").Value = Application.Trim(.Columns("AP")) Set r = .Columns("AY") End With
r.Formula = "=IF(AP2="""",K2,SUMIF(AP:AP,AP2,K:K))" r.Value = r.Value
End Sub
(マナ) 2021/12/05(日) 13:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.