アプリ版:「スタンプのみでお礼する」機能のリリースについて

条件が一致したら別シートに転記し、計算させたい

Sheet1(data)
A     B   C   D   E   F   G
たまご1      1             ab-cd-1111
たまご2      3             ab-cd-1234
うどん5      2             cd-ga-1234
カレー7      1             qw-hg-1111
バナナ9      2             as-gh-4567


Sheet2(list)
A     B     C
たまご  800    ab-cd
うどん  1000    cd-ga
カレー  700    qw-hg
バナナ  500    as-gh


Sheet3(nouhin)
A     B   C   D
たまご  800   4   3200
うどん  1000   2   2000
バナナ  500   2   1000

Sheet1(data) C列に数量、G列に商品番号が入力、行数は場合によって変わります。
Sheet2(list) A列に正式な商品名、B列に価格、C列に代表商品番号が入力、行数は変更がありません。
Sheet3(nouhin) A列に正式な諸品名、B列に価格、C列は商品価格合計を入力させたいです。

よろしくお願いします。

質問者からの補足コメント

  • 【訂正】
    Sheet3(nouhin) A列に正式な商品名、B列に価格、C列に数量、D列は商品価格合計を入力させたいです。

      補足日時:2021/07/10 08:11

A 回答 (4件)

シート3にカレーがないのは疑問ですが。



シート2のC列に重複した値がないとしたら初級レベルなジジィは寝ぼけてこんな感じでしょうか?

Sub megu()
Dim myDic As Object
Dim r As Range, st As String, v, vv

Set myDic = CreateObject("Scripting.Dictionary")

With Worksheets("Sheet2")
For Each r In .Range("A1", .Cells(Rows.CountLarge, "A").End(xlUp))
myDic.Add r.Range("C1").Value, Array(r.Value, r.Range("B1").Value, 0, 0)
Next
End With

With Worksheets("Sheet1")
For Each r In .Range("A1", .Cells(Rows.CountLarge, "A").End(xlUp))
vv = Split(r.Range("G1").Value, "-")
st = Join(Array(vv(0), vv(1)), "-")

If myDic.Exists(st) Then
v = myDic(st)
v(2) = v(2) + r.Range("C1").Value
v(3) = v(3) + v(1) * r.Range("C1").Value
myDic(st) = v
End If

Next
End With

With Worksheets("Sheet3")
.Cells.ClearContents
.Range("A1").Resize(myDic.Count, 4).Value = _
Application.Transpose(Application.Transpose(myDic.Items))
End With

Set myDic = Nothing

End Sub
    • good
    • 0

Sheet1のどの商品が、Sheet2の正式な商品に含まれるのかの判断基準が不明です。


あなたの頭のなかでは、その基準があるかと思いますが、その内容を提示していただかないと、
他のひとは回答できません。

不明点
①Sheet1 A列の商品名とSheet2 A列の正式な商品名を比較して判断すれば良いのか。
②それとも、Sheet1 C列の商品番号とSheet2 C列の代表商品番号を比較して判断すれば良いのか。
③それとも、①②の両方で比較をおこない、①②でOKとなった場合に正式な商品名に含まれるとするのか。

まずは、この点だけでも明記すると回答が得られやすくなります。
①②③の何れかになった場合、更に、そのケースでどのように判断するのかの判断基準を明確にすることに
なるかと。
    • good
    • 0

VBAはセルの位置におおきく依存しますので、様式がすこし変わるだけでもソースの変更をしなければなりません。

VBAがある程度理解できて修正できなければ、すぐに使い物にならなくなります。

ですから、一度、ご自身でVBAでつくってみて、それで動かないときに相談するというスタイルでご質問された方が良いですよ。
    • good
    • 0

Sheet1が入力で、Sheet2が諸元(マスタ)で、Sheet3が出力結果ですよね?


情報処理で大切なことは、正確な入力データを収集することです。普通は、諸元に無い商品はエラーで弾きます。
何が言いたいかというと、Sheet1のような不確かなデータでは正しい処理ができないということです(出力結果が保証できない)。
まぁ、全体の傾向を把握したいだけであれば良いかもしれませんが、正確な個数/金額が必要なのであれば、データの持ち方を見直しましょう!!
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A