以前、
[シートA] にあるデータを、<例1>のように
・並べ替え順に
・数量分だけ
[シートB]に抽出する場合のマクロについて、質問させていただきました。
参考:以前の質問
<例1>
[シートA]
(A列)並べ替え順 | (B列)品名 | (C列)数量 |
---|---|---|
物品A | 2 | |
3 | 物品B | 3 |
物品C | 1 | |
1 | 物品D | 1 |
2 | 物品E | 2 |
↓
[シートB]
(A列)品名 | |
---|---|
物品D | |
物品E | |
物品E | |
物品B | |
物品B | |
物品B |
ここからさらに発展させ、
<例2> にあるように、B列に「1」があるものは数量を分割せず、シートBの数量欄にはシートAの数量をそのまま抽出するように変更する必要が出てきました。
つまり、現状の抽出条件の優先順位としては、
①並べ替え順に貼り付ける
②分割列に1がある場合には品名を数量列にかかわらず1個だけシートBに抽出、シートAの数量列の値をそのまま抽出
③分割列に1がない場合には数量列の分だけ品名をシートBに抽出、数量列には1を記載
です。
<例2>
[シートA]
(A列)並べ替え順 | (B列)分割 | (C列)品名 | (D列)数量 |
---|---|---|---|
物品A | 2 | ||
3 | 1 | 物品B | 3 |
物品C | 1 | ||
1 | 物品D | 1 | |
2 | 物品E | 2 |
↓
[シートB]
(A列)品名 | (B列)数量 |
---|---|
物品D | 1 |
物品E | 1 |
物品E | 1 |
物品B | 3 |
試したこと
以下のようなコードを作ってみましたが、分割列に1がある場合のみ認識されているのか、分割列が空欄のものは抽出してくれません。
条件式が誤っているのかとも思うのですが、ご意見をいただきたく投稿させて頂きました。
よろしくお願いします。
Const 設定区分列 As Integer = 1 Const 繰返数列 As Integer = 4 Const 書込開始行 As Integer = 3 Const 製番表 As String = "製番表作成準備" Dim 並べ替え順 As Integer Dim 並べ替え順最大値 As Integer 数量 = Cells(Rows.Count, 4).End(xlUp).Offset(1).Row 書込中行 = 書込開始行 並べ替え順最大値 = Application.WorksheetFunction.Max(Range("A:A")) For 並べ替え順 = 1 To 並べ替え順最大値 For i = 1 To 数量 If Cells(i, 設定区分列) = 並べ替え順 And Cells(2, 分割列) = 1 Then Sheets(製番表).Cells(書込中行, 1) = "支給品" Sheets(製番表).Cells(書込中行, 2) = Cells(i, 3) Sheets(製番表).Cells(書込中行, 3) = Cells(i, 12) ElseIf Cells(i, 設定区分列) = 並べ替え順 And Cells(2, 分割列) = "" Then For j = 1 To Cells(i, 繰返数列) Sheets(製番表).Cells(書込中行, 1) = "支給品" Sheets(製番表).Cells(書込中行, 2) = Cells(i, 3) Sheets(製番表).Cells(書込中行, 3) = "1" 書込中行 = 書込中行 + 1 Next j End If Next i Next End Sub
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/06 01:37
2018/08/06 01:47
2018/08/06 01:54