我正在创建一个仪表板视图,该视图将具有由文件上的其他工作表确定的格式。
仪表板将有一个复选框,指示它将从哪个表中读取。我还在制作第一张纸。
基本上,仪表板的名称放在工作表的不同部分,第二个工作表在电子表格中具有相应的名称,如时尚。
我正在尝试编写基本上将名称范围与第2页上的名称列表进行比较的内容,如果名称匹配,我希望它读取第2页上名称旁边的数字并计算然后格式化表1上的名称。这是示例代码
Dim processes As Range
Dim applications As Range
Dim appCount As Range
Dim k As Integer
Set process = Worksheets("Dashboard").Range("A4:F17")
Set applications = Worksheets("Application").Cells(2, 1)
Set appCount = Worksheets("Application").Cells(2, 2)
k = 0
For I = 1 To process.Rows.Count
For j = 1 To process.Columns.Count
If process.Cells(I, j) = applications.Offset(k, 0) Then
If appCount.Offset(k, 0) >= 40 Then
process.Cells(I, j).Interior.ColorIndex = 37
Else
If appCount.Offset(k, 0) >= 20 Then
process.Cells(I, j).Interior.ColorIndex = 32
Else
If appCount.Offset(k, 0) <= 19 Then
process.Cells(I, j).Interior.ColorIndex = 27
End If
End If
End If
End If
k = k + 1
Next j
Next I
基本上我希望它匹配名称并比较表2中下一个单元格中的值,以确定表单1上名称的格式。
感谢能够提供帮助的任何人。我尝试运行时遇到错误。运行时错误'438':对象不支持此属性或方法。
答案 0 :(得分:2)
我建议使用条件格式,如下所示:
您需要的公式如下:
=40<IFERROR(INDEX($AB$1:$AB$2,MATCH($A1,$AA$1:$AA$2,0)),"Other")
=20<IFERROR(INDEX($AB$1:$AB$2,MATCH($A1,$AA$1:$AA$2,0)),"Other")
=0<IFERROR(INDEX($AB$1:$AB$2,MATCH($A1,$AA$1:$AA$2,0)),"Other")
请注意,规则的顺序很重要,您应该从以= 40&lt;。
开头的那个开始。答案 1 :(得分:0)
好吧,如果您想使用VBA,请注意您的代码的主要问题不是特定于语言,而是您没有正确使用算法。目前,您仅将流程11与应用程序1进行比较,然后仅将流程1 2与应用程序2进行比较,...将流程m n与应用程序14×m + n进行比较。为了保持思维简单,您应该有第三个循环来迭代所有应用程序行,如下所示:
Private Sub Worksheet_Activate() ' Or Private Sub Worksheet_Change(ByVal Target As Range)
Dim processes As Range
Dim applications As Range
Dim appCount As Range
Dim k As Integer
Set process = Worksheets("Dashboard").Range("A4:F17")
Set applications = Worksheets("Application").Cells(2, 1)
Set appCount = Worksheets("Application").Cells(2, 2)
For i = 1 To process.Rows.Count
For j = 1 To process.Columns.Count
For k = 0 To applications.End(xlDown).Row - 2
If process.Cells(i, j) = applications.Offset(k, 0) Then
If appCount.Offset(k, 0) >= 40 Then
process.Cells(i, j).Interior.ColorIndex = 37
ElseIf appCount.Offset(k, 0) >= 20 Then
process.Cells(i, j).Interior.ColorIndex = 32
ElseIf appCount.Offset(k, 0) <= 19 Then
process.Cells(i, j).Interior.ColorIndex = 27
End If
End If
Next k
Next j
Next i
End Sub
正如您所看到的,我将它放入了事件处理程序中。这样,只要您转到相关工作表,它就会更新颜色。或者,您可以将其绑定到Worksheet_Change,因此只要您的流程图上发生更改(更频繁的更新但需要更多CPU时间),它就会更新。
请注意,对于大型数据集,此算法不是最佳的,但您应该使用两阶段方法:(1)将所有application-applicationCount对或甚至应用程序格式化指令对收集到Scripting.Dictionary中,以及(2)迭代所有进程的单元格,在字典中查找应用程序并根据它应用格式。这样会更有效率,因为搜索字典所需的时间与日志(应用程序)而不是应用程序成比例。