2016-06-01 4 views
0

지금까지는 기존 테이블 ("Table1")에 4 개의 새 테이블 열을 추가하는 매크로가 있습니다. 이제 매크로를 사용하여 세 번째와 네 번째 행의 비율을 백분율로 지정하십시오. 이미 내 코드에 나열된 루프에이 내용을 포함하고 싶습니다. 나는 이것을하기 위해 몇 가지 다른 방법을 시도했다. 나는 UBound 함수가 어떻게 작동 하는지를 잘 이해하지 못한다고 생각하지만, 내가 뭘 하려는지 이해할 수 있기를 바랍니다.Excel VBA - Excel 테이블 열을 배열하는 중첩 루프

내 중첩 For 루프에서 WITH 문을 계속 사용할 수 있는지 확실하지 않습니다. '내'변수와 관련 있습니다.

@Jeeped - 기본적으로 내가이 전체 프로젝트 롤

Sub attStatPivInsertTableColumns_2() 

Dim lst As ListObject 
Dim currentSht As Worksheet 
Dim colNames As Variant, r1c1s As Variant 
Dim h As Integer, i As Integer 

Set currentSht = ActiveWorkbook.Sheets("Sheet1") 
Set lst = ActiveSheet.ListObjects("Table1") 

colNames = Array("AHT", "Target AHT", "Transfers", "Target Transfers") 
r1c1s = Array("=([@[Inbound Talk Time (Seconds)]]+[@[Inbound Hold Time (Seconds)]]+[@[Inbound Wrap Time (Seconds)]])/[@[Calls Handled]]", "=350", "=[@[Call Transfers and/or Conferences]]/[@[Calls Handled]]", "=0.15") 

With lst 
For h = LBound(colNames) To UBound(r1c1s) 
    .ListColumns.Add 
    .ListColumns(.ListColumns.Count).Name = colNames(h) 
    .ListColumns(.ListColumns.Count).DataBodyRange.FormulaR1C1 = r1c1s(h) 
    If UBound(colNames(h)) = 2 or UBound(colNames(h)) = 3 Then   
     For i = UBound(colNames(h), 2) To UBound(colNames(h), 3) 
      .ListColumns(.ListColumns.Count).NumberFormat = "0%" 
    End if 
     Next i 
Next h 
End With 

End Sub 

답변

1

당신은 둥지에 두 번째 for 루프가 필요하지 않습니다 통해서 나를 걸어 다시이 일을 위해 당신을 ... 감사합니다 찾고 있어요. 세 번째와 네 번째 열을 백분율로 설정하려면 루프 반복 (h)이 2 또는 3 (배열 인덱스가 0 인 것을 기억함) 일 때만 설정하면됩니다. 또한 메인 루프의 어레이를 교차 시켜서는 안되며, LBound은 대부분의 경우 0이므로 어쨌든 사용할 수 있습니다. 이 시도 :

With lst 
    For h = 0 To UBound(r1c1s) 
     .ListColumns.Add 
     .ListColumns(.ListColumns.Count).Name = colNames(h) 
     .ListColumns(.ListColumns.Count).DataBodyRange.FormulaR1C1 = r1c1s(h) 
     If h = 2 or h = 3 Then   
       .ListColumns(.ListColumns.Count).NumberFormat = "0%" 
     End if 
    Next h 
End With 

귀하의 질문의 다른 지점에 대답하기 위해, UBound(array)은 지정된 배열에서 가장 큰 요소 (상한선)의 인덱스를 제공합니다. 따라서 배열에 50 개의 요소가있는 경우 UBound(array)은 49를 반환합니다 (앞서 언급 한대로 0 기준). LBound은 배열의 다른 끝 (Lower BOUNDary)을 제공하는데, 일반적으로 0입니다.