1

テーブル ("Table1") の 4 つの特定の列に数式を追加するには、ネストされたループが必要です。これらの同じ 4 つの追加の列 ("colNames") の命名に関して、For ループが前の For ループを模倣することを望みます。

このコードの下部は問題なく動作しますが、ループに組み込む方法を知りたいです。

Sub attStatPivInsertTableColumns_2()
Dim lst As ListObject
Dim currentSht As Worksheet
Dim colNames As Variant, formNames As Variant '<~~ NOTE: As Varient, this is your go to when working with arrays
Dim oLC As ListColumn, oLData As Variant
Dim i As Integer, d As Integer

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

colNames = Array("AHT", "Target AHT", "Transfers", "Target Transfers")

    For i = 0 To UBound(colNames) 
        Set oLC = lst.ListColumns.Add
        oLC.Name = colNames(i)
    Next i
          ***Below is the code that needs to be looped***                                
'lst.ListColumns("Target AHT").DataBodyRange.FormulaR1C1 = "=350"
'lst.ListColumns("Target Transfers").DataBodyRange.FormulaR1C1 = "=0.15"
'lst.ListColumns("AHT").DataBodyRange.FormulaR1C1 = "=([@[Inbound Talk Time (Seconds)]]+[@[Inbound Hold Time (Seconds)]]+[@[Inbound Wrap Time (Seconds)]])/[@[Calls Handled]]"
'lst.ListColumns("Transfers").DataBodyRange.FormulaR1C1 = "=[@[Call Transfers and/or Conferences]]/[@[Calls Handled]]"

End Sub

これは私がこれまでのところ行っていることですが、おそらく明らかな理由でエラーが発生しています。

formNames = 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")
For d = 0 To UBound(formNames)
    For i = 0 To UBound(colNames)
        Set oLData = lst.ListColumns(i).DataBodyRange.FormulaR1C1 = "d"
    Next i
Next d
4

1 に答える 1

1

新しいテーブル列に入力する数式/値を含むバリアント配列をもう 1 つ作成します。

Sub insertTableColumn()
    Dim lst As ListObject
    Dim currentSht As Worksheet
    Dim h As Long, hdrs As Variant, r1c1s As Variant

    hdrs = 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)

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

    With lst 'ActiveSheet.ListObjects("Table1")
        For h = LBound(hdrs) To UBound(hdrs)
            .ListColumns.Add
            .ListColumns(.ListColumns.Count).Name = hdrs(h)
            .ListColumns(.ListColumns.Count).DataBodyRange.FormulaR1C1 = r1c1s(h)
        Next h
    End With

End Sub

また、数式/値h = LBound(hdrs) To UBound(hdrs) Step 2と一緒に単一の配列でペアを使用しました。hdrs(h+1)

于 2016-06-01T22:25:05.963 に答える