前提・実現したいこと
下記リストがあります。
リストBの品番をリストAの品番の下から検索しヒットした行をコピーして(つまり最新行)、リストAの最終行に貼りつける。
このとき、貼りつけ先行の登録日はリストBセルB2の登録日に書き換え、貼りつけ先の区分がBであればAに更新する。
リストA
商品名/品番/登録日/区分
aaa/001/yyyymmdd/A
iii/002/yyyymmdd/A
uuu/003/yyyymmdd/C
iii/002/yyyymmdd/A
aaa/001/yyyymmdd/B
uuu/003/yyyymmdd/A
・
・
aaa/001/yyyymmdd/B
リストB
商品名/品番/登録日
aaa/001/yyyymmdd
iii/002/yyyymmdd
uuu/003/yyyymmdd
・
・
・
発生している問題・エラーメッセージ
もともとあるマクロを修正して使っていたのですが、「貼付け元行の区分がAならば、貼付け先行の区分をBと書き換える」
部分がうまくいかないです。
マクロ勉強中で、ソースの意味も理解できていないので、ソースの説明を頂けないでしょうか。
該当のソースコード
Sub Test()
Dim ws1 As Worksheet, ws2 As Worksheet, myDate1
Dim List, cnt As Long, i As Long, j As Long
’リストA,Bを変数にセットする
Set ws1 = Worksheets("リストA")
Set ws2 = Worksheets("リストB")
'リストBのセルB2にある日付をmydate1にセット
myDate1 = ws2.Range("B2")
’もし、リストBのセルB2が空白ならば、何もせず終了する
If Not (IsDate(myDate1)) Then Exit Sub
’リストA1を始点にする?
List = ws1.Range("A1").CurrentRegion
’ここは調べたのですが、理解できていません。リストの最終行をcntにセットしている??
cnt = UBound(List, 1) + 1
’iにリストBの品番先頭から最後をセット
For i = 2 To ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row
’jにリスト1行目から最終行をセット?
For j = UBound(List, 1) To 2 Step -1
’もし、リストBの品番とリストAの品番が一致したら(このソースで下から検索しているのか理解できていません)
If ws2.Cells(i, 2).Value = List(j, 2) Then
’行をコピーして、最終行に張り付ける
ws1.Rows(j).Copy Destination:=ws1.Rows(cnt)
’貼付け先行の日付をmydate1の値にセット
ws1.Cells(cnt, 3).Value = myDate1
cnt = cnt + 1
Exit For
End If
Next j
Next i
End Sub
試したこと
「貼付け元行の区分がAならば、貼付け先行の区分をBと書き換える」は、IF分を使って
if ws1.cells(j,4).value = "B" then
ws1.cells(cnt,4).value ="A"
というソースでよいのかと思ったのですが、これをどこに追加すればよいのかわかりません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー