【问题标题】:Use VLookup to see if selected cell is in a range?使用 VLookup 查看所选单元格是否在范围内?
【发布时间】:2016-04-16 20:58:44
【问题描述】:

我已经看到如何说“单元格 x 在 y 范围内”,但由于我使用的是 VLookup,我不知道如何协调这两者。

基本上,下面的代码会查找包含提示的表格,然后将它们显示在指定的单元格中。它工作得很好。我喜欢 要做的是在查找表中指定整个单元格范围,然后如果用户选择该范围内的任何单元格,则会显示提示。就目前而言,如果我有一个很大的区域,比如 10 个单元格,我必须在查找表中创建 10 个重复条目(每个单元格一个)。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim cellTitle As Range
    Set cellTitle = Range("J2")
    Dim cellTip As Range
    Set cellTip = Range("J3")
    
    If Target.Address = "$J$3:$K$5" Or Target.Address = "$J$2:$K$2" Or Target.Address = "$K$1" Then
        'leave existing content in case user wants to copy tip
    Else
        Range("K1").Value = Target.Address
        Title = Application.VLookup(Target.Address, Sheets("Settings").Range("TipsDashboard"), 2, False)
        If Not IsError(Title) Then
            Tip = Application.VLookup(Target.Address, Sheets("Settings").Range("TipsDashboard"), 3, False)
            cellTitle.Value = Title
            cellTip.Value = Tip
        Else
            cellTitle.Value = "Tips & Instructions"
            cellTip.Value = "Try selecting various fields to get dynamic tips or instructions in this space."
        End If
    End If
End Sub

这是我的查找表的示例:

您会注意到这里有范围,但它们是合并的单元格。

【问题讨论】:

  • 你试过find吗?
  • 我没用过find函数,没有。
  • 今天学习新东西!编辑:嗯。我看着你的桌子,我很困惑。您实际上将单元格构建到一列中进行查找??
  • 是的,所以我可以为“仪表板”工作表上的任何单元格添加评论。以我的拙见,它真的很整洁。 :)

标签: vba excel named-ranges


【解决方案1】:

已编辑:这样可以将活动工作表中的不同单元格与“设置”工作表的“单元格”列中的相同范围值相关联

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal target As Range)
    Dim cellTitle As Range, cellTip As Range, found As Range

    Set cellTitle = Range("J2")
    Set cellTip = Range("J3")

    If target.address = "$J$3:$K$5" Or target.address = "$J$2:$K$2" Or target.address = "$K$1" Then
        'leave existing content in case user wants to copy tip
    Else
        Range("K1").Value = target.address

        Set found = GetCell(target, Sheets("Settings").Range("TipsDashboard").Columns(1))
        If Not found Is Nothing Then
            cellTitle.Value = found.Offset(, 1)
            cellTip.Value = found.Offset(, 2)
        Else
            cellTitle.Value = "Tips & Instructions"
            cellTip.Value = "Try selecting various fields to get dynamic tips or instructions in this space."
        End If
    End If
End Sub


Function GetCell(target As Range, sourceRng As Range) As Range
Dim cell As Range, cell2 As Range

With target
    For Each cell In sourceRng.SpecialCells(xlCellTypeConstants, xlTextValues)
        Set cell2 = GetRangeFromAddress(.Parent, cell.Value)
        If Not cell2 Is Nothing Then
            If Not Intersect(.cells, cell2) Is Nothing Then
                Set GetCell = cell
                Exit Function
            End If
        End If
    Next cell
End With

End Function


Function GetRangeFromAddress(sht As Worksheet, address As String) As Range

On Error Resume Next
Set GetRangeFromAddress = sht.Range(address)
On Error GoTo 0

End Function

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    相关资源
    最近更新 更多