如何在Excel VBA中连续查找具有连续数据的单元格?

时间:2009-10-20 04:57:30

标签: excel-vba vba office-2007 excel

alt text

鉴于图像...如果我知道有一些数据从Range(“B3”)开始 如何找到具有直到E3单元的连续数据的单元?由于F3为空白,因此不应考虑G3以上。 结果可以是范围对象(B3:E3)或单元格数(在这种情况下为4)。

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

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

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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

这是你追求的吗?

答案 3 :(得分: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

答案 4 :(得分:0)

根据您需要获得的一般情况,它可以像

一样简单
Application.WorksheetFunction.Count([b4:e4])

如果您想要绑定ActiveCell,请尝试

Application.WorksheetFunction.Count(intersect(activecell.CurrentRegion, activecell.EntireRow))