[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『入力規則違反』(すもも)
Hセルに入力規則を設定してます。
御存知の方もいるかと思いますが、
コピペの場合は規則を突破されちゃいます。
そこで入力規則以外はエラーで注意喚起するようにしたいのです。
色々検索かけてみたのですが、整数で制限かける等ありましたが、
整数での制限は掛けれないとします。
基本的にあるシートからコピペします。
コピペした時点で規則以外の文字はエラーメッセージが出るとか、
すぐに気付くように出来ませんか?
みなさんどうかよろしくお願いします。
< 使用 Excel:Excel2007、使用 OS:Windows10 >
VBAでセルの選択やシートの切り替えなどのイベント発生時にコピー状態を強制的に解除する。
Private Sub Worksheet_Activate() Application.CutCopyMode = False End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.CutCopyMode = False End Sub もうちょっと頑張ればクリップボードの内容をセルのコピーから文字列のコピーに書き換えるというのもありかもしれません。
入力規則を使うのをやめて、VBAのイベントで検査を行う方法
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range For Each r In Target If Not IsNumeric(r.Value) Then MsgBox r.Value & "は整数ではないので受け付けられません!", vbExclamation Application.Undo End If Next End Sub
入力規則は使うが、入力規則が破壊されたことを検知して巻き戻す方法
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range For Each r In Target If r.Address = Range("A1").Address Then On Error Resume Next If Intersect(Cells.SpecialCells(xlCellTypeAllValidation), r) Is Nothing Then MsgBox "A1の入力規則の破壊を検知しました!", vbExclamation Application.EnableEvents = False Application.Undo Application.EnableEvents = True End If On Error GoTo 0 End If Next End Sub
なんてのは如何でしょう。
(名無し) 2018/12/13(木) 19:37
(すもも) 2018/12/14(金) 09:01
If r.Address = Range("A1").Address Then を If r.Column = Range("H1").Column Then とすると宜しいかと。
あまり検証しておらず思いつきで上げた案なので、一応検証はよく行ってから運用して欲しい。
(名無し) 2018/12/14(金) 16:15
(すもも) 2018/12/14(金) 18:39
コードを差し替えた後や入力規則を書き換えた後は、シートを切り替えるなりエクセルを再起動するなりしてくださいね。
キャッシュする処理をSelectionChangeイベントに組み込めば楽なんでしょうけど、ペーストのタイミングで起きるイベントとの発生順序が怖いのでやめておきました。
Option Explicit
'シートがアクティブになった時、入力規則の状態をキャッシュしておく Private CacheValidation As Range
Private Sub Worksheet_Activate() Set CacheValidation = Cells.SpecialCells(xlCellTypeAllValidation) End Sub
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range For Each r In Target On Error GoTo ErrSkip '-----特定のセルを対象とする場合 'If Not Intersect(r, Range("H2,H3,H5,H6")) Is Nothing Then '-----H列全てを対象とする場合 'If r.Column = Range("H1").Column Then '-----シートアクティブ時に入力規則が入っていたセル全てを対象とする場合 If Not Intersect(CacheValidation, r) Is Nothing Then If Intersect(Cells.SpecialCells(xlCellTypeAllValidation), r) Is Nothing Then MsgBox r.Address(False, False) & "の入力規則の破壊を検知しました!", vbExclamation Application.EnableEvents = False Application.Undo Application.EnableEvents = True End If End If ErrSkip: On Error GoTo 0 Next End Sub
'キャッシュ状況の確認用 無くてもOK Private Sub DebugCache() Dim r As Range For Each r In CacheValidation Debug.Print r.Address(False, False) & " "; Next End Sub
(名無し) 2018/12/14(金) 20:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.