簡體   English   中英

如何在Excel VBA中連續查找具有連續數據的單元格?

[英]How Do I Find The Cells With Contiguous Data In A Row In Excel VBA?

替代文字

給定圖像...如果我知道從Range(“ B3”)開始有一些數據。
如何找到直到單元格E3具有連續數據的單元格? 由於F3為空白,因此不應考慮G3起。 結果可以是范圍對象(B3:E3)或像元數(在這種情況下為4)。

通過將B3設置為活動單元並進行操作。

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

我確實得到了計數,但是這種方法並不可靠,以防萬一只有B3有數據,它才計數單元格直到工作表的末尾。
當然,這也可以通過遍歷單元格來實現,但是我寧願使用工作表函數或其他有效方法。

似乎您正在嘗試確定從單元格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

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

您可以使用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

這是你所追求的嗎?

我喜歡使用一個對包含值的列進行計數的函數,直到遇到一個空單元格為止。 該返回值可用於設置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

根據您需要獲得的通用性,它可能像

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

如果要綁定ActiveCell,請嘗試

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM