[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ブックを開いたときに日付判定をする』(レン)
いつもお世話になっております。
現在、マクロで購入品のリストを作成しております。
A列に注文状況 B列からL列には購入品の情報が入っております。
A列の注文状況は「発注済み」、「納品済み」、ノーコメントの三つです。 「発注済み」のとき、A−L列が「黄色」 「納品済み」のとき、A−L列が「青色」になあております。 またB列には「納期予定日」が入っております。
やりたいことは、ブックを開いたときに「納品済み」でない購入品で本日の日付が納入予定日より、 遅れているとき(納期遅れ)のとき、A列に「納期遅れ」と明記し、 AーL列を赤色にしたいです。 これをマクロでやりたいです。 どうかご教授お願い致します。
条件付き書式や通常の関数で充分に処理できるけどマクロがお望み?
(ぶらっと)
ぶらっとさん、返信ありがとうございます。 私以外の多くの方が使う予定なので、関数や書式を変えられないようにマクロがいいです。 よろしくお願い致します。
(レン)
マクロがいいのは、了解だけど・・・・
追加で
注文状況がA列にあるのに、そこを 納期遅れなんて文字で上書きしてしまうのは なんとなく、わかりにくくなりそうだねぇ。納期遅れ文字は別の列にしたらいかが?
あと、「納品済み」でない購入品って、「発注済み」のもの? それとも、ノーコメント(空白?)のものも対象?
それと、この処理をした後、納期予定日を変更(修正)したり、あるいは注文状況を変更(修正)した場合に すでに、セットされている 納期遅れ とか 赤色 とかが、実態とそぐわなくなってくるケースもあるよね。
もしかしたら、赤色が正常化されて、黄色になるのかもしれないし、納品済みになったら青色にするのかもしれないし。
そのあたりも、もう一度、整理して考えてみたらいかが?
(ぶらっと)
ぶらっとさん、丁寧に返答ありがとうございます。
指摘された点はもう少し考える余地がありそうです。 少し時間をかけて考えてみます。 考えがまとまり次第、ここに返信させていただきますのでどうかよろしくお願い致します。 (レン)
↑でコメントしたように、運用していく過程で、あれ?こういう状況の時は、こうしたい! ということがたくさんでてくるような気がするけど。 とりあえず。なお、判定対象は 発注済み と、その処理結果による 納期遅れ のデータのみにしてある。 (ノーコメント:空白?)行は対象外。
VBE画面の左上にあるプロジェクトエクスプローラの ThisWorkbook をダブルクリックしてでてくるところ(ThisWorkbookモジュール)に 以下を貼り付け、【いったん閉じてから、再度開いてみて】
Private Sub Workbook_Open()
Dim c As Range
With Sheets("購入品リスト") 'シート名は実際のものに
For Each c In .Range("B2", .Range("B" & .Rows.Count).End(xlUp))
Select Case c.Offset(, -1).Value
Case "発注済み", "納期遅れ"
If c.Value < Date Then
c.EntireRow.Range("A1:L1").Interior.Color = vbRed
c.Offset(, -1).Value = "納期遅れ"
Else
c.EntireRow.Range("A1:L1").Interior.Color = vbYellow
c.Offset(, -1).Value = "発注済み"
End If
End Select
Next
End With
End Sub
(ぶらっと)
ぶらっとさん、コードありがとうございました。 一度このコードで試運転してみて、問題点を抽出しようと思います。 丁寧にありがとうございました。
(レン)
(まゆみ)さんは (レン)さんとは別の人だね? 処理するタイミングが不明だけど一例。
Sub Sample()
Dim c As Range
Dim myColor As Long
With Sheets("購入品リスト") 'シート名は実際のものに
.Cells.Interior.ColorIndex = xlNone '処理前にいったん背景色を消す
For Each c In .Range("B2", .Range("B" & .Rows.Count).End(xlUp))
myColor = 0
Select Case c.Value
Case "発注済み"
myColor = vbYellow
Case "納品済み"
myColor = vbBlue
End Select
If myColor Then c.EntireRow.Range("A1:L1").Interior.Color = myColor
Next
End With
End Sub
(ぶらっと)
いつもお世話になっております。 上の(まゆみ)さんは私とは異なります。
先日、ぶらっとさんに明記していただいたコードで試行したところB列の納入予定日遅れており、 A列が 発注済のときに行の色が赤色に変わり、Aが「納期遅れ」になるといったことに問題が生じました。 上記のコードですと、一つでも納期遅れがあるとそれより上の行で発注済の行で納入予定日が 明記してない行も含めて全て納期遅れになってしまいます。
A B C D 1 納入予定日 2発注済 3納入済 2013/5/1 4発注済 2013/5/10 5発注済 2013/5/15 6発注済 2013/6/1
例えば、上記のときにマクロを実行しますと、4,5行目が「納期遅れ」になりセルの色が赤色に変わって欲しいのに、 2,4,5行目が「納期遅れ」になりセルの色が赤色に変わってしまいます。 先日の質問のとき条件を言い忘れていましたが、納入予定日が明記されない案件もありますので その案件には「納期遅れ」にならないようにしたいです。 どうかよろしくお願い親します。
(レン)
提示したコードでは、"発注済み" と "み" が付いた文字列をチェックしているけど、実際には "発注済" のように "み" がないのかな?
ともあれ、コードを "発注済み" から "発注済" に変更して、↑でアップされたサンプルデータを試してみると 2,4,5 行目が赤になるね。で、4,5行目は赤でいいんだよね? (空白値は、日付としては通常の設定であれば1900年1月1日とみなされるので大昔ということで納期遅れ)
日付空白を赤にしないということなら
If c.Value < Date Then
これを
If Len(c.Value) > 0 And c.Value < Date Then
に変更。
(ぶらっと)
ぶらっとさん、いつもありがとうございます。 問題点も改善され、理想的なものができました。 このコードを調べて今後自分でもできるように勉強したいと思います。
本当にありがとうございました。
(レン)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.