VBAでどうプログラムを書くか分かりません。 やりたい内容は以下の様になります。 すみませんが、よろしくお願い致します。 ※エクセルは下記の通り1つです。 【状況】

画像
補足

内容の補足させていただきます。 VBA処理前のデータの、F列(ロット)の同じデータは、実際どの行に出るか分かりません。。 今は3と4のデータ、7と8のデータ、10と11のデータが、(品名)、(ロット)同じものが入力されています。 よろしくお願い致します。

Visual Basic | Excel289閲覧

1人が共感しています

ベストアンサー

1

1人がナイス!しています

ご連絡ありがとうございます。 質問に回答させていただきます。 ・>VBA処理前のデータの、F列(ロット)の同じデータは、実際どの行に出るか分かりません。。 ⇒取得するデータは毎回違いますので、これはどの行に出るかは分かりません。同じデータ(重複)があれば、削除する、になります。 ・>今は3と4のデータ、7と8のデータ、10と11のデータが、(品名)、(ロッ>ト)同じものが入力されています。 同じロット番号のデータは必ず1組ずつ出現するのでしょうか。 ⇒はい、1組になります。 ・ロット番号が同じデータが3つ以上出現することはないのでしょうか。 ⇒はい、可能性としてあります。 ・同じロット番号が出現する場合、必ず隣り合う行に出現するのでしょうか、それとも、不規則に出現するのでしょうか。 ⇒はい、必ず隣り合う行に出現します。 以上分かる範囲で回答させていただきました。 よろしくお願い致します。

ThanksImg質問者からのお礼コメント

何度も何度もありがとうございました。

お礼日時:7/28 20:17

その他の回答(1件)

0

ID非公開

2021/7/28 5:59

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

kky********さん、ご連絡ありがとうございました。 いけました。本当にありがとうございました。。 あとちなみになんですが、実際にはシートがたくさんありますので、沢山あるシートから特定のシートで、上記のコードを使用する場合どのように、プログラムを指定すればいいでしょうか? 上記のコードは1つのシート(Sheet1)で行けることを確認しました。 例えば、これがシート(Sheet1)、シート(Sheet2)、シート(Sheet3)まであったとき、シート(Sheet3)で上記のプログラムを適用する場合の書き方を教えていただえないでしょうか? 何度もすみませんが、よろしくお願いします。