【问题标题】:Excel - Multiple Cell CalculationExcel - 多单元格计算
【发布时间】:2017-01-11 21:09:58
【问题描述】:

我是一名教师,正在尝试创建评分表,但我遇到的问题是作业使用不同的方案进行评分(即 % [1 - 100]、级别 [1 -4]、字母等级 [F - A] )。我遇到的问题是我只想使用一种标记方案进行报告,并且需要根据标记的方案转换或计算其他标记方案。

我制作了一个包含学生姓名和作业的 Excel 工作表。然后工作表有 3 个其他列,一个代表每个方案“字母”、“级别”、每个方案的百分比列。现在,在任何给定时间,“方案”列之一中都会有一个值 - 我需要 excel 自动或通过宏将适当的值计算到其他单元格中。

例如,在同一张纸上有三个作业,每个作业都用不同的方案标记。

Assignment 1 - %
Assignment 2 - Level 
Assignment 3 - Letter Grade

如何让 excel 检查存在哪个标记值,然后填充/计算另外两个相应的值。

Mike 在作业 1 上获得了 80% (%),但我希望 excel 同时用相应的值填充级别列和字母列作业 2 上的级别 3 excel 以同时计算相应的百分比和字母作业 3 上的字母 A 的时间应计算相应的百分比和水平。

不知道这是否可行或有意义,但我尝试了 VLOOKUP 并没有成功,因为我必须手动完成所有操作 - 我的目标是自动化流程。

对不起,如果不清楚或令人困惑......但我已经在这两天没有运气,甚至不确定我正在做的事情是否可行。

【问题讨论】:

    标签: excel vba formula calculation


    【解决方案1】:

    当然应该首先评估一个评级系统到另一个评级系统的翻译,然后假设这些算法在评级等级类型之间转换

    其中一种可能的方法如下:

    Option Explicit
    
    Sub main()
        Dim grades As Variant, levels As Variant
        Dim cell As Range
        Dim index As Double
    
        grades = Array("F", "E", "D", "C", "B", "A")
        levels = Array(1, 2, 3, 4)
    
        For Each cell In Intersect(Range("A:C"), ActiveSheet.UsedRange).Offset(1).SpecialCells(xlCellTypeConstants)
            Select Case cell.Column
                Case 1 '%
                    index = cell.value / 100
                    cell.Offset(, 1).value = GetRate(index, levels)
                    cell.Offset(, 2).value = GetRate(index, grades)
                Case 2 ' Level
                    index = InStr(Join(levels, ""), cell.value) / Len(Join(levels, ""))
                    cell.Offset(, -1).value = index * 100
                    cell.Offset(, 1).value = GetRate(index, grades)
                Case 3
                    index = InStr(Join(grades, ""), cell.value) / Len(Join(grades, ""))
                    cell.Offset(, -2).value = index * 100
                    cell.Offset(, -1).value = GetRate(index, levels)
            End Select
        Next
    End Sub
    
    Function GetRate(index As Double, rates As Variant)
        GetRate = rates(WorksheetFunction.Max(Round(index * (UBound(rates) - LBound(rates) + 1), 0) - 1, 0))
    End Function
    

    由于翻译算法的简单性,它不提供具有不同跨度的评分系统之间的双射关系,但它可以让您更接近您的目标

    【讨论】:

    • here 你可以从“翻译算法”中获得灵感
    • 感谢您的指导,我会尝试看看我能想出什么。
    【解决方案2】:

    像这样创建一个表(如果您需要定义 +/- 分数,如“B+”等,您可以添加更多行)。这里的关键是按百分比升序对表格进行排序,每一行是相应级别/字母等级所需的最低分数。

    然后,你可以对这个表使用VLOOKUP 公式,像这样得到Level:

    =VLOOKUP(F2,$A$1:$C$7,2,TRUE)
    

    像这样,获得字母等级:

    =VLOOKUP(F2,$A$1:$C$7,3,TRUE)
    

    这利用了 VLOOKUP 函数中的True 参数,该参数将返回一个近似匹配(并假设数据按升序排序)。因此,当您输入“81%”之类的值时,它会返回最近的行,该行不大于 81%,因此它将返回第 5 行的数据。同样,12% 将返回来自第 5 行的数据第 2 行,第 4 行的 75%,等等。

    你的结果:

    如果您不能 1:1 将 Level/Letter Grade 映射到 Percent 行,您可能需要使用 两个 表,但想法是一样的。

    【讨论】:

    • 感谢您的回复,我继续在google上搜索答案并尝试不同的东西。我知道有一种方法可以在 excel 中做到这一点,并决心实现它。最终,我认为这可能会走访问数据库的路线,但我想暂时保持简单,因为我的编码技能不是最好的。
    • @Syngh 上述方法对您行不通吗?如果没有,您能否详细说明(用新的/相关信息修改您的原始问题)?这应该可以工作,并且不需要 任何 VBA 编程...
    • 感谢大卫的代码,我试图解决的最初问题是这个(如果我表达得不好,我很抱歉)。我需要 excel 自动查看 3 个不同列中的单元格 - 一旦它在其中一个单元格中看到“标记”,我需要它自动将相应的值填充到另外两个单元格中。 VLookup 有效,但我必须将公式插入到正确的行中,我希望在不需要 VLookup 作为单元格中的 fx 的更高级别执行此操作,只需让它运行脚本来执行结果。
    • 您可能会考虑使用以下内容修改您的问题:更好地解释您正在尝试做的事情,屏幕截图或最好粘贴的 inputs 文本示例,以及相同对于预期的输出/结果。在大多数情况下,如果你能展示你迄今为止所做的尝试,解释其中的问题或缺点(这有助于其他人在帮助你时避免犯同样的错误),这也是非常有帮助的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多