0

私は現在このコードを持っています:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim lastrow As Long
    Dim rngList As Range

    lastrow = Cells(Rows.Count, "A").End(xlUp).Row

    Set rngList = Range("AB3").CurrentRegion

    If Target.Cells.Count > 1 Then Exit Sub

    On Error Resume Next

    If Not Intersect(Target, Range("B18:B19")) Is Nothing Then  ' user is in column-A
        Target.Value = Application.WorksheetFunction.VLookup(Target.Value, rngList, 2, False)
    End If

    Set rngList = Nothing
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim lastrow As Long
Dim rngList As Range

lastrow = Cells(Rows.Count, "A").End(xlUp).Row

Set rngList = Range("AC3").CurrentRegion

If Target.Cells.Count > 1 Then Exit Sub

On Error Resume Next

If Not Intersect(Target, Range("B10:B11")) Is Nothing Then  ' user is in column-A
    Target.Value = Application.WorksheetFunction.VLookup(Target.Value, rngList, 2, False)
End If

Set rngList = Nothing

サブ終了

両方を使えるように組み合わせたいのですが、どうすれば競合せずに使えるのかわかりませんので、よろしくお願いします。

4

1 に答える 1

0

私があなたを正しく理解しているなら、これはあなたがやろうとしていたトリックをするはずです:

Private Sub Worksheet_Change(ByVal Target As Range)

    WorksheetChanged Target、Range( "AC3")。CurrentRegion、Range( "B10:B11")
    WorksheetChanged Target、Range( "AB3")。CurrentRegion、Range( "B18:B19")

サブ終了

Private Sub WorksheetChanged(ByVal Target As Range、ByVal rngList As Range、ByValintersectRng As Range)

    薄暗い最後の長さ

    lastrow = Cells(Rows.Count、 "A")。End(xlUp).Row

    Target.Cells.Count> 1の場合、Subを終了します

    エラー時に次を再開

    If Not Intersect(Target、intersectRng)Is NothingThen'ユーザーは列Aにあります
        Target.Value = Application.WorksheetFunction.VLookup(Target.Value、rngList、2、False)
    終了する場合

    rngList=Nothingを設定します
サブ終了

ここに、範囲をパラメーターとして取得するプライベート関数があります。この関数は何度でも呼び出すことができます(ただし、Worksheed_Change Subで呼び出しすぎると、Excelが少し遅くなる可能性があります)。

于 2012-06-28T11:06:12.940 に答える