在 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
我有一个我正在制作的仪表板的参考文件。我希望能够计算参考文件列中的唯一组织名称,并使该数字成为我单独仪表板中列 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