3

替代文字

给定图像...如果我知道有一些数据从 Range("B3") 开始。
如何找到具有直到单元格 E3 的连续数据的单元格?由于 F3 为空白,因此不应考虑从 G3 开始。结果可以是范围对象 (B3:E3) 或单元格计数(在本例中为 4)。

通过将 B3 设置为活动单元格并执行..

Range(ActiveCell, ActiveCell.End(xlToRight).Count

我确实得到了计数,但是这种方法不可靠,如果只有 B3 有数据,它会计算单元格直到工作表末尾。
当然,这也可以通过循环遍历单元格来实现,但我宁愿使用工作表函数或其他一些有效的方法。

4

5 回答 5

3

Intersect(Activecell.CurrentRegion, ActiveCell.EntireRow)

将返回 B3:E3。或者

If IsEmpty(ActiveCell.Offset(0,1).Value) Then
   Set rMyRange = ActiveCell
Else
   Set rMyRange = ActiveCell.Parent.Range(ActiveCell, ActiveCell.End(xlToRight))
End If

rMyRange 也将返回 B3:E3

于 2009-10-20T15:00:48.347 回答
3

您似乎正在尝试确定一行中使用的连续列数,从单元格 B3 开始。

下面的代码将根据您的数据返回 $B$3:$E$3 和 4 的值。如果只有单元格 B3 有数据,它将返回 $B$3 和 1。

Sub GetDataArea()

Dim strCellToTest As String
Dim rngMyRange As Range
Dim lngColumns As Long

strCellToTest = "B3"

lngColumns = ActiveWorkbook.ActiveSheet.Range("" & strCellToTest).End(xlToRight).Column - 1

If lngColumns >= 256 Then
 Set rngMyRange = ActiveWorkbook.ActiveSheet.Range("" & strCellToTest)
 lngColumns = 1
Else
 Set rngMyRange = ActiveWorkbook.ActiveSheet.Range _
 (strCellToTest & ":" & Range("" & strCellToTest).Offset(0, lngColumns - 1).Address)
End If

MsgBox "Columns: " & lngColumns & vbCr & vbLf & "Range: " & rngMyRange.Address

End Sub
于 2009-10-20T13:19:13.190 回答
1

我喜欢使用一个函数来计算包含值的列,直到它遇到一个空单元格。返回值可用于设置 FOR NEXT 循环以搅动表格。这是我的做法:

Sub tester()
    Dim Answer
    Answer = CountColumns(3, 2)
    MsgBox "There are " & Answer & " columns."
 End Sub
Public Function CountColumns(ByVal startRow As Integer, ByVal startColumn As Integer)
    'Pass starting location in spreadsheet for function to loop through until
    'empty cell is found. Return count of columns function loops through

     Do While ActiveSheet.Cells(startRow, startColumn).Value <> ""
        startColumn = startColumn + 1
     Loop
     startColumn = startColumn - 1
     CountColumns = startColumn
 End Function
于 2009-12-23T02:01:42.480 回答
1

您可以使用 CurrentRegion 属性。这将返回与指定范围连续的范围。所以...

Range("B3").CurrentRegion returns the range B3:E3
Range("B3").CurrentRegion.Columns.Count returns 4
Range("B3").CurrentRegion.Cells.Count also returns 4

但是,如果您在第 4 行及以下有数据(假设您在 B4:E6 中有数据),那么您会得到这些结果

Range("B3").CurrentRegion returns the range B3:E6
Range("B3").CurrentRegion.Columns.Count returns 4
Range("B3").CurrentRegion.Cells.Count returns 16

这就是你所追求的吗?

于 2009-10-20T08:49:51.577 回答
0

根据您需要获得的一般性,它可能很简单

Application.WorksheetFunction.Count([b4:e4])

如果您想绑定 ActiveCell,请尝试

Application.WorksheetFunction.Count(intersect(activecell.CurrentRegion, activecell.EntireRow))
于 2009-10-20T15:10:29.607 回答