|
▼もよもと さん:
>▼佳 さん:
>>こんにちは。
>>
>>なんか、あぶなっかしいですね。
>>VBAを使っても、想定外の使い方をされて 誤ったデータが完成・流通
>>してしまいそうな不安があります。
>>
>>入力用のシート(B列とC〜E列に入力)と、出力用のシート(関数を仕込み、
>>保護を掛けてある)を別にするのはどうですか。
>>
>>
>>▼もよもと さん:
>>>▼β さん:
>>>>▼もよもと さん:
>>>>
>>>>横から失礼します。
>>>>
>>>>>万一手動入力後に取り消ししようとして、関数を消されるとマズイので。
>>>>
>>>>変更されたくないセルに対しては、セルに保護をかけでシートを保護しておくのが
>>>>エクセル利用の常道だと思いますが?
>>>>
>>>>(セル保護は初期値すべてかかっていますので、実際には、全セルの保護を解除して
>>>> あらためて、変更禁止せルに保護を設定した上でシート保護になりますが)
>>>
>>>
>>>βさん
>>>
>>>関数は変更されたくないのですが、そのセルに手動で値は入れたいのです。
>>>また、入力セルは200×10程度あり、その全てに関数を入れると重くなるので。
>
>佳さん
>
>その手もアリですね。
>トライしてみます。
下記のコードでなんとかイメージ通りに出来ましたが、
エラー回避のためにOn Error Gotoを入れると、エラーで
ないものまでエラー判定されてしまい、困っています。
どうしたら、よろしいでしょうか。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim r As Range
Set rng = Intersect(Target, Range("$E$8:$E$200"))
If Not rng Is Nothing Then
Application.EnableEvents = False
For Each r In rng
If r.Value <> "" Then
r.Offset(, 2).Value = Application.WorksheetFunction.VLookup(r, Sheets("Sheet2").Range("$B$3:$I$200"), 2, False)
r.Offset(, 3).Value = Application.WorksheetFunction.VLookup(r, Sheets("Sheet2").Range("$B$3:$I$200"), 3, False)
r.Offset(, 4).Value = Application.WorksheetFunction.VLookup(r, Sheets("Sheet2").Range("$B$3:$I$200"), 4, False)
Else
r.Offset(, 2).ClearContents
r.Offset(, 3).ClearContents
r.Offset(, 4).ClearContents
End If
Next
Application.EnableEvents = True
Set rng = Nothing
End If
End Sub
|
|