Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA excel如何检查单元格的偏移量是否指工作表中的单元格_Vba_Excel - Fatal编程技术网

VBA excel如何检查单元格的偏移量是否指工作表中的单元格

VBA excel如何检查单元格的偏移量是否指工作表中的单元格,vba,excel,Vba,Excel,我想检查一个牢房有多少邻居是空的。 当我不知道我的手机是否有8个或更少的邻居时,我该怎么做? 这是我的密码。仅当“我的单元格”不在工作表的第一行或最后一行或第列时,它才起作用 Sub neighbors() Dim count%, i%, j% count = 0 For i = -1 To 1 For j = -1 To 1 If VBA.IsEmpty(ActiveCell.Offset(i, j)) Then count = count + 1 Next j

我想检查一个牢房有多少邻居是空的。 当我不知道我的手机是否有8个或更少的邻居时,我该怎么做? 这是我的密码。仅当“我的单元格”不在工作表的第一行或最后一行或第列时,它才起作用

Sub neighbors()
Dim count%, i%, j%
count = 0
For i = -1 To 1
    For j = -1 To 1
        If VBA.IsEmpty(ActiveCell.Offset(i, j)) Then count = count + 1
    Next j
Next i
' If activecell is empty - don't count it
If VBA.IsEmpty(ActiveCell) Then count = count - 1
MsgBox count
End Sub

尝试下面的代码,您需要检查
ActiveCell.Row
ActiveCell.Column
以查看它们是否是第一个

代码

Option Explicit

Sub neighbors()

Dim count As Long, i As Long, j As Long
Dim firstRow As Long, FirstCol As Long

count = 0
If ActiveCell.Row < 2 Then '<-- first row 
    firstRow = 0
Else
    firstRow = -1
End If
If ActiveCell.Column < 2 Then '<-- first column ("A")
    FirstCol = 0
Else
    FirstCol = -1
End If

For i = firstRow To 1
    For j = FirstCol To 1
        If IsEmpty(ActiveCell.Offset(i, j)) Then count = count + 1
    Next j
Next i

' If activecell is empty - don't count it
If IsEmpty(ActiveCell) Then count = count - 1
MsgBox count

End Sub
选项显式
次邻居()
暗数一样长,我一样长,j一样长
第一排一样长,第一列一样长
计数=0

若ActiveCell.Row<2,那个么'创建一个计算出的边界数组,并使用它来定义“相邻”单元格块

Option Explicit

Sub neighbors()
    Dim n As Long, bounds As Variant

    With ActiveCell
        bounds = Array(Application.Max(1, .Row - 1), _
                       Application.Max(1, .Column - 1), _
                       Application.Min(.Parent.Rows.count, .Row + 1), _
                       Application.Min(.Parent.Columns.count, .Column + 1))
    End With
    With ActiveCell.Parent
        With .Range(.Cells(bounds(0), bounds(1)), .Cells(bounds(2), bounds(3)))
            Debug.Print .Address(0, 0)
            n = Application.CountBlank(.Cells) + CBool(IsEmpty(ActiveCell))
        End With
    End With

    MsgBox n
End Sub

我不清楚“邻居”是什么意思,但是.CurrentRegion属性的.Count(可能受Intersect限制)是否有效?邻居是指围绕一个单元格的8个单元格,除非该单元格位于第一行或最后一行或最后一列中,在这种情况下,邻居较少。CurrentRegion属性没有帮助,因为相邻的单元格可能是空的,或者有些单元格可能是空的,有些单元格是满的,因此您无法预测CurrentRegion将是什么。请注意,我对下面的编码答案做了一个小的调整。在这个解决方案中,还需要检查最后一行或最后一列。@hil为什么?您是否打算在超过65000行的位置使用ActiveCell?理论上,是的。是否有一个常数可以用来知道最后一行和最后一列的编号?我不是说“结束”。在这种情况下,你需要检查ActiveCell.Row=1048576,你认为你能到达那里吗?列也一样