2009-10-20 101 views
3

alt text http://i33.tinypic.com/2dhhcwm.png如何在Excel VBA中查找具有連續數據的單元格?

鑑於圖像...如果我知道有一些數據從範圍(「B3」)開始。
我如何才能找到連續數據的單元格,直到單元格E3?由於F3是空白,因此不應考慮G3。 結果可以是範圍對象(B3:E3)或單元格數(在本例中爲4)。

通過設置B3爲活動單元格,做..

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

我得到的計數,但這種方法是不可靠的,在情況下,只有B3有數據它計數細胞達到的結束片。
當然,這也可以通過循環遍歷單元來實現,但我寧願使用工作表函數或其他有效的方法。

回答

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 

這是什麼你在之後?

+0

不錯的想法,但我可能對上方和下方的所述行的行數據,以便CurrentRegion可能不會返回正確的價值觀。 – 2009-10-20 09:00:27

+0

會CurrentRegion.Columns.Count不適合你嗎? – dendarii 2009-10-20 09:52:40

+0

我認爲CurrentRegion總是返回> =使用區域的邊界區域。因此,鑑於他有列標題,CurrentRegion.Columns將始終返回4. – 2009-10-20 14:59:15

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 
+0

似乎很好!讓我檢查一下。 – 2009-10-20 17:28:41

2

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

+0

第二種解決方案似乎很好!再次讓我檢查一下! – 2009-10-20 17:31:03

0

根據您需要多少一般得到的,它可能是那樣簡單

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

如果你想在扎ActiveCell,試試

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

WorksheetFunction.count不會工作,因爲我不知道編譯時的參數e4,請檢查我對dendarii的回覆。 讓我看看另一個。 – 2009-10-20 17:29:46

1

我喜歡用函數t帽子計算包含值的列直到遇到空單元格爲止。返回值可以用來設置一個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 
相關問題