
御質問させてください。
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

No.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
No.1
- 回答日時:
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にないケースもあり得るのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Excel(エクセル) エクセル関数について 2 2022/04/13 18:25
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) エクセル 指定セル繰り返しマクロ 4 2022/06/06 17:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセル ドロップダウンリスト...
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】列を折りたたみ非表...
-
9月17日でサービス終了らし...
-
【マクロ】アクティブセルの時...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【画像あり】オートフィルター...
-
他のシートの検索
-
エクセルの循環参照、?
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報
早速のご回答、ご質問ありがとうございます。
情報不足で申し訳ございません。
1.あっています。
2.月毎のExcel表はありません。
(月毎に独立して作ろうと思っていますので)
注文日の年月は、必ずSheet2の年月に一致する前提で大丈夫です。
3.全くないケースもあり得ます。
御質問の意図を汲み取れているかわかりませんが宜しくお願いします。
なにか御質問があれば再度回答させていただきます。
以上