计算唯一文本值并在VBA中创建动态仪表板

时间:2016-07-12 15:45:37

标签: excel vba excel-vba dynamic distinct-values

enter image description here

我有一个我正在制作的仪表板的参考文件。我希望能够计算参考文件列中的唯一组织名称,并将该数字作为单独仪表板中列标题的数量。我使用宏录制器使其独一无二,但我不确定如何将其转换为根据ref文件中唯一组织名称的数量为我的仪表板创建动态数量的列。这是参考文件外观的图片附件示例。因此,如果计算出有5个唯一名称,我希望单独的仪表板在每列中将这些名称作为标题创建5列。

  Sub Macro1()


 '     Macro1 Macro

Columns("F:F").Select
Range("F1:F10000000000").AdvancedFilter Action:=xlFilterCopy,  CopyToRange:=Columns _
    ("O:O"), Unique:=True

ActiveCell.FormulaR1C1 = "=ROWS(R[-11]C:R[-2]C)"

 End Sub

2 个答案:

答案 0 :(得分:1)

这是通过将唯一结果加载到数组中来实现的方法。这假设列标题进入A1。

Sub Macro1()

Dim wsRef As Worksheet
Dim wsDB As Worksheet

Set wsRef = Worksheets("reference")
Set wsDB = Worksheets("Dashboard")

With wsRef
    .Range("C1:C9").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("F1"), Unique:=True

    Dim arrValues As Variant
    arrValues = .Range("F2", .Range("F" & .Rows.Count).End(xlUp))

End With

With wsDB
    .Range(.Range("A1"), .Cells(1, UBound(arrValues))).Value = Application.WorksheetFunction.Transpose(arrValues)
End With

End Sub

答案 1 :(得分:0)

使用Dictionary object获取您的唯一值,然后遍历字典项以生成列标题。例如,

myCol = 1
For Each item in oDic.items
    'Presuming you want your headers to start at A1
    Cells(1, myCol).Value = item
    myCol = myCol + 1
Next