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

御質問させてください。
Excelバージョン:2013

Sheet1の品名・品番・色がSheet2(画像)の品名・品番・色が一致する際
指定されている注文日の日に対応するSheet2のセルに注文数の数量を入れたいです。
例:Sheet1 5.6行目 品名:ミカン 品番:003 色:キイロがSheet2に表示されている
条件が一致しているので(Z2セル)2/23に10、(AA2セル)2/24に0を入れる。

マクロによる自動計算式ご教授お願いいたします。

Sheet1
  A   B  C     D      E
1 品名  品番 色    注文日    注文数
2 リンゴ 001 アカ   20210224  50
3 リンゴ 001 アオ   20210204  20
4 リンゴ 002 アカ   20210215  100
5 ミカン 003 キイロ  20210224   0
6 ミカン 003 キイロ  20210223  10
7 ブドウ 004 ムラサキ 20210224  90
8 ブドウ 004 ミドリ  20210205  30
9 ブドウ 005 ムラサキ 20210224  40

「Excel VBA 複数条件にマッチした」の質問画像

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

  • 早速のご回答、ご質問ありがとうございます。
    情報不足で申し訳ございません。

    1.あっています。
    2.月毎のExcel表はありません。
     (月毎に独立して作ろうと思っていますので)
     注文日の年月は、必ずSheet2の年月に一致する前提で大丈夫です。
    3.全くないケースもあり得ます。

    御質問の意図を汲み取れているかわかりませんが宜しくお願いします。
    なにか御質問があれば再度回答させていただきます。

    以上

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/02/12 20:06

A 回答 (2件)

以下のマクロを標準モジュールに登録してください。


Sheet2にない商品、品番、色はSheet2に登録されません。(無視されます)
sheet1に同じ商品、品番、色のものが複数存在した場合は、最後の注文数が設定されます。

Option Explicit


Public Sub 注文数設定()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim col2 As Long
Dim sho_count As Long
Dim i As Long
Dim dicT As Object
Dim key As Variant '商品のキー 品名|品番|色
Dim day_str As String
Dim day As Long
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
maxrow1 = sh1.Cells(Rows.Count, "A").End(xlUp).Row 'sheet1 A列の最大行取得
maxrow2 = sh2.Cells(Rows.Count, "A").End(xlUp).Row 'sheet2 A列の最大行取得
If maxrow2 Mod 10 <> 9 Then
MsgBox ("Sheet2 最終行不正")
End If
sho_count = maxrow2 \ 10 + 1
'商品対応の行(注文数を設定する行)を記憶
For i = 1 To sho_count
row2 = (i - 1) * 10 + 2
key = sh2.Cells(row2 + 3, "B").Value & "|" & sh2.Cells(row2, "B").Value & "|" & sh2.Cells(row2 + 7, "B").Value
dicT(key) = row2
sh2.Range("D" & row2 & ":AH" & row2).Value = "" '注文数をクリア
Next
'全商品を処理する
For row1 = 2 To maxrow1
key = sh1.Cells(row1, "A").Value & "|" & sh1.Cells(row1, "B").Value & "|" & sh1.Cells(row1, "C").Value
'該当商品がSheet2に存在すれば、注文数を設定する
If dicT.exists(key) = True Then
day_str = Right(sh1.Cells(row1, "D").Value, 2)
day = CLng(day_str)
row2 = dicT(key)
col2 = day + 3
sh2.Cells(row2, col2).Value = sh1.Cells(row1, "E").Value
End If
Next
MsgBox ("完了")
End Sub
    • good
    • 1
この回答へのお礼

ご丁寧にありがとうございました。
明日にでも実施させていただきます。

お礼日時:2021/02/12 22:32

1.Sheet2のレイアウトですが、1つの商品に対して必ず10行を使用する前提であってますか。


B列品番(3行で必ず結合セル)
B列品名(4行で必ず結合セル)
B列色 (3行で必ず結合セル)

2.例では注文日が2021年2月のケースだけですが、他の月のものもあるのでしょうか。
もし、ほかの月のものもあるとすると、Sheet2の年月を算出するとき、年は問題ないが、月は「2月末在庫」
なので、先頭の数字である1~2文字を取り出す必要があるので、やっかいになります。
A1に2021、B1に2 C1に月末在庫 となっていれば処理が簡単になります。
それとも、注文日の年月は、必ずSheet2の年月に一致する前提で良いのでしょうか。(そうであれば日付だけを見れば良いので簡単になります)

3.Sheet1の品名、品番、色に一致する商品がSheet2にないケースもあり得るのでしょうか。
この回答への補足あり
    • good
    • 1

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