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

Counting unique text values and making dynamic dashboard in VBA

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

  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

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

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

这是一种将唯一结果加载到数组中的方法。这假设列 headers 进入 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