[[20211204161859]] 『番号が同じだったら数量を合算したい』(キリン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『番号が同じだったら数量を合算したい』(キリン)

お世話になっております。
番号が同じだった場合は、合算数量を記入するマクロを作成したいと思っていますが、
うまくできず、教えていただきたく、よろしくお願いいたします。

(合算数量シート)
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


マナ様
もしかすると、Bに当たる番号箇所ですが、
実際のシートでは、文字も入っていることが原因でしょうか?
A1
111.33
ヤマダサマ
YAMADA様
などのケースもあります。
もしかすると、エラーの原因でしょうか?
説明不足で、申し訳ありません。
(キリン) 2021/12/04(土) 22:19

 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


マナ様
ご回答いただき、有難うございます。
合算数量を記載することができました。(記入欄は、AYなのでEntireRow.Columns("AY")にしました。

ブランクの箇所は、その行の数量Kをそのまま記入したいのですが
今は、ブランクのセルの合算が記入されてしまいます。
こちらも、サンプルでは上手く起動するのですが、大きい表でのみ合算になってしまいます。
何度も大変申し訳ないのですが、ご確認いただけましたら幸いです。
宜しくお願いいたします。
(キリン) 2021/12/05(日) 00:10


スペースが入力されているとか
実際はブランクでないということはありませんか

(マナ) 2021/12/05(日) 09:49


マナ様
ご返信いただき、有難うございます。
おっしゃられる通り、空白セルと思っていたセルをダブルクリックすると、左端にカーソルがこなく、スペースが入力されていました。
このスペースは、元データからあるものでした。
デリートで全て削除すると、スペースも消えるのですが、元データをコピペしているため、スペースも一緒に貼り付けられている状態です。
数千行のデータで、空白セルもたくさんあるのですが、空白セル=スペースなしの空白セルにするには、マクロではどうしたらいいのでしょうか?
何度も大変申し訳ありません。よろしくお願い致します。
(キリン) 2021/12/05(日) 12:51

数式を変更
 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


マナ様
大変有難うございます。
出来ました。本当にお世話になり、有難うございました。
(キリン) 2021/12/05(日) 22:26

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.