[[20111015114345]] 『データ入力の関係で困っています。毎回、1000』(のりのり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『データ入力の関係で困っています。毎回、1000件程度の入力を行うのですが、すでに入力済みのセルに誤って違うデータを入力してしまい、データが置き換わってしまいます。修正がかからないようにする、もしくは、データ入力の際に警告メッセージ等が出るような方法はないでしょうか。Excel2000』(のりのり)

 エクセルの標準機能でできるのかどうか、当方エクセル音痴なのでわからないけど、
もし、できるとして、でも、入力ミスもあるわけで、いったん入力したら訂正できないというのは
あとあと、困ることも多くなるような気がするけど?

 VBAでやるとすれば

 1.シートモジュールのChangeイベントで、Applicatio.Undoで入力前の状態を把握して、もし、空白じゃなかったらエラーメッセージで抜け。
  空白だったら、あらためて入力後の値をセルにいれる。
  (この場合、Application.EnableEventsのFalse/Trueを記述してイベントの連鎖を抑止)

 2.一定の入力後、値のあるセルを保護セルにしてシート保護する処理を操作者がキック。

 3.あるいは、シートモジュールのChangeイベントで、値があれば、そこを保護セルに。
  (シートは保護されているという前提。必要ならコード内で UserInterfaceOnly:=True 指定のシートProtectを。)

 (ぶらっと)


 エキスパートさん達から標準機能による解決策の提示があるまでの「つなぎ」として、上記1.をもう少し親切(?)にしたものを。
空白セル以外に入力があった場合は、その旨メッセージをだし、強制的に入力するのか、
うっかりミスなので元に戻すかを操作者に選ばせる。

 シートモジュール(シートタブを右クリックしてでてくるところ)に以下を貼り付け。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    Dim NG As Boolean

    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Undo

    For Each c In Target
        If Len(c.Value) > 0 Then
            If MsgBox("入力されたセルにはすでに値が入っていました。よろしいのですか?", vbYesNo) = vbNo Then
                MsgBox "入力前の状態に戻します"
                NG = True
                Exit For
            End If
        End If
    Next

    If Not NG Then
        Application.CommandBars.FindControID:=129).Execute   'Redo
    End If

    Application.EnableEvents = True
    Application.ScreenUpdating = True

 End Sub

 (ぶらっと)

 作業列を使っての入力規則を使う例ですが余り自信がありませんもっと他の方法がありそうですが?分かりません
例 A1に入力しようとするセル、B1に作業列として、B1に =TEXT(A1,A1)
A1を選択し、入力規則を設定
入力値の種類をユーザー設定
数式 =B1=TEXT("","G/標準")
A1に入力し、確定した場合一度消さないと再入力できないとなってしいますけど
VBAのぶらっとさんの方が良いと思います。
(貼)VBAもさっぱり分かりませんけど

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.