3

Excel にデータ検証機能があることは知っていますが、ユーザーに問題があることを知らせる代わりに、ユーザーに変更を自動的に適用する方法はありますか?

たとえば、アイテムを追加するための社内システム用の一般的なスプレッドシート テンプレートがあります。最初の列の項目番号には、不正な文字は使用できません。したがって、ユーザーが A1 に AN-XR10LP/1 を入力してから次のセルをクリックすると、ユーザーが何もせずに A1 の値を ANXR10LP1 に修正する検証が必要になります。

これをどのように開始できるかについてのアイデアはありますか?

4

2 に答える 2

2

これはVBAでしか実現できないと思います。以下のコードを試してください。セルにデータ検証がある場合は、微調整が必​​要になる場合があります。

このモジュールを、データを検証するワークシート オブジェクトに配置します。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 And Target.Rows.Count = 1 Then '-> make sure row count is 1 and target is in column A, can further refine if needed

    Dim strValue As String

    strValue = CleanString(Target.Value)

    Application.EnableEvents = False
    Target = strValue
    Application.EnableEvents = True

End If

End Sub

Function CleanString(str As String) As String

CleanString = Replace(str, "-", "")
CleanString = Replace(CleanString, "/", "")
'...
'keep adding replacements as needed


End Function
于 2012-09-21T16:02:24.833 に答える
1

Worksheet_Change のハンドラーを作成する

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

ハンドラーで、どこがTarget指されているかを確認し、それに基づいて検証ロジックを適用します。

Change修正した値を書き戻すときに発生するイベントを無視してください。

Private Sub Worksheet_Change(ByVal Target As Range)
    static self_protect as boolean

    if self_protect then exit sub


    ...
    self_protect = true
    Target.Value = "corrected value"
    self_protect = false
    ...

End Sub
于 2012-09-21T16:02:09.310 に答える