繁体   English   中英

Excel VBA确定3X3范围相对于activeCell的位置

[英]Excel VBA determine the location of a 3X3 range relative to activeCell

我在Excel中定义了一个3 x 3范围。 我想知道在双击任何一个蓝色单元格时用户单击的位置。 -面积定义为范围。

在此处输入图片说明

我试图创建一个函数来找出该选择,但是对于我的基本技能来说有点困难。

我的想法是为矩阵中的每个单元分配一个整数值(1-9),并具有一个返回该值的函数。

根据提供的答案编辑问题

Function relRange(rangeIn As Range, activeCell) As Integer
relRange = 0
If (rangeIn.Rows.Count = 6) And (rangeIn.Columns.Count = 6) Then  ' range has double merged cells
    ' comparison code to determine where the activecell is relative to the 3x3 array

        If rangeIn.Cells(5, 1).Address = activeCell Then relRange = 1 '1
        If rangeIn.Cells(3, 1).Address = activeCell Then relRange = 2 '2
        If rangeIn.Cells(5, 3).Address = activeCell Then relRange = 3 '3
        If rangeIn.Cells(3, 3).Address = activeCell Then relRange = 4 '4
        If rangeIn.Cells(1, 1).Address = activeCell Then relRange = 5 '5
        If rangeIn.Cells(5, 5).Address = activeCell Then relRange = 6 '6
        If rangeIn.Cells(1, 3).Address = activeCell Then relRange = 7 '7
        If rangeIn.Cells(3, 5).Address = activeCell Then relRange = 8 '8
        If rangeIn.Cells(1, 5).Address = activeCell Then relRange = 9 '9

End If
End Function

我现在可以使用此功能了,很惊讶没有一个更简单的方法。

这应该在工作表对象中 ,而不是在标准模块中。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Dim ws As Worksheet:    Set ws = ThisWorkbook.Worksheets(1)
    Dim Matrix(1 To 2) As Range, i As Long
    Set Matrix(1) = ws.Range("A1:C3")
    Set Matrix(2) = ws.Range("F1:H3")

    For i = LBound(Matrix) To UBound(Matrix)
        Set iSect = Application.Intersect(Target, Matrix(i))
        If Not iSect Is Nothing Then
            Exit For
        End If
    Next

    If Not iSect Is Nothing Then
        MsgBox "Target located in Range # " & i & " at: " & Target.Address
    Else
        MsgBox "Does NOT interesect in any of my ranges!"
    End If

    Cancel = True

End Sub

如果Cancel = True ,那么您的单元格将不会处于编辑模式。

您可以选择Target的范围,然后进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM