条件格式显示基于其他单元格中使用的数字的求和单元格的百分比分割

问题描述 投票:0回答:1

我希望我能很好地解释这一点。

我有一栏 (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
excel vba conditional-formatting
1个回答
0
投票

内置格式可能不支持此功能。代码可以解决它,但形状会覆盖 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

© www.soinside.com 2019 - 2024. All rights reserved.