質問: VBAでどうプログラムを書くか分かりません。 やりたい内容は以下の様になります。 すみませんが、よろしくお願い致します。 ※エクセルは下記の通り1つです。 【状況】 ・13個のデータがあります。 ・それぞれのデータは、B列(品名)、C列(ロット)のデータが同じであれば、その横のE列(品名)、F列(ロット)同じデータが入力されています。 ※D列、G列の(重量)はそれぞれ異なります。 ・今、それぞれ、3と4のデータ、7と8のデータ、10と11のデータが、(品名)、(ロット)同じものが入力されています。 【やりたい内容の条件】 ・VBA処理前のデータから、F列(ロット)同じデータがあった場合、 ・その横の同じロットの中から、データのD列(重量)が少ない数字のものを選び、 ・VBA処理後のデータの様に、そのデータのD列(重量)の少ない数字の横のデータ≪E列(品名)、F列(ロット)、G列(重量)≫をすべて削除する ※赤枠の様に、F列(ロット)同じデータがあるものはすべて適用させる
回答: D列の数字が一番大きいもの以外全て(3行以上の事もあるとのことなので)クリアするのか、一番小さいものだけクリアするのか、どちらでしょう。 下記コードは一番大きいもの以外全てクリアしています。 一番小さいものだけクリアという要件なら連絡して下さい。 またシート関数MAXIFSを使っています。もしMAXIFSが使えないバージョン(2016より前)の場合は使えませんので連絡して下さい。 Sub test() Dim rng1 As Range, rng2 As Range, rng3 As Range Dim rmax As Long, r As Long Dim sv As String Dim sw As Long rmax = Cells(Rows.Count, 1).End(xlUp).Row Set rng1 = Range("B2:B" & rmax) Set rng2 = Range("C2:C" & rmax) Set rng3 = Range("D2:D" & rmax) For r = 2 To rmax If WorksheetFunction.CountIfs(rng1, Range("B" & r).Value, rng2, Range("C" & r).Value) > 1 Then sv = Range("B" & r).Value & "-" & Range("C" & r).Value sw = WorksheetFunction.MaxIfs(rng3, rng1, Range("B" & r).Value, rng2, Range("C" & r).Value) Do Until Range("B" & r).Value & "-" & Range("C" & r).Value <> sv Or r > rmax If Range("D" & r).Value <> sw Then Range("E" & r & ":G" & r).ClearContents End If r = r + 1 Loop r = r - 1 End If Next r End Sub