2016-08-01 3 views
0

시트에 열 A의 동적 행 수가 포함되어 있습니다. 처음 조건이 충족 될 때까지 동적 행 번호를 선택하려고합니다.vba에서 동적 범위 선택

열 A에는 블록으로 만 나타나는 이름이 있습니다. 예를 들어, A1에서 A10 "Alfred", A11에서 A13 "Flo", A14에서 A27 "Dave".

내가 변수 이름 = "알프레드는"A13에 A11을 선택 경우 등 변수 이름 = "플로"

내가 결코 알지 못할 경우 A10에 A1에서 선택할 수하고자 할 때 이름의 시작 또는 하지만 그들은 블록에 있다는 것을 압니다. 제 아이디어는 A1에서 마지막 행 까지 루프를 수행하는 것입니다. 그러나 범위의 시작 값과 끝까지 값을 지정하는 방법을 모르므로 선택할 수 있습니다.

내가 찾은 모든 게시물에서 우리는 범위의 시작을 알지만 끝이 아니라는 것을 알기 때문에 xlUp 또는 xltoLeft를 사용할 수 있습니다. 그러나 제 경우에는 할 수 없습니다.

루프를 수행하는 것을 도와 줄 수 있습니까? 감사. 당신이 그렇게 잘 부탁 때문에

+0

정렬 데이터를 다음 범위에있는 모든 수식을 수식 값을 변경하고 선택하는 것입니다 [여기]와 같이 자동 필터를 사용하십시오 (http://stackoverflow.com/questions/11631363/how-to-copy-a-line-in-excel-using-a-specific-word-and-pasting-to-another- excel-s/11633207 # 11633207) 귀하의 범위를 구성하십시오. –

답변

2

, 여기 당신은 간다 :

Dim blockBeginning, blockEnd, searchedColumn, firstRowSearched, lastRowSearched As Integer, searchString As String 

searchString = "Flo" 
searchedColumn = 1 
firstRowSearched = 1 
lastRowSearched = 30 

blockBeginning = -1 
For i = firstRowSearched To lastRowSearched 
    If (Cells(i, searchedColumn).Value = searchString) Then 
     If (blockBeginning = -1) Then 
      blockBeginning = i 
     End If 
     blockEnd = i 
    End If 
Next i 

If (blockBeginning = -1) Then 
    MsgBox ("Column <" & searchedColumn & "> does not have any entry with <" & searchString & ">") 
Else 
    Range(Cells(blockBeginning, searchedColumn), Cells(blockEnd, searchedColumn)).Select 
End If 
1

당신은 정말이 일을 루프가 필요하지 않습니다.

Public Sub SelectBlockRange(searchTerm As String, inColumn As String) 
    Dim rng As Range 
    Dim blockStart As Long, blockLength As Long 

    On Error Resume Next 

    blockStart = CLng(WorksheetFunction.Match(searchTerm, Columns(inColumn), 0)) 
    blockLength = CLng(WorksheetFunction.CountIf(Range(Columns(inColumn).Cells(blockStart), _ 
                 Columns(inColumn).Cells(Rows.Count)), _ 
               searchTerm)) 

    If blockStart > 0 And blockLength > 0 Then 
     Set rng = Range(Columns(inColumn).Cells(blockStart), _ 
         Columns(inColumn).Cells((blockStart + blockLength - 1))) 
     rng.Select 
    End If 
End Sub 

그리고 당신은 다음과 같이 호출 할 수 있습니다 :

SelectBlockRange "Flo", "A" 
+0

테스트 됨 - 작동합니다. 좋은 접근법. –

0

또 다른 트릭

Set columnA = UsedRange.Resize(, 1) 
columnA.Value2 = columnA.Value2  ' optional to convert any formulas to values 
columnA.Replace "Flo", "=""Flo"" " 
columnA.SpecialCells(xlCellTypeFormulas).Select 
columnA.Value2 = columnA.Value2  ' optional to convert the formulas back to values