- ベストアンサー
【Excel VBA】商品在庫管理で受注日の古い行を色付けする方法
- エクセルの商品在庫管理で、顧客名と商品名が同じで次回受注日が複数存在する場合、受注日の古い行に色を付ける方法をExcel VBAで解説します。
- 商品在庫管理のためにエクセルを使用している場合、顧客名と商品名が同じで次回受注日が複数ある場合に受注日の古い行に色を付ける方法をExcel VBAで実装することが可能です。
- エクセルの商品在庫管理において、顧客名と商品名が同じで次回受注日が複数ある場合には、受注日の古い行に色を付けることができます。具体的な実装方法についてはExcel VBAを使用して解説します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こういうマクロで対応できると思います。 Sub Main() Dim シート As Worksheet Dim 行 As Long Dim 位置 As Long Dim 顧客名 As String Dim 商品名 As String Dim 受注日 As Date Dim 範囲 As Range Set シート = ThisWorkbook.Worksheets(1) シート.Cells.Interior.Pattern = xlNone '現在の背景をクリア 行 = 1 Do 行 = 行 + 1 顧客名 = シート.Cells(行, 1) If 顧客名 = "" Then Exit Do '顧客名が空欄なら終了 商品名 = シート.Cells(行, 2) 受注日 = シート.Cells(行, 4) Set 範囲 = シート.Columns("A:A") _ .Find(顧客名, シート.Cells(行 + 1, 1)) Do Until 範囲 Is Nothing 位置 = 範囲.Row If 位置 = 行 Then Exit Do '自分に行き着いたら終了 If シート.Cells(位置, 2) = 商品名 Then If シート.Cells(位置, 4) < 受注日 Then シート.Range("A" & CStr(位置) & ":E" & CStr(位置)) _ .Interior.Color = &HFF '★背景色設定 End If End If Set 範囲 = シート.Columns("A:A") _ .FindNext(シート.Cells(位置 + 1, 1)) Loop Loop End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルの条件付き書式の範疇に適した問題だと思う。データ変更に対して即時反応性などからして。 しかし条件が複雑で、「数式が」の式が複雑になりそうで、直ぐには思い浮かばないぐらいだ。 (1)A列(顧客名)とB列(商品名)が同じで (2)D列(次回受注日)が複数存在する場合、 次回受注日は空白の行もあるのかな。顧客名+商品名で同じものが複数行あれば、次回受注日は複数あると言っていいのかな。同じ行もあるのかな。 (3)受注日の(一番?)古い行 の3つだが、そのままでは元シートは(1)(2)(3)とも並び順を使えないようだし、VBAを使わざるをえないかな。 ーー データ変更に即時反応性はあきらめる。 VBAでも判断個所(行)が何処にあるかわからないタイプの問題で、顧客名+商品名の該当分の中間表を作らないと難しいだろう。専用データベースシステムでも使えないと、下記にならざるをえないだろう。 ソートをしておかないと、顧客名+商品名を検索した段階で 該当分(行)の「溜め込み」をせざるをえないから。 ーー ・元のシートでの行番号を新たな列に振り、顧客名+商品名+受注日(昇順)でソートしたシートを別途つくる。 ・その「顧客名+商品名」が同じ行範囲内で D列(次回受注日)が複数存在する場合に、 ・一番上(一番古い日)を見つけ、元のシートの該当行番号に色を着ける。 こういうロジックでどうかな。 それにしてもVBAの技量が相当経験して無いと、自力作成は無理だろう。丸写しかな。
お礼
早々のご回答ありがとうございます。 目的としていた事がすんなりできました!