エクセルで重複データの日付から6か月以上を見つける

このQ&Aのポイント
  • エクセルを使用して、重複データの日付から6か月以上経過したデータを特定する方法について教えてください。
  • 具体的には、指定の表のLOT Noごとに、最近の検査日から6か月以上経過しているかを判断し、必要に応じて再度品質検査する方法を知りたいです。
  • 以前に★を表示させる式を使用して解決した経験があるので、同様の解決方法を教えていただきたいです。
回答を見る
  • ベストアンサー

エクセルで重複データの日付から6か月以上を見つける

お世話になります。 添付の表のようにA列に製造日、B列にLOT Noを入れる表があります。 原料Aを製造したら品質検査をします。 その原料を後日使う時に、最近検査した日付から6か月い以上経過していいたらその原料AのLOTは使用する前に再度品質検査する必要があります。 具体的には着色セルのLOTは繰り返し使用されており、黄色のABC123は前回試験をした日から6か月以内なのでOK、橙色のセルのLOTABC129は2回目はOKですが、3回目の使用時には検査課必要です。 このように★を表示させる式、もしくはVBAをご教示いただきたく。 昔ここ?で教えてもらって試行錯誤して★を追加し、書式設定でLOT Noに色を付けることで解決した記憶があるので下記のような式の復元になりましたが★の列はなくても検査が必要なLOT No(前回の検査から半年以上経過LOT)に色が付けばOKです。 =IF(DATEDIF(SUMPRODUCT(MAX(A$2:A2*(C$2:C2=C3)*(D$2:D2="★"))),A3,"M")>=6,"★","") 宜しくお願いします。 (今、貼り付けた表を見たら少し矛盾がありますがご容赦下さい)

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.4

LotNoの埋まる列のうち、埋まらない行は空欄ではなく 半角のマイナスだったんですね。 見落としていました。 この部分を修正したコードが後記です。 ★やOKの埋まる列がどの列かは関係しません。 ★やOKを埋めたい列のセルたちに、 =MyChk(A:A,B:B)といった関数を埋めて使います。 この関数の 第一引数「A:A」が日付の埋まった列で、 第二引数「B:B」がLotNoの埋まった列です。 Option Explicit Function MyChk(DateRng As Range, LotRng As Range) As String  Const SRow = 14 'データ開始行    Dim BCol As Long  Dim DCol As Long  Dim i As Long  Dim HitDate As Date  Dim ThisRow As Long    DCol = DateRng.Column  BCol = LotRng.Column    ThisRow = Application.ThisCell.Row  i = ThisRow - 1    'LotNoが埋まっていない場合は空欄を返す  If Cells(ThisRow, BCol).Value = "-" Then   MyChk = ""   Exit Function  End If    Do   If i < SRow Then Exit Do   If Cells(i, BCol).Value = Cells(ThisRow, BCol).Value Then    HitDate = Cells(i, DCol).Value    Exit Do   End If   i = i - 1  Loop    If Cells(ThisRow, DCol).Value - HitDate > 180 Then   MyChk = "★"  Else   MyChk = "OK"  End If   End Function

akira0723
質問者

お礼

こんばんは 今日は忙しく時間がなかったので今確認しました。 全く問題なく、全く期待通りに動きました。 セルの指定をコードではなく式(=MyChk(A:A,B:B))で指定できるとは思いませんでした。 因みに当方赴任以来「空白セル厳禁!」を徹底しましたので「-」が入っているのですが、★の列も空白「””」はやめて「-」に変えて一発解決でした。 いつもながら当方の推理ゲームみたいな質問(6か月?180日?)に一番欲しい内容のご回答に感服します。 本件は品質検査後の経時変化の確認なので日付ではなく日数(180日)の意図でした。

その他の回答 (3)

回答No.3

せめてバーコード管理とかされないんでしょうか? それともプログラミング練習課題でしょうか? 生産管理で使用されているなら、データが消えないようにバックアップとか、入力ミスされないようにとか、故意に変なデータを書かれないようにとか、エクセルでもいいと思いますが、いろいろ対策するのが当たり前だと思います。

akira0723
質問者

お礼

ご回答ありがとうございました。 特殊なケースなので自主管理です。 本来製造後の使用期間(製品のライフ)が切れたら廃棄ですので、再検査はあり得ないルールんあっていますので。

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.2

#1です。 こっちのほうがスマートと思いますので 差し替えます。 Option Explicit Function MyChk(DateRng As Range, LotRng As Range) As String  Const SRow = 14 'データ開始行    Dim BCol As Long  Dim DCol As Long  Dim i As Long  Dim HitDate As Date  Dim ThisRow As Long    DCol = DateRng.Column  BCol = LotRng.Column    ThisRow = Application.ThisCell.Row  i = ThisRow - 1    If Cells(ThisRow, BCol).Value = "" Then   MyChk = ""   Exit Function  End If    Do   If i < SRow Then Exit Do   If Cells(i, BCol).Value = Cells(ThisRow, BCol).Value Then    HitDate = Cells(i, DCol).Value    Exit Do   End If   i = i - 1  Loop    If Cells(ThisRow, DCol).Value - HitDate > 180 Then   MyChk = "★"  Else   MyChk = "OK"  End If   End Function

