2009-10-20 5 views
3

alt text http://i33.tinypic.com/2dhhcwm.pngExcel VBA에서 한 행에 인접한 데이터가있는 셀을 어떻게 찾습니까?

주어진 이미지 ... 범위 ("B3")에서 시작하는 일부 데이터가 있음을 알고있는 경우.
셀 E3까지 연속 된 데이터가있는 셀을 어떻게 찾을 수 있습니까? F3은 공백이므로 G3 이후는 고려하지 않아야합니다. 결과는 범위 개체 (B3 : E3) 또는 셀 수 (이 경우 4) 중 하나 일 수 있습니다.

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

내가 그러나이 방법은 경우에만 B3 신뢰할 수 없습니다, 카운트를받을 수 있나요

에 데이터가 현재 셀로 B3을 설정하고 이렇게함으로써

.. 그것은 말까지 세포를 계산 시트.
물론 이것은 셀을 루핑하여 얻을 수도 있지만 오히려 워크 시트 함수 나 다른 효율적인 방법을 사용하고 싶습니다.

답변

1

CurrentRegion 속성을 사용할 수 있습니다. 지정된 범위와 인접한 범위를 반환합니다. , 당신은

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

이 무엇인가요 이러한 결과를 얻을 것입니다 : 당신이 행 아래 4를 데이터가 있다면 그래서 ...

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

그러나, (E6의 당신이 B4 데이터를 가지고 가정 해 봅시다) 너는 끝났어?

+0

좋은 생각이지만, 위의 행과 위의 행에 데이터가있을 수 있으므로 CurrentRegion이 올바른 값을 반환하지 않을 수 있습니다. –

+0

CurrentRegion.Columns.Count가 작동하지 않습니까? – dendarii

+0

저는 CurrentRegion이 항상 사용 된 영역보다 큰 경계 영역을 반환한다고 생각합니다. 따라서 열 머리글이있는 경우 CurrentRegion.Columns는 항상 4를 반환합니다. –

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

좋은 것으로 보인다! 그걸 확인해 볼게. –

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

두 번째 솔루션은 좋은 것 같습니다! 다시 한번 내가 그것을 점검하게 해주세요! –

0

을 때문일 수 있습니다 간단

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

당신이에 묶어하려면

로 ActiveCell, 시도해보십시오

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

컴파일 타임에 매개 변수 e4를 모르기 때문에 WorksheetFunction.count가 작동하지 않습니다. dendarii에 대한 내 응답을 확인하십시오. 다른 하나를 살펴 보겠습니다. –

1

저는 hat은 빈 셀을 만날 때까지 값이 포함 된 열을 계산합니다. 리턴 값은 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 
관련 문제