2017-01-12 1 views
0

내가 사용, 배열로 워크 시트의 정보를 넣어 노력하고 삭제 배열 범위에서 데이터를 전송 :마지막 행

WBArray = ActiveSheet.Range(Cells(5, 1), Cells(end1, 29)).Value 

을하지만 몇 가지 문제가있다 : 먼저 마지막 두 행을 내 원래 범위의 쓸모없는 데이터가 포함되어 있습니다. 배열로 전달할 때이 두 행을 어떻게 제거 할 수 있습니까? 내가 사용하고있는 것과 같은 직접적인 방법이 있습니까?

둘째, 내 범위는 5 번째 줄부터 시작하지만 이전 파일을 거쳐야하기 때문에 그 수는 다를 수 있습니다. 플로팅 참조를 만들 수있는 방법이 있나요? 그래서 원하는 데이터가 어디서 시작되는지에 따라 변경됩니다. (예를 들어, 행 7에서 시작하는 경우).

각 항목을 반복하면서 이미 시도했지만 작동하지 않는 것 같습니다.

아이디어가 있으십니까?

답변

1

영업 이익의 해명 후 편집

이 기능을 사용할 수

:

Function GetArray(sht As Worksheet) ', uselessRows As Long) 
    With sht 
     GetArray = .Range(.Columns(1).Find(what:="Identifier", lookat:=xlWhole, LookIn:=xlValues), _ 
          .Cells(.UsedRange.Rows(.UsedRange.Rows.Count).Row - 6, 29)).Value 
    End With 
End Function 

과 같은 주요 하위에 전화 :

WBArray = GetArray(mySht) 

mySht은 예를 들어 유효한 워크 시트 참조입니다. ActiveSheet

+0

답해 주셔서 감사합니다. 네, 그것은 하나의 파일에 대해서는 완벽하게 작동하지만, 수백 개의 통합 문서를 통해 매크로를 반복하고 각기 다른 시작점과 끝점으로 반복합니다. 따라서 각 파일에서 호출 할 방법이 없습니다. 루프를 만들려고합니다. 그 셀의 이름이 원하는 이름이면 그 셀을 내 start1로 사용하십시오. – DGMS89

+0

귀하의 질문에 "파일 수백"언급하지 않았다 어쨌든 기능은 일반적입니다.질문에 대한 답을 수락하고 _new_ 문제로 _new_ 문제를 게시 할 수 있습니다. – user3598756

+0

예, 맞습니다. 반복이 여러 번있을 것이라고 말했어야합니다. 그러나 어떤 경우라도, 하나의 파일 만 실행하고 있다면 코드에서 좌표를 특별히 호출하지 않고도 위치를 찾을 수있는 방법이 있습니까? – DGMS89

1

어쩌면

Sub x() 

Dim start1 As Long, end1 As Long, WBArray, r As Range 

With ActiveSheet 
    Set r = .Columns(1).Find(What:="Identifier", After:=.Cells(.rows.Count,1), LookAt:=xlWhole, _ 
          SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 
    If Not r Is Nothing Then 
     start1 = r.Row 
     end1 = .Range("A" & Rows.Count).End(xlUp).Row - 2 
     WBArray = .Range(Cells(start1, 1), Cells(end1, 29)).Value 
    Else 
     MsgBox "Identified not found" 
    End If 
End With 

End Sub 
+0

답변 해 주셔서 감사합니다. 이것은 거의 내가 원하는 것, 단지 몇 가지 질문입니다 : 1 - end1에서 정의한대로, 결국 2를 변경하면 쓸모없는 셀을 고려할 수 있습니까?) (5 개의 쓸모없는 행이 있다고 가정 해 보겠습니다. 나는 5)를 넣을 수 있을까? 2 - Start1의 경우 문제는 해당 초기 행에 데이터가 있지만 원하는 데이터가 5 또는 7 행 (또는 다른 행)에서 시작될 수 있다는 것입니다. UsedRange를 사용하면 첫 번째 불필요한 행을 계산합니다. – DGMS89

+0

Re end1 - 예 (그러나 식별 할 수있는 패턴이있는 경우 코드에 통합 할 수 있음). 다시 시작 1 - 예. 원하지 않는 행과 원하지 않는 행을 어떻게 구별합니까? – SJR

+0

원하는 범위의 첫 번째 셀에는 항상 동일한 식별자가 있습니다. 내가 좋아하는 뭔가를 시도하고 각를 ActiveCell에서 ActiveSheet.UsedRange.Rows 를 들어 을하면 ActiveSheet.Cells.Name = "식별자"그럼 start1 = ActiveCell.Row + 1 끝 종료 다음 행 – DGMS89