2016-06-01 13 views
0

これまでのところ、4つの新しいテーブルの列を既存のテーブル( "Table1")に追加しています。さて、私は3番目と4番目の行をパーセントでフォーマットするマクロを望みます。私は既に自分のコードに記載されているループにこれを含めたいと思います。私はこれを行うためにいくつかの異なる方法を試しました。私はUBound機能の仕組みをよく理解しているとは思えませんが、うまくいけば私がしようとしていることを理解することができます。Excel VBA - Excelテーブルの列をフォーマットするネストされたループ

私の入れ子にされたForループでWITH文を引き続き使用できるかどうかはわかりません。

@Jeeped - 私は再びこの1のためにあなたを見ているよ...基本的に、このプロジェクト全体を通して私を歩いてくれてありがとう笑

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ループを必要としません。 3番目と4番目の列をパーセンテージに設定したい場合は、ループの反復(2 2または3)(0からの配列インデックスを覚えておいてください)を設定する必要があります。また、メインループの配列を交差させるべきではありません。LBoundはほとんどの場合0ですから、とにかくそれを使うこともできます。 UBound(array)だけで指定した配列内の最大の要素(上限)の指標を与え、あなたの質問内の他の点に答えるために

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 

:これを試してみてください。そのような配列で50個の要素があるところでは、UBound(array)は49(前述のようにゼロに基づいて)を返します。 LBoundは、配列のもう一方の端(Lower BOUNDary)を返します。これは、通常ゼロです。

関連する問題