コード
エクセルで表のような商品の表を作成しています。
A B C D E
商品コード 商品名 成分 成分比率 更新日付
aaa 商品A a 0.7 2020/1/10
aaa 商品A b 0.3 2020/1/10
bbb 商品B c 0.5 2020/1/11
bbb 商品B d 0.5 2020/1/11
ccc 商品C f 1 2020/1/20
aaa 商品A a 0.6 2020/3/5
aaa 商品A b 0.4 2020/3/5
ddd 商品D a 0.4 2020/3/12
ddd 商品D f 0.6 2020/3/12
ccc 商品C s 1 2020/3/20
成分を色々調整しており、古いデータは別のシートに移動させたく次のようなコードを作成しました。
①コード、日付でソートする。
②コードが同じで日付が異なる箇所のコード、日付を記憶させF列に旧版と記載する。
③F列が旧版の列を別シートにコピーし削除する。
④日付でソートする。
これで思い通りには動くのですが、1000以上のデーターでは20分以上掛かり困っています。初心者のためこの程度のコードしか書けないのですが、高速化できる方法があるでしょうか。よろしくお願いします。
環境:Excel2010、Windows7
Sub 移動() Application.ScreenUpdating = False Dim txt As String, txt2 As String Dim i As Long, j As Long Dim ws As Worksheet, ws2 As Worksheet Set ws = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") With ws.Sort With .SortFields .Clear .Add Key:=ws.Range("A1"), Order:=xlAscending .Add Key:=ws.Range("E1"), Order:=xlAscending End With .SetRange ws.Range("A1:F" & Cells(Rows.Count, 1).End(xlUp).Row) .Header = xlYes .Apply End With With ws For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(i, 1) = .Cells(i + 1, 1) And .Cells(i, 5) <> .Cells(i + 1, 5) Then txt = .Cells(i, 1) txt2 = .Cells(i, 5) For j = 2 To .Cells(Rows.Count, 1).End(xlUp).Row If .Cells(j, 1) = txt And .Cells(j, 5) = txt2 Then .Cells(j, 6) = "旧版" End If Next j End If Next i End With For i = ws.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If ws.Cells(i, 6) = "旧版" Then ws.Rows(i).Copy Sheets("Sheet2").Select ws2.Rows(ws2.Cells(Rows.Count, 1).End(xlUp).Row).Offset(1, 0).Insert Shift:=xlDown ws.Rows(i).Delete Shift:=xlUp End If Next i ws.Select With ws.Sort With .SortFields .Clear .Add Key:=ws.Range("E1"), Order:=xlAscending End With .SetRange ws.Range("A1:F" & Cells(Rows.Count, 1).End(xlUp).Row) .Header = xlYes .Apply End With Application.ScreenUpdating = True End Sub
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/12 11:35