首页 > 解决方案 > 在活动行中查找与活动单元格值不同的值的前一个单元格地址(左侧)

问题描述

我试图找到一个 VBA 解决方案来查找具有与所选单元格不同的值的前一个单元格(位于同一行)。因此,如果选定的单元格是例如 [N6] (如我的图片),那么我的搜索范围应该是(“A6:N6”),我需要从中找到具有不同单元格值的最后一个单元格(这将是单元格 [ L6] 在我的图片中,因为它是前一个单元格,其值与单元格 [N6] 不同。搜索应从末尾 (N6,M6,L6...) 开始,直到找到第一个匹配项(第一个不同的单元格值) .找到第一个匹配项时选择它。我有数百列,所以我的图片只是为了说明原理。我执行我的vba代码,Private Sub Worksheet_SelectionChange(ByVal Target As Range)所以当用户用鼠标选择一个单元格时。我得到所需的单元格{=ADDRESS(6;MATCH(2;1/(A6:O6<>"D")))}但我需要一个 VBA 解决方案来解决我的问题。我当前的 VBA 解决方案将我带到单元格 [I6] 而不是 [L6] 并且我无法弄清楚如何编辑我的代码以找到正确的单元格(在我的示例图片中为 [L6])。

Dim rngSel As String, rngStart As String
Dim rngActiveStart As Range
rngSel = ActiveCell.Address(0, 0)
rngStart = Cells(ActiveCell.Row, 1).Address(0, 0)
Set rngActiveStart = Range(rngStart & ":" & rngSel)

Dim c
    For Each c In rngActiveStart.Cells        
        If c <> Target.Value And c.Offset(0, 1) = Target.Value Then
                c.Select
                MsgBox "Previous different cell: " & c.Address(0, 0)
            Exit For
        End If
    Next

在此处输入图像描述

标签: excelvba

解决方案


使用 selection_Change

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim r As Long, col As Long, x
    Dim v As String
    
    r = Target.Row
    v = Target.Value
    Application.EnableEvents = False

    For x = Target.Column To 1 Step -1

        With Me
            If .Cells(r, x) <> v Then
                .Cells(r, x).Select
                Exit For
            End If
        End With

    Next x

    Application.EnableEvents = True


End Sub

推荐阅读