並び替えの処理を行い、データの埋め込み作業を自動で行うプログラムを作成したいと考えております。
時間がある方でプログラムを組める方おりましたらよろしくお願いいたします。
プログラムを行うデータですが、以下のような状況です。
http://oskuni7.sakura.ne.jp/hatena/question3/hatena3_1.htm
ピンクとオレンジの行の全てを並び替えをします。
並び替えの条件ですが、第一条件を 商品番号、第二条件を 1か0か?にし、昇順で共に並び替えをします。
並び替えをすると下記のような状態になります。
http://oskuni7.sakura.ne.jp/hatena/question3/hatena3_2.htm
商品番号が共にある場合、0(オレンジ)の列Aから列AEに入っているデータを、1(ピンク)の列Aから列AEへ移動させます。
移動させた後、0(オレンジ)のデータを行ごと削除します。
処理後、下記のようになります。
http://oskuni7.sakura.ne.jp/hatena/question3/hatena3_3.htm
最後に今回埋め込まれたデータ行の列AHに”再出品”という判定を出力して終わりです。
上記のようなプログラムを組める方おりましたらよろしくお願いいたします。
EXCEL のソートの仕様により、並べ替え順は提示されたサンプルと異なりますが、
内容に関しては同等の結果になると思います。
不明な点がありましたら、コメントください。
Option Explicit Sub Aiomac() Const DATA_START_LINE = 2 Dim i As Long '--- Step 1 ソート Columns("A:AG").Sort _ Key1:=Range("AG1"), Order1:=xlAscending, _ Key2:=Range("AF1"), Order2:=xlAscending, _ Header:=True, Orientation:=xlTopToBottom, SortMethod:=xlPinYin Dim lastRow As Long lastRow = Range("AF" & Rows.Count).End(xlUp).Row '--- Step 2 データ転記 Dim pCode As String Dim bOverWrite As Boolean Dim srcRow As Long For i = DATA_START_LINE To lastRow If Cells(i, "AG").Value = pCode Then If bOverWrite = True And Cells(i, "AF") = 1 Then Range("A" & srcRow).Resize(1, 31).Copy _ Destination:=Range("A" & i).Resize(1, 31) Cells(i, "AH") = "再出品" End If Else If Cells(i, "AF").Value = 0 Then bOverWrite = True pCode = Cells(i, "AG").Value srcRow = i Else bOverWrite = False End If End If Next '--- Step 3 行削除 For i = lastRow To DATA_START_LINE Step -1 If Cells(i, "AF") = 0 Then Rows(i).Delete End If Next End Sub
ご回答ありがとうございます。
プログラムを実行したのですが 400というメッセージエラーが発生してしまいました。
プログラムを始める行も 商品番号が入っている
Const DATA_START_LINE = 4
に変更してみたのですが引き続きエラーが発生してしまいます。