|
おはようございます。
>お世話になります.
>過去ログを検索しましたが,該当するものが見つけられませんでした.
>見つけ方が不十分でしたら,申し訳ないです.
>
>エクセルのVBAを使い,任意のセルに数字を入力すると,vlookupにて,
>別シートで対応する文字に変換する方法を利用しています.
>
>--------------------------------------------
>Private Sub Worksheet_Change(ByVal Target As Range)
>On Error GoTo err1
>Application.EnableEvents = False
>
>If Intersect(Target, Range("B2:AF6")) Is Nothing Then
>Else
>Target = WorksheetFunction.VLookup(Target, Worksheets("Sheet2").Range("A1:B8"), 2, False)
'このままだと、例えば、B2:B30を選択した状態でVlookupに正常に反応する数字を
'入力後、Ctrl+Enterキーでセルを確定すると、B2:B30の範囲に数字に対応した
'データが入ってしまいますよ!!
'本来は、B2:B6のみに対応させたいと思いますが・・・。
'シート保護等で入力できない処理でもしているのかなあ??
>End If
>
>Application.EnableEvents = True
>Exit Sub
>err1:
>Application.EnableEvents = True
>End Sub
>
>--------------------------------------------
>
>この場合,通常の入力には問題ありませんが,複数のセルを選択して,
>一括でその内容をクリア(DEL)させると,セルが#N/A表記となって
>しまいます.
>1個1個丁寧にDELキーを押していけば問題ないんですが,セル数が膨大なため,
>出来ればワンクリックで通常のクリア状態にさせたいのですが,
>どのような方法がありますでしょうか?
>教えてください.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim crng As Range
Dim ttarget As Range
Application.EnableEvents = False
Set ttarget = Application.Intersect(Target, Range("B2:AF6"))
If Not ttarget Is Nothing Then
ttarget = Application.VLookup(ttarget, Worksheets("Sheet2").Range("A1:B8"), 2, False)
For Each crng In ttarget
If IsError(crng) Then
crng.Value = ""
End If
Next
End If
Application.EnableEvents = True
End Sub
これで試してみてください。
|
|