akira0723
質問者

お礼

今回も期待通りの結果となりました。 いつもながら当方の意図と、いつもの追加要求に完全回答に感謝です。 今後ともよろしくお願いいたします。

akira0723
質問者

補足

HohoPapaーさん お久しぶりです。 最近はこれまで教わったVBAの新規シートへの展開と機能の追加がメインになって質問する機会が減ったのですが久しぶりの質問で再開できて何となく非常にうれしいです。 さて、今回のコードは当方には難しいようで添付図を参考にダミーシートで同じレイアウトにしてみたら期待通りに動くことを確認したのですが。。。。(いつもながら1発回答!) しかし、 1.実際には★の列はMやL列のシートがありこの列を指定しているコードが分からず。(適当にいじりましたが当たらず) 2.更に原料LOTのB列のセルは空白ではなく「-」が入っているので目的セル以外の全てのセルに「OK」が入ります。(これはこれでも良いのですが出来れば添付図のように必要なセルのみに「OK」「★」にしたく。 毎度の追加要求で恐縮ですが急ぎませんので宜しくお願い致します。

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.1

>6か月以上 これが180日以上ということでよければ 後記関数でいけるものと思いますが 日数ではなく 例えば 4/10から10/10が、6か月と1日と判断するのであれば 8/30を起点に過去6か月の場合、2/30がないので、何月何日をもって、 6か月以上前と判断するでしょうか? 日付や経過日数を扱う場合、 この辺りの扱いを厳密に定義する必要があります。 Option Explicit Function MyChk(LotRng As Range, DmyRng As Range) As String  Const SRow = 14 'データ開始行    Dim BCol As Long  Dim DCol As Long  Dim i As Long  Dim HitDate As Date  Dim ThisRow As Long    DCol = DmyRng.Column  BCol = LotRng.Column    ThisRow = Application.ThisCell.Row  i = ThisRow - 1    Do   If i < SRow Then Exit Do   If Cells(i, BCol).Value = LotRng.Value Then    HitDate = Cells(i, DCol).Value    Exit Do   End If   i = i - 1  Loop    If Cells(ThisRow, DCol).Value - HitDate > 180 Then   MyChk = "★"  Else   MyChk = "OK"  End If   End Function

関連するQ&A

  • エクセルの日付で半年毎のアラームを出したい

    エクセル2010でA列に日付け、B列に製品名、C列にロットNo等を入力した表が有るのですが、同じロットのデータを入力しようとしたら、最初のデータの入力日付けから6ヶ月以上経過していたらアラーム(赤字)が出るようにしたいのですが。 次はその次にまた6ヶ月以上経過していたらアラームが出るようにしたいのですが。 目的は半年以内は前回の数値を使用し、前回測定時から半年以上経過していたら再試験を実施しその結果を入力するようにしたいのです。 再測定した場合は、そのロットのデータ行のどこかに(再1)(再2)とかの印をつけることは可能です。 わがままですが、当方マクロは不得手なので出来れば関数で、だめならマクロでも頑張る所存ですので宜しくお願いします。

  • excelの重複について

    顧客情報を管理しています。 A列~住所 B列~名前 C列~空白(必要に応じ○を入力) D列~空白or重複 (1)、順に入力し同じ住所と名前の重複があればセルに色が付く方法ってありますか? 住所のみ一致や名前のみ一致の時は色は付けません。 (2)、さらに上記の条件で同じ住所と名前があればセルに色を付けC列のセルに○が入力されA列B列C列すべてが重複したらD列に「重複」を表示できますか? 条件付き書式や関数等の組み合わせいいですが、初心者なのでマクロは使用できません。 また抽出したりする工程は不要です。 よろしくお願いします。 例 A列 : B列 : C列 : D列 住所 : 名前:チェック: 1 : 1条東1丁目 : 田中: ○ 2 : 2条東2丁目 : 鈴木: ○--------------2条東2丁目の鈴木は2つあるので色を付ける。 3 : 3条東3丁目 : 竹田: ○--------------3条東3丁目の竹田は2つあるので色を付ける。 4 : 1条東1丁目 : 小林: 5 : 2条東2丁目 : 鈴木 : ○ 重複-----2条東2丁目の鈴木に○が2つ付いたので「重複」と表示 6 : 3条東3丁目 : 竹田-----------------3条東3丁目の竹田は2つあるので色を付ける。

  • どんどん増えるデータの重複しないデータの個数

       A列    B列 1 2    3      6 3  4    a     a-1 5    a      a-2 6    b      b-1 7    b      b-2 8    b      b-3 9    c      c-1 たとえば上記のような表を作りたいと思っています。、 10行目以降もデータは増えていきます。 作業列を作らずにA2セルにA4以降のA列の重複しないデータの個数を 表示させる方法を教えてください。

  • エクセルにて

    A列には日付が入力してあります。(2001/7/17) その日付から3日間経過してもC列のその行に何も入力されなければ、 B列のそのセルを黄色に表示する。 更に7日間経過しても入力なければ赤に表示するようにしたいのですが!? C列に入力されればB列のそのセルは青色表示にしたいのですが!     A      B     C 1 2000/7/10   赤 2 2000/7/11   青   2001/7/16 2 2001/7/13   黄   

  • EXCELの重複チェック

    エクセルで重複する文字列のセルに色付けしたいです。ただ重複する文字列を同色でカラーリングすることはできるのですが、同じ文字列毎に色を変えることは可能でしょうか。 下の例でいうと、Aは赤、Bは青、Cは緑、、、、というイメージです。 例) A B B C C C C A B C

  • 「エクセル」で重複したデータだけを呼び出したい。

    「Excel2000」を使用しています。 「重複しているデータだけ抽出する」 ということは出来るでしょうか? たとえば「A列」に名前が入っていて、 「B列」に住所、「C列」に電話番号が 入っているとします。 重複した名前だけを呼び出して、 なおかつ「B列」「C列」の データも表示させたいのですが…。

  • エクセルの数式相談。

    エクセルの数式を考えているのですが、どうしてもわからないため、質問させて頂きます。 ある部品をある設備を用いて作っているとします。ある部品は、12個を1セットとして梱包するとします同日、同設備、同じ元部品を使用して製造した場合に、同Lot.であるとします。 この時に、 A列にLot. B列に製造日、C列に使用した設備番号、D列に“同日に同設備を用いて製造した何回目の製造か”が記されている表があります。(D列の数値が異なるのは、元部品が異なる場合です) この表に対して、 わかりやすくするため、1列(E列)を開けて、F列にはLotの一部抜粋、G列にはF列に記載のLot.を製造した場合の1ダースにおさまらなかった余りの個数が記載してあります。 この時に、例えば I列に、F列のロットに対するG列の残り個数の生産が、同日の同設備を用いて製造した最後の製造かどうかを示すことはできないでしょうか? 一発で算出できる数式にこだわっているわけではありません。最後か、最後でないかが、出力されればよいのですが、if や Vlookupを使用する気がしていますが、いまいちうまく考えられません。 何卒、よろしくお願いします。

  • エクセル関数を使いこの様なことができますか?

    こんにちは エクセルのあるセルに数式(又は関数)を入力し、別のセルに数字を入力したら、セルの塗りつぶしの色が設定しておいた色に変わるようなことはできないでしょうか? (例えば、C1には当初は何も入力されておらず、そのC1にある数字を入力するとA1のセルの色が赤に変わるようなことを考えています。なお、色を変えたいセル自身には数字が入力されている場合といない場合と二通りあるため、いずれの場合も対応できるようにしたいのです。 つまり、初期状態では、A列(色を変えたいセル列)には数字が入ったセル、入っていないセルが混在しており、C列(ここに数字が入力されるたびにA列の対応する行のセルの色を変えたい)には何も入力されていない。この状態で、任意のC列のあるセルに数字を入力すると同じ行にあるA列のセルの色を変えたい、ということをしたいのです。) 具体的にA列にどの様な数式を入力すればよいかを教えて下さい。 (或いは、そのようなことをするための式(関数)はA,C以外の列のセルに入れる必要があるかもしれませんが(例えばB列)、それでもかまいません) よろしくお願いします。

  • Excelで行方向に並んだデータを列に

    こんばんは。 質問タイトルをどう書いていいのかわからず、わかりにくくてすみません。 こういうExcelの表があります。 A表 A列 B列 No  code   1  10 1  11 1  12 2  10 3  14 4  14 4  15 それを次のようにしたいと思ってます。 B表 A列 B列  C列  D列 No  code1 code2 code3 1  10   11  12 2  10 3  14 4  14   15 A列にあるのがサンプルNoで、それぞれに対応するコードが縦に並んでいる(A表)のを、サンプルNoを重複させずにコードを横に展開(B表)したいのです。 今は各サンプルで重複しているコード数を出して、2以上だったらif関数で横に持っていくという非常に面倒な方法を取っています。 他によい方法はないでしょうか。なお、マクロは嫌がられるので使えません。 データ数よりもシート数(1シートに1つの表)が多く、できるだけ簡単な方法があれば教えていただけますでしょうか。 以上よろしくお願いします。

  • エクセル 重複するデータのセルに色をつけたい

    過去の質問を調べてみたのですが なかなかみつからなかったので質問させていただきます。 A列に 10個の商品名のリストがあります。 C例~M列まで縦に50列 リストにある商品名も含んだ一覧があるのですが。10個の商品名にだけ セルに色をつけたいと思ってるのですが・・。 一覧の中には、同じ商品名も 何個かあります。 一個づつみていくのがとても大変なので なにかいい方法はないでしょうか? いい方法がありましたらよろしくお願いいたします。

専門家に質問してみよう