VBA excel如何检查单元格的偏移量是否指工作表中的单元格
我想检查一个牢房有多少邻居是空的。 当我不知道我的手机是否有8个或更少的邻居时,我该怎么做? 这是我的密码。仅当“我的单元格”不在工作表的第一行或最后一行或第列时,它才起作用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
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,你认为你能到达那里吗?列也一样