2012-01-26 1 views
1

여기행에 마지막으로 비어 있지 않은 셀의 값을 가져 오는 방법은 무엇입니까? 그리고 값 <code>1</code>을 얻을 :

Sample table

내가 범위 (A2:E2 예)를 선택합니다 샘플 스프레드 시트를합니다. A4:E4을 선택하면 값 1이 표시됩니다. 등등. 매크로를 사용하여이를 수행 할 수있는 방법이 있습니까?

또 하나 필요한 것은 해당 열의 첫 번째 행에있는 값입니다. 예 :

내가 A4:E4 내가 (1 열 C에 있기 때문에) v를 얻으려면 선택하면 내가 (1 열 E에 있기 때문에) n을 얻고 싶은 A2:E2을 선택합니다.

+0

가능한 복제본 [마지막 행은 비어 있지 않습니다. 엑셀 VB] (http://stackoverflow.com/questions/4872512/last-not-empty-cell-in-row-excel-vb). – brettdj

+0

그래, 이건 여러개 중복 된거야. 마지막 비어 있지 않은 셀을 열에 가져 오는 것에 관해서도 많은 질문이 있습니다. 대답은 사실상 동일합니다. @ user1112251, 검색 기능을 사용해야합니다. –

답변

1

좋아, 여기에 통합 문서의 수식으로 사용할 수있는 함수가 있습니다. 또한 을 모두으로 질문합니다. :)

아래 코드를 모듈에 붙여 넣으십시오.

SYNTAX/USAGE

= Func라고 (셀 범위의 Arg)

셀 범위 (필수) 예 A2와 같은 범위 : E2

의 Arg : (필수) "H"또는 "R"의 값을 취할 수 있습니다. "H"는하면 열 헤더와 "R"을 줄 것이다하면 로우 값

예를 제공

= Func라고 (A1 : E2는 "H")는 당신 "N"AND

를 제공

= Func라고이 작동하는 방법을 보여주는 일반적인 코드는 단지이며 그것은에서 오류를 처리하지 않습니다 : (A1 : E2는 "R")는 당신에게 "1"

Option Explicit 

Function MyFunc(rng As Range, stype As String) As Variant 
    Dim MyArray() As String 
    Dim sCol As Long 

    If stype = "" Or (UCase(stype) <> "H" And _ 
    UCase(stype) <> "R") Then Exit Function 

    With rng 
     MyArray = Split(.Address, "$") 

     sCol = Cells(Val(MyArray(UBound(MyArray))), _ 
     Columns.Count).End(xlToLeft).Column 

     If UCase(stype) = "H" Then 
      MyFunc = Cells(1, sCol) 
     ElseIf UCase(stype) = "R" Then 
      MyFunc = Range(MyArray(UBound(MyArray) - 1) & _ 
      MyArray(UBound(MyArray))).Value 
     End If 
    End With 
End Function 

주의를 줄 것이다 순간.

+0

솔루션은 훌륭하지만 헤더를 가져 오는 데 "H"를 사용하면 0 만 반환됩니다. – user1112251

+0

게시하기 전에 코드를 사용해 보았습니다. 데이터와 동일한 행에 수식을 입력하지 않기를 바랍니다. 예를 들어 위의 예제를 사용하면 수식을 행 1-5의 어느 곳에 나 삽입 할 수 없습니다. 물론 이것은 위의 코드에서 몇 줄을 추가로 처리 할 수 ​​있습니다. –

2

다음 코드는 원하는대로 수행해야합니다. 참고 : 아무 것도 선택하지 않으므로 이점이 없어지는 속도가 느려집니다.

Cells(Row, Column)은 활성 워크 시트의 행 및 열로 식별되는 셀을 주소 지정합니다. 행은 숫자 여야합니다. 열은 숫자 (예 : 1 또는 104) 또는 열 식별자 (예 : "A"또는 "CZ") 일 수 있습니다.

.Cells(Row, Column)은 With 문에서 식별 된 워크 시트의 행 및 열로 식별되는 셀을 주소 지정합니다. 선행 점을 주목하십시오.

.Cells(2,Columns.Count)Columns.Count 이후 현재 Excel 버전의 워크 시트 당 열 수를 사용하므로 행 2의 마지막 셀을 처리합니다. `Rows.Count 행에 대해 동일한 작업을 수행합니다.

.Cells(2,Columns.Count)이 비어 있다고 가정하면 .Cells(2,Columns.Count).End(xlToLeft)은 지정된 방향의 다음 셀을 값으로 찾습니다. 이것은 Ctrl + LeftArrow와 동일한 VBA입니다. xlToRight, xlUpxlDown을 사용하면 다른 방향으로 이동할 수 있습니다. .Cells(Rows.Count,"A").End(xlUp)

.Cells(2,Columns.Count).End(xlToLeft).Column 2.

ValueColLast = .Cells(2, ColLast).Value는 I 같이 ValueColLast 정의한 행 2에서 마지막 셀의 값 ValueColLast 설정 행의 마지막으로 사용 된 컬럼의 개수를 제공 A 열에 마지막으로 사용 된 행을 준다 왜냐하면 내가 숫자라고 가정하고 Long으로 정의했기 때문에 String이 아니라면 오류가 발생했기 때문입니다.

HeadColLast = .Cells(1,ColLast).Value 세트 행에서 값 1

희망이 모든 말이를 HeadColLast.

+0

어수선한 답변을 피하기 위해 인라인 주석으로 코드를 설명 할 수 있습니다. 또한, 아무 것도 선택하지 않으면 반환 할 값을 코드에서 어떻게 알 수 있습니까? – JimmyPena

+0

@JP. OP가 구문에 대한 지식이 거의 없으므로 (아마도 불공정하게) 가정하므로 자세한 설명을 제공하려고합니다. 내가 인라인 주석을 사용하여 왜 내가 무엇을하고 있는지를 설명하지만 구문을 설명하지는 않을 것입니다. 아마 나는 명확하지 않았다; 나는 Range (X) .Select''Value = ActiveCell.Value'처럼 워크 시트 나 범위 나 셀을 선택하지 않는다고 말했어야합니다. –

+0

화살표 키 바로 가기를 사용하여 범위 제한을 결정하는 두 가지 테스트가 완료되었는지 확인하십시오. a) 검색을 시작하는 데 사용 된 셀을 테스트하는 것은 비어 있습니다. [일반적으로 전체 행/열이 가득 찼을 때를 의미하므로 일반적이지는 않습니다] b) found는 비어 있지 않습니다. [행과 열은 종종 완전히 비어있는 경우가 더 일반적입니다]. 게시 된 링크의 '찾기'접근 방식은이 확인 프로세스를 중심으로 이루어집니다. – brettdj

관련 문제