2017-06-22 2 views
0

私は以下のコードをオンラインで入手できましたが、今はそれを複数のセル、 "列。これはどうすればいいですか?ターゲットセルが複数のセルの範囲内にあるかどうかをテストする方法:Excel VBA

私は元のコードを書いていないので、それを編集する方法については適切な手がかりがありません。私が納得させたいのはTarget.Addressだと理解していますが、私が使用しようとしているロジックはデバッガのエラーにしかなりません。

Dim Oldvalue As String 
Dim Newvalue As String 

On Error GoTo Exitsub 
If Target.Address = "$I$1" Then 
    If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then 
    GoTo Exitsub 
    Else: If Target.Value = "" Then GoTo Exitsub Else 
     Application.EnableEvents = False 
     Newvalue = Target.Value 
     Application.Undo 
     Oldvalue = Target.Value 
     If Oldvalue = "" Then 
      Target.Value = Newvalue 
     Else 
      Target.Value = Oldvalue & ", " & Newvalue 
     End If 
    End If 
End If 
Application.EnableEvents = True 
Exitsub: 
Application.EnableEvents = True 
End Sub 
+1

このコードはどこにありますか?シートチェンジイベントで?それは何を意味するのですか? –

+0

'Column I'では' If Target.Column = 9 Then'を試します。 – Mrig

答えて

0

ナイーブなアプローチは、列Iのすべてのセルかかわらず、ループになるとTargetに対するチェックを行うだろう。簡単な方法はIntersectを使用することです。

' Set up the range you're interesting in 
Dim myRange As Range 
Set myRange = ThisWorkbook.Sheets("Sheet1").Range("I1:I100") 

' Replacing "If Target.Address = "$I$1" Then" 
If Not Intersect(myRange, Target) Is Nothing Then 
    If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then 
     ... 
    End If 
End If 

ただし、このタスクがどのようなものであっても、別のアプローチを見つけることは価値があります。 Application.Undoを使用すると、実際に何が行われるのかわからなくても元に戻すことができないという盲目的な呼びかけのように、いくつかの点で問題が発生するでしょう。

+1

さらに、元に戻すことで、vbaを介してdoeを元に戻すことはできません。ユーザーの直接入力(マウス、キーボード)のみを取り消すことができます –

+0

また、複数のセルが結合方法で範囲を拡大し、交差メソッドを確認した後で –

関連する問題