2016-12-08 4 views
0

매크로를 작성하거나 VBA를 사용하는 데 익숙하지 않아 문제를 쉽게 해결할 수 있습니다. 현재 Excel의 프로젝트에서 매크로가 첨부 된 단추를 클릭하면 열 L의 값 (1a 또는 1b)에 따라 하나의 마스터 시트에서 다른 두 개의 마스터 시트로 데이터를 복사하여 붙여 넣을 수 있습니다 . 내가 지금까지 가지고있는 매크로는 복사/붙여 넣기 요소와 잘 작동하지만 복사 한 데이터를 붙여 넣을 때 가장 오래된 것부터 가장 최신의 날짜와 시간 (열 J)까지 자동 정렬하는 것이 좋습니다. 대상 시트에 넣습니다. 날짜/시간 형식은 MM/DD/YY HH : MM AM 또는 PM입니다.Excel VBA 날짜순 자동 정렬

Sub EGS_CVS_Sorting() 
Dim lr As Long, lr2 As Long, r As Long 

    lr = Sheets("template").Cells(Rows.Count, "L").End(xlUp).Row 

    For r = lr To 2 Step -1 

     Select Case Sheets("template").Range("L" & r).Value 
      Case Is = "1a" 
       lr2 = Sheets("EGS lines").Cells(Rows.Count, "L").End(xlUp).Row 
       Sheets("template").Rows(r).Copy Destination:=Sheets("EGS lines").Range("A" & lr2 + 1) 

      Case Is = "1b" 
       lr2 = Sheets("CVS lines").Cells(Rows.Count, "L").End(xlUp).Row 
       Sheets("template").Rows(r).Copy Destination:=Sheets("CVS lines").Range("A" & lr2 + 1) 
     End Select 

    Next r 

End Sub 

고맙습니다!

답변

0

Google에서 vba excel sort에 대한 541000 개의 결과 중 관심있는 내용을 찾지 못했습니까? 이것은 올바른 방향으로 제발 당신을 리드하지만, 헤더 등에 대한 확인, 정렬 할 데이터의 범위를 조정 확인하는 경우 : 일부 작업 당신에게 피난처를 수행하는 매크로를 작성하기위한

Sub EGS_CVS_Sorting() 
Dim lr As Long, lr2 As Long, r As Long 

    lr = Sheets("template").Cells(Rows.Count, "L").End(xlUp).Row 

    For r = lr To 2 Step -1 

     Select Case Sheets("template").Range("L" & r).Value 
      Case Is = "1a" 
       lr2 = Sheets("EGS lines").Cells(Rows.Count, "L").End(xlUp).Row 
       Sheets("template").Rows(r).Copy Destination:=Sheets("EGS lines").Range("A" & lr2 + 1) 

      Case Is = "1b" 
       lr2 = Sheets("CVS lines").Cells(Rows.Count, "L").End(xlUp).Row 
       Sheets("template").Rows(r).Copy Destination:=Sheets("CVS lines").Range("A" & lr2 + 1) 
     End Select 

    Next r 
    With Sheets("EGS lines") 
     lr = .Cells(Rows.Count, "L").End(xlUp).Row 
     Range("A1:L" & lastrow).Sort key1:=Range("J1:J" & lr), _ 
      order1:=xlAscending, Header:=xlYes 
    End With 
    With Sheets("CVS lines") 
     lr = .Cells(Rows.Count, "L").End(xlUp).Row 
     Range("A1:L" & lastrow).Sort key1:=Range("J1:J" & lr), _ 
      order1:=xlAscending, Header:=xlYes 
    End With 
End Sub 
0

좋은 출발점 전에 코딩 한 것은 단순히 원하는 작업을 수행하는 매크로를 기록하는 것입니다. 따라서 J 열에 날짜가있는 샘플 데이터 세트로 시작하면 매크로 기록을 시작하고 J 열로 데이터를 정렬하고 기록을 중지하고 코드를 살펴 봅니다.

Sub Sorter() 
' 
' Sort Macro 
' 

' 
    Range("J1").Select 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:= _ 
     Range("J1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ 
     xlSortNormal 
    With ActiveWorkbook.Worksheets("All Active Clients").Sort 
     .SetRange Range("F2:J23") 
     .Header = xlNo 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
End Sub 

I 셀 J1을 선택한이 수동으로 코드는 다음 정렬 기능을 통해가는 것을 나에게 단계를 보여줍니다 :이 얻을. 이것으로부터, 나는 실제로하고 싶은 것을 좁힐 수 있습니다. 예를 들어, 선택 J1이 필요하지 않습니다, 나는 내가 좋아하는 뭔가 아래 코드를자를 수 등 .sortmethod,에 대해 걱정할 필요가 없습니다 다음

Sub Sorter() 
' 
' Sort Macro 
' 

' 
    Const csDateSt As String = "J1" 

    Dim shtSort As Worksheet 
    Dim rngSort As Range 

    Set shtSort = Sheets("Sheet1") 
    Set rngSort = shtSort.UsedRange 

    With shtSort.Sort 
     .SortFields.Clear 
     .SortFields.Add Key:= _ 
         Range(csDateSt), _ 
         SortOn:=xlSortOnValues, _ 
         Order:=xlAscending 
     .SetRange rngSort 
     .Header = xlNo 
     .Apply 
    End With 
End Sub 

내가했던 모든 기록 된 코드를 재구성입니다 하드 코딩 된 값을 상수 및 변수로 변경하고 모두 With 블록에 넣습니다. 이제는 이것을 필요에 따라 같은 종류의 구조를 적용하는 로드맵으로 사용할 수 있습니다. 데이터가 어디에

당신은, 따라서, 그에게 그것을 알려줄 인수를 전달, 심지어 별도의 하위로 분류 과정을 유지하고, 필요할 때 그냥 호출 할 수 있습니다

Sub Sorter(ByVal shtSort As Worksheet, ByVal rngSort As Range, ByVal strKey As String) 
    With shtSort.Sort 
     .SortFields.Clear 
     .SortFields.Add Key:= _ 
         Range(strKey), _ 
         SortOn:=xlSortOnValues, _ 
         Order:=xlAscending 
     .SetRange rngSort 
     .Header = xlNo 
     .Apply 
    End With 
End Sub 

그런 다음 루프에서 당신이 말하는 것 라인을 따라 뭔가 :

Select Case Sheets("template").Range("L" & r).Value 
     Case Is = "1a" 
      lr2 = Sheets("EGS lines").Cells(Rows.Count, "L").End(xlUp).Row 
      Sheets("template").Rows(r).Copy Destination:=Sheets("EGS lines").Range("A" & lr2 + 1) 

     Case Is = "1b" 
      lr2 = Sheets("CVS lines").Cells(Rows.Count, "L").End(xlUp).Row 
      Sheets("template").Rows(r).Copy Destination:=Sheets("CVS lines").Range("A" & lr2 + 1) 
    End Select 

Call Sorter(Sheets("EGS Lines"),Sheets("EGS Lines").range("A1").currentregion, "J1") 
Call Sorter(Sheets("CVS Lines"),Sheets("CVS Lines").range("A1").currentregion, "J1")