我希望我能很好地解释这一点。
我有一栏 (D),显示学生参加 GCSE 考试的科目数。它由普通 GCSE 科目 (F) 和 BTEC 科目 (H) 组成。
我想要 D 列中显示的受试者构成的直观表示。
即一名学生参加了 8 门科目(D 列中的值为 8)。他们参加了 4 门普通 GCSE 科目(F 列中的值为 4)和 4 门 BTEC 科目(H 列中的值为 4)。 在 D 列中,我希望它是彩色的,以便它以一种颜色显示一半的单元格,以另一种颜色(不是渐变)显示另一半。 同样,如果学生参加了 2 门普通 GCSE 科目和 6 门 BTEC 科目,则 D 列中的单元格应根据百分比分割进行格式化。
我原以为我可以在单元格上使用两种不同的数据栏规则来做到这一点,一种填充左右,另一种填充左右,但这不起作用。
希望有一个我找不到的简单解决方案。
(A) 姓名 | (B) 形式类 | (C) 出席率 | (D) 订阅者总数 | (E) A*-C | (F) 直 | (G)<- No. | (H)BTEC | (一)<- No. |
---|---|---|---|---|---|---|---|---|
约翰 | 12B4 | 95 | 8 | 6 | 4 | 2 | 4 | 4 |
内置格式可能不支持此功能。代码可以解决它,但形状会覆盖 D 列中的单元格,从而阻止单击选择。
Sub demo()
Dim lastRow As Long
Dim c As Range, sRatio As Single
Dim oShp1, oShp2
ActiveSheet.DrawingObjects.Delete
lastRow = Cells(Rows.Count, "D").End(xlUp).Row
For i = 2 To lastRow
Set c = Cells(i, "D")
sRatio = Cells(i, "F") / c.Value
' Add the first rect
ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
c.Left, c.Top, c.Width * sRatio, c.Height).Select
' Change rect format
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 255, 0) ' fill in color
.Transparency = 0.5
.Solid
.Parent.Line.Weight = 0.1 ' boarder line
End With
Selection.Copy
c.Select
' Add the second rect
ActiveSheet.Paste
With Selection
.Left = c.Left + c.Width * sRatio
.Top = c.Top
.Width = c.Width * (1 - sRatio)
.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 255)
End With
Next
[a1].Select
End Sub