[英]How Do I Find The Cells With Contiguous Data In A Row In Excel VBA?
似乎您正在嘗試確定從單元格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.