2017-10-17 1 views
0

저는 VBA에 완전히 익숙하며 통합 문서의 각 시트에서 특정 섹션을 추출하여 서식을 지정하고 새 통합 문서에서 1 시트로 함께 출력하는 Excel 모듈을 스크립팅하려고합니다.여러 워크 시트에서 데이터 추출

지금까지 이걸 가지고 있습니다.

Public Sub extractCol() 

    ' Find FF&E Section, Add 3 rows and Identify relevant columns. 

    Dim rFind As Range 

    With Range("A:A") 
     Set rFind = .Find(What:="FF&E", LookAt:=xlWhole, MatchCase:=False, 
     SearchFormat:=False) 
     If Not rFind Is Nothing Then 

      NumRange = rFind.Row + 3 ' Find FF&E line and add three 
      CRange = "C" & NumRange & ":" & "C" & NumRange + 100 ' Define First 100 
      Lines in Column C 
      ERange = "E" & NumRange & ":" & "E" & NumRange + 100 ' Define First 100 
      Lines in Column E 
      KRange = "K" & NumRange & ":" & "K" & NumRange + 100 ' Define First 100 
      Lines in Column K 
      MRange = "M" & NumRange & ":" & "M" & NumRange + 100 ' Define First 100 
      Lines in Column M 


      Set range1 = Union(Range(CRange), Range(ERange), Range(KRange), 
      Range(MRange)) ' Combine individual column ranges in to one selection 
      range1.Copy ' Copy new combined range 

      Set NewBook = Workbooks.Add ' Open new Workbook 
      ActiveCell.PasteSpecial Paste:=xlPasteValues ' Paste to new Workbook 

     End If 

    End With 

End Sub 

정확하게는 wan't가 아닌 현재 시트 만 추출합니다. 모든 시트를 처리하려면 어떻게 반복합니까?

두 번째로 모든 결과를 같은 시트 아래에 붙여 넣으시겠습니까?

그리고 마지막으로 시트 이름을 추출하여 형식을 지정하는 아래 스크립트가 있습니다. 이상적으로 나는 출처 시트에 따라이 데이터를 표시 할 위의 출력에 열을 추가하려고합니다.

Function FindRoom() 

    shtName = ActiveSheet.Name 

    Dim arr() As String 
    arr = VBA.Split(shtName, " ") 

    xCount = UBound(arr) 
    If xCount < 1 Then 
     FindRoom = "" 
    Else 
     FindRoom = arr(xCount) 
    End If 
End Function 

죄송합니다,이 간단한 하나의 대답 질문이 아니라 그냥 올바른 방향으로 날을 가리키는 것 경우에도 어떤 도움을 감사하게 될 것입니다 알고있다.

+0

시트를 반복하는 코드 예제가 많이 있습니다. For-Next 루프는 표준이며 워크 시트 변수를 참조하기 만하면됩니다. 이 애비뉴를 시도해 봤나? 새 통합 문서의 모든 결과를 원한다는 뜻입니까? – SJR

+0

나는 이걸 보았지만 작동시키지 못해 막혔다. 각 시트를 반복하여 결과를 새로운 통합 문서 시트에 추가하고 싶습니다. 내 가정은 루프가 필요하지만, 단지 새로운 행을 발견 할 때마다 새로운 통합 문서를 만드는 대신 첫 번째 통합 문서를 추가하는 것입니다. –

+0

시도한 것을 게시 할 수 있습니까? FindRoom 함수의 문제점은 경우에 따라 빈 문자열을 반환한다는 것입니다. – SJR

답변

0

시도해보십시오. 워크 시트 변수 ws을 추가했습니다. 그러면 새 통합 문서의 열 A에 시트 이름이 표시되고 B 열에는 데이터가 저장됩니다. 또한 모든 변수에 선언을 추가했습니다.

Public Sub extractCol() 

'Find FF&E Section, Add 3 rows and Identify relevant columns. 

Dim rFind As Range, CRange As String, ERange As String, KRange As String, MRange As String 
Dim ws As Worksheet 
Dim NewBook As Workbook 
Dim NumRange As Long 

Set NewBook = Workbooks.Add ' Open new Workbook 

For Each ws In ThisWorkbook.Worksheets 
    With ws 
     Set rFind = .Range("A:A").Find(What:="FF&E", LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False) 
     If Not rFind Is Nothing Then 
      NumRange = rFind.Row + 3 ' Find FF&E line and add three 
      CRange = "C" & NumRange & ":" & "C" & NumRange + 100 ' Define First 100 Lines in Column C 
      ERange = "E" & NumRange & ":" & "E" & NumRange + 100 ' Define First 100 Lines in Column E 
      KRange = "K" & NumRange & ":" & "K" & NumRange + 100 ' Define First 100 Lines in Column K 
      MRange = "M" & NumRange & ":" & "M" & NumRange + 100 ' Define First 100 Lines in Column M 

      Set range1 = Union(.Range(CRange), .Range(ERange), .Range(KRange), .Range(MRange)) ' Combine individual column ranges in to one selection 
      range1.Copy ' Copy new combined range 
      NewBook.Sheets(1).Range("B" & Rows.Count).End(xlUp)(2).PasteSpecial Paste:=xlPasteValues ' Paste to new Workbook 
      NewBook.Sheets(1).Range("A" & Rows.Count).End(xlUp)(2).Resize(range1.Rows.Count).Value = FindRoom(ws) 
     End If 
    End With 
Next ws 

End Sub 

Function FindRoom(ws As Worksheet) 

    shtName = ws.Name 

    Dim arr() As String 
    arr = VBA.Split(shtName, " ") 

    xCount = UBound(arr) 
    If xCount < 1 Then 
     FindRoom = "" 
    Else 
     FindRoom = arr(xCount) 
    End If 
End Function 
+0

필자가 생각하는 FindRoom 함수를 실행할 수 없기 때문에 실패합니다. FindRoom 부분을 문자열로 바꾸면 제대로 작동합니다. 스크립트에서 FindRoom 함수를 어디에 두어야 여기서 호출 할 수 있습니까? 도와 주셔서 감사합니다. 루프는 분명 나에게 희망을주고있다! –

+0

내 실수 - 매개 변수를 추가하는 기능을 업데이트했지만 수정 된 코드를 포함하는 것을 잊었습니다. 지금 시도해보십시오. – SJR

+1

그냥 또 하나 가야했습니다. 그건 내 실수 였어. 코드가 완벽합니다. 도움을 많이 주셔서 감사합니다. 치료를해라. –

관련 문제