셀 값을 기준으로 데이터 범위 복사


0

열 A에서 C까지의 목록이 있습니다. 열 B에 "A" "B"또는 "C"가 포함되어 있습니다. 열 B의 값에 따라 열 A에서 C 로의 모든 데이터를 새 시트로 복사해야합니다.

샘플 데이터

B 열이 "A"인 경우 시트 1, B 열이 "B"인 경우 시트 2, B 열이 "C"인 경우 시트 3으로 복사하고 싶습니다.

를 사용하여 VBA를 시도 For i = 1 to .End(xlUp).Offset(0)했지만 어떻게해야합니까? 내가 시도한 것은 전혀 효과가 없었습니다.

답변:


0

아래 코드는 복사 할 데이터가 포함 된 시트의 이름이 "Main"이라고 가정합니다. 또한 "붙여 넣기"시트에 열 머리글이 포함되어 있다고 가정하므로 행 2에서 붙여 넣기가 시작됩니다. 원하는 것이 아닌 경우 .Offset(1, 0)붙여 넣기를 수행하는 회선 에서 통화를 제거하십시오 .

아마도 한 Debug.Print줄 보다 더 나은 오류 처리를 원할 것입니다 . 그러나 나는 그것을 당신에게 맡길 것입니다.

Excel 2007에서 테스트되었으며 예상대로 작동합니다.

Sub DoCopy()

  Const copySheetName As String = "Main"
  Dim rw As Integer
  Dim lngRowStart As Long
  Dim lngRowEnd As Long

  Dim copySheet As Excel.Worksheet: Set copySheet = ThisWorkbook.Worksheets(copySheetName)
  Dim pasteSheet As Excel.Worksheet

  lngRowStart = 1 'number of first row containing data to copy
  lngRowEnd = 17  'number of last row containing data to copy

  'the "Copy" sheet be the active sheet in order to copy/paste (avoid run-time error 1004)
  ThisWorkbook.Worksheets(copySheetName).Activate

  For rw = lngRowStart To lngRowEnd

    copySheet.Range(Cells(rw, 1), Cells(rw, 3)).Copy

    Select Case Cells(rw, 2)
      Case "a"
        Set pasteSheet = ThisWorkbook.Worksheets("Sheet1")
      Case "b"
        Set pasteSheet = ThisWorkbook.Worksheets("Sheet2")
      Case "c"
        Set pasteSheet = ThisWorkbook.Worksheets("Sheet3")
      Case Else
        Debug.Print "Invalid Value: " & Cells(rw, 2) & " (row " & rw & ")"
        GoTo SkipRow
    End Select

    pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues

SkipRow:
  Next rw

  Application.CutCopyMode = False
  Set copySheet = Nothing
  Set pasteSheet = Nothing
End Sub

Thx 저는 여러분의 도움에 감사드립니다
Keith So

또 하나의 질문은, 비평가가 셀 값으로 변함에 따라 "a"가 될 수있다
Keith So

죄송하지만 귀하의 질문을 이해하지 못합니다. 문구를 바꾸시겠습니까?
MJH

죄송합니다, CASE 함수를 사용하는 수식을 보았고 Case "a", Case "b"를 셀 값으로 변경할 수 있는지 궁금합니다. 셀 "A1"이라고 말하면 셀 A1에 대한 기준을 입력하여 결과
Keith So

'셀'기능을 사용하여 특정 셀의 값을 참조 할 수 있습니다. 그러나 각 '케이스'에 대해 다른 주장을 원할 것입니다.
MJH

0

미안하지만 방금 테스트 할 시간이 있었고 작동하지 않습니다. "Dim copySheet As Excel.Worksheet : Set copySheet = ThisWorkbook.Worksheets (copySheetName)"동안 중단되었습니다.

시트 "data"의 원래 데이터를 이미 이름을 Const copySheetName As String = "data"로 업데이트했습니다.

왜 작동하지 않는지 알고 있습니까? 감사합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.