Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3641 / 13646 ツリー ←次へ | 前へ→

【60990】選択範囲のクリアについて たけ 09/3/31(火) 22:13 質問[未読]
【60993】Worksheet_Changeイベント内での処理方法 ichinose 09/4/1(水) 6:44 発言[未読]
【61009】Re:Worksheet_Changeイベント内での処理方法 たけ 09/4/2(木) 22:39 お礼[未読]

【60990】選択範囲のクリアについて
質問  たけ  - 09/3/31(火) 22:13 -

引用なし
パスワード
   お世話になります.
過去ログを検索しましたが,該当するものが見つけられませんでした.
見つけ方が不十分でしたら,申し訳ないです.

エクセルの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)
End If

Application.EnableEvents = True
Exit Sub
err1:
Application.EnableEvents = True
End Sub

--------------------------------------------

この場合,通常の入力には問題ありませんが,複数のセルを選択して,
一括でその内容をクリア(DEL)させると,セルが#N/A表記となって
しまいます.
1個1個丁寧にDELキーを押していけば問題ないんですが,セル数が膨大なため,
出来ればワンクリックで通常のクリア状態にさせたいのですが,
どのような方法がありますでしょうか?
教えてください.

【60993】Worksheet_Changeイベント内での処理方法
発言  ichinose  - 09/4/1(水) 6:44 -

引用なし
パスワード
   おはようございます。

>お世話になります.
>過去ログを検索しましたが,該当するものが見つけられませんでした.
>見つけ方が不十分でしたら,申し訳ないです.
>
>エクセルの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

これで試してみてください。

【61009】Re:Worksheet_Changeイベント内での処理...
お礼  たけ  - 09/4/2(木) 22:39 -

引用なし
パスワード
   ichinose 様

丁寧に解説していただき,また,提示までしていただきありがとうございます.
実際に試したところ,思い通りに動いております.

大変ありがとうございました.

3641 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free