[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『赤文字で入力してある所を確認すると黒くなるようにしたいです。』(きらら)
この様に必要な個所に赤色文字で記入してある欄だけクリックを押すと黒になり保存が出来るようにしたいです。
見過ごしが多い為確認出来るようにできませんでしょうか?
___A___ ___B___ ___C___ __D__ __E__ ___F___ ___G___ ___H___ 1 会社名 伝票 ケース 日付 2 住所 3 TEL 4 到着日 5 6 製品名 ケース 数量 重量 単価 _____________________________________________________________________________________ 7 製品1 1 10 30 300 8 製品2 1 5 50 250 9 製品3 1 3 80 240 10 製品4 2 1 100 100 11 12_____________________________________________________________________ 13 total ケース 個数 260 合計 ___A___ ___B___ ___C___ __D__ ___E___ ___F___ ___G___
< 使用 Excel:unknown、使用 OS:unknown >
Target.Font.ColorIndex = 1
'(Targetの文字のカラーインデックスを1番(黒)に変えなさい)
Else
'(そうでないならば)
Target.Font.ColorIndex = 3
'(Targetの文字のカラーインデックスを3番(赤)に変えなさい)
End If
'(If文の終了を意味するコード)
End Sub
このマクロで全部が黒になった時に保存できるようにしたいです。
(きらら) 2022/06/22(水) 13:32
回答じゃなくてアレなんですが...
>見過ごしが多い ↑これを改善するのが目的なのであれば、
>クリックを押すと黒になり保存 という仕様は改善策としては「マズい」部類の策だと思います。 結局「見過ごし」は減らないでしょうね。
だって、クリックは目を瞑ってても、よそ見してても出来ちゃうし、 そもそもクリックなんて確認行為以前に、パソコン上での一般的な「所作」でしょ?
少なくとも自分の仕事相手が、そんな仕組みで「チェック済です!」とか言い張ってたら 全面的に信用しませんね。 おそらく「作ったけど使えない」仕組みになりそうな匂いがします。
そもそも赤文字にした「理由」というか「判断基準」があるんでしょうから 一度そこまで立ち戻って考え直した方が良いように思います。
(碌な発言じゃなくてスマセン。気を悪くしないでね^^;)
(白茶) 2022/06/22(水) 14:40
___A___ ___B___ ___C___ __D__ __E__ 1 会社名 伝票 ケース 日付 2 住所 3 TEL 4 到着日 5 6 製品名 ケース 数量 重量 単価
7 製品1 1 10 30 300 8 製品2 1 5 50 250 9 製品3 1 3 80 240 10 製品4 2 1 100 100 11 12 13 total ケース 個数 260 合計 ___A___ ___B___ ___C___ __D__ __E__
■2
クリックを押すと〜
たぶん、クリックすると〜という意味だと思いますが、SelectionChangeイベントだとクリック以外でも反応してしまいます。
なので、BeforeRightClickやBeforeDoubleClickイベントの利用を考えると良いと思います。
■3
>〜保存が出来るようにしたい
例えば黒(自動)以外の文字色が設定されているセルがある場合には、保存をキャンセルするように考えてみてはどうですか?
すなわち、Workbook_BeforeSaveイベントを利用すると良いでしょう。
ただし、そのままだと自分(管理者?)が色を変えて保存する場合でも保存がキャンセルされてしまうので、例えばユーザー名をみて分岐するとか一工夫されたほうがよいでしょう。
■4
ColorIndexについて↓の記事を読んでみてください。
【参考】 http://officetanaka.net/excel/vba/graph/24.htm
上記を読めばわかるとおもいますが、ColorIndexの場合必ずしも想定された色というわけではないです。
(もこな2 ) 2022/06/22(水) 18:57
(きらら) 2022/06/22(水) 20:12
>表もキレイにしていただきありがとうございます。 会社名をいれる場所がないですよ。
___A___ ___B___ ___C___ __D__ __E__ 1 会社名 伝票 ケース 日付 2 住所 ↓ ___A___ ___B___ ___C___ __D__ __E__ 1 会社名 伝票 ケース 日付 2 住所 だと思いますけど。 赤色文字で記入してある欄とは項目名を指しているのですか。 (???) 2022/06/22(水) 21:02
>1回だと色が簡単に染まってしまいますので。
いや、そういう意味ではないです。
「SelectionChange」イベントは、選択範囲が変わるたびに発動するんです。
クリックかどうかは関係ありません。矢印キーで移動したって発生するんですよ。
(残念ながらワークシートのclickイベントというのは無いんです。)
なので、ワークシートイベントで何とかするなら、BeforeRightClickやBeforeDoubleClickイベントの利用を検討するとよいと思うというお話でした。
>他の質問にも使用します。
余計なお世話かもしれませんが、複数の質問を同時進行にすると混乱しませんか?
落ち着いて一つずつ解決していかれてはどうですか?
(もこな2) 2022/06/22(水) 21:30
>こちらは一度完結と言う事で
こちらが解決してからと思ったんですが…
BeforeRightClickやBeforeDoubleClickイベントを利用したコードは書けたということですか?
また、BeforeSaveイベントを使ったコードも書けたということですか?
(もこな2 ) 2022/06/23(木) 07:22
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target.Interior If .ColorIndex = xlNone Then .Color = vbRed Else .Color = xlNone End If End With Cancel = True End Sub やってみたのですが、上手く出来ませんでした。 (きらら) 2022/06/23(木) 07:58
Sub a()
'ThisWorkbook :標準モジュールを設置したEXCELが対象 'Worksheets("任意のシート名"):対象EXCELシートを選択 'Interior.Color :セルの色のプロパティ ' = RGB(数値,数値,数値) :色を指定 'Cell(縦、横) ThisWorkbook.Worksheets("invoice").Cells(10, 11).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(10, 14).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(22, 2).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(22, 6).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(22, 11).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(20, 11).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(21, 11).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(23, 11).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(26, 11).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(37, 3).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色 ThisWorkbook.Worksheets("invoice").Cells(37, 12).Interior.Color = RGB(255, 0, 0) 'RGB(255,0,0)は赤色
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target.Interior If .ColorIndex = xlNone Then .Color = vbRed Else .Color = xlNone End If End With Cancel = True End Sub これで出来たのですが、開いた時にマクロを実行させないと動きません。 どうすればいいのでしょうか? (きらら) 2022/06/23(木) 08:27
■5
↓の狙いはなんですか?
Workbooks.Open
やはり、別トピックの話とごちゃ混ぜになっていませんか?
■6
↓の狙いはなんですか?
Color = 3
ColorIndexとColorは別物ですよ。(■4参照)
■7
↓は何で処理分岐するんですか?
If .ColorIndex = xlNone Then
ダブルクリックしたセルの元の色が何であれ、(自動)にすればよいという話ではないのですか?
(もこな2 ) 2022/06/23(木) 08:40
(もこな2 ) 2022/06/23(木) 08:56
Private Sub Workbook_Open() a End Sub
これを書き加えれば、ブックを開いたときに上記のaマクロが発動します。
(作業員) 2022/06/23(木) 10:03
そこで要確認セルを
・確認済みにするにはダブルクリック
・未確認にするには右クリック
・色付きセルがあるうちは保存することも閉じることもできない
こんな風にします。
以下コード
(雑な部分が多いですがご容赦ください)
Thisworkbookモジュール
Private Sub Workbook_BeforeClose(Cancel As Boolean) Cancel = Not ColorCheck End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Cancel = Not ColorCheck End Sub
Private Sub Workbook_Open() WorksheetInitial End Sub
シートモジュール
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = encolor(Target, False) End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = encolor(Target, True) End Sub
標準モジュール
Dim CheckRange As Range Dim unCheckedColor As Long Dim CheckedColor As Long
Sub WorksheetInitial() Dim r As Range Dim v
unCheckedColor = 3 CheckedColor = xlNone
For Each v In Array("K10", "N10", "K20:K23", "C37", "D37", "L32:L35", "L37:M37") If r Is Nothing Then Set r = Range(v) Else Set r = Union(r, Range(v)) End If Next Set CheckRange = r
CheckRange.Interior.ColorIndex = unCheckedColor
End Sub
Function encolor(TargetRng As Range, IsColor As Boolean) As Boolean Dim cIndex As Long If Not Intersect(TargetRng, CheckRange) Is Nothing Then If IsColor Then cIndex = unCheckedColor Else cIndex = CheckedColor End If With TargetRng.Interior If .ColorIndex <> cIndex Then .ColorIndex = cIndex encolor = True End If End With End If End Function
Function ColorCheck() As Boolean Dim r Dim errMessage As String
If Not CheckRange Is Nothing Then For Each r In CheckRange If r.Interior.ColorIndex <> CheckedColor Then errMessage = errMessage & r.Address(0, 0) & Chr(10) End If Next End If
If errMessage = "" Then ColorCheck = True Else MsgBox errMessage & "上記セル未確認", vbInformation End If End Function
(作業員) 2022/06/23(木) 12:07
■9
「a」が見づらいので整理するとこういうことですね
Sub a() ThisWorkbook.Worksheets("invoice").Range("K10,N10,B22,F22,K20:K23,K26,C37,L37").Interior.Color = RGB(255, 0, 0) End Sub
■10
すでにコード例の提示がありますが、私ならこんな感じですかね。
【Thisworkbook】モジュール
Option Explicit Const tmp As String = "K10,N10,B22,F22,K20:K23,K26,C37,L37" '-------------------------------------------------------------------------------- Private Sub Workbook_Open() ThisWorkbook.Worksheets("invoice").Range(tmp).Interior.Color = RGB(255, 0, 0) End Sub '-------------------------------------------------------------------------------- Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim buf As Range For Each buf In ThisWorkbook.Worksheets("invoice").Range(tmp) If buf.Interior.Color = RGB(255, 0, 0) Then MsgBox "未チェックセルがあります" & vbLf & "保存をキャンセルします" Cancel = True Exit For End If Next buf End Sub
【invoice】シートモジュール
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Interior.Color = RGB(255, 0, 0) Then Target.Interior.ColorIndex = xlColorIndexNone Cancel = True End If End Sub
■余談
まとめて書いてしまったので、[[20220622151941]]のほうはご自身で始末をつけてください。
(でないと、投げ出されたようにも見えますので)
なお、「Interior.Color」なのか「Font.Color」なのかはっきりさせておいたほうが良いです。
(途中からすり替わってますよ)
(もこな2 ) 2022/06/23(木) 13:17
もしも、私の提示したものを参考にしたのであれば、完成品のプレゼントではなく研究用の資料として提示したつもりですから、ただ丸パクリして終了ではなく、きちんと理解して御自身のモノにされてから運用してください。
(もこな2 ) 2022/06/24(金) 09:02
>おっと失礼。ご指摘ありがとうございます。 質問者に対しての発言でした。 失礼しました。 (???) 2022/06/24(金) 11:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.