ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 花菲飞

[求助] 较难的数据转换问题,求大神帮助。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-8 00:07 | 显示全部楼层
建一个简单的类模块存放转换设置
image.jpg

求助问题.zip

261.77 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2024-4-8 08:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
增加了计算排名代码。

求助问题.rar

252.88 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2024-4-8 09:36 | 显示全部楼层
很好奇,如果分数正好在下限(s0=s1),那岂不是分母为0?

TA的精华主题

TA的得分主题

发表于 2024-4-8 10:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
grf1973 发表于 2024-4-8 09:36
很好奇,如果分数正好在下限(s0=s1),那岂不是分母为0?

楼主提供的公式确实存在这个问题,对这个要加个判断,如果卷面分刚好等于卷面分范围下限,那么赋分就等于赋分范围下限。

TA的精华主题

TA的得分主题

发表于 2024-4-8 10:37 | 显示全部楼层
。。。。。。。。。。
360截图20240408103534099.jpg

求助问题.rar

266.02 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2024-4-8 10:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
重新生成对照表,用分数作为行,用分数对应的s1,s2,t1,t2作为列。
这样可以对分数s0直接确定s1,s2,t1,t2。

TA的精华主题

TA的得分主题

发表于 2024-4-8 11:21 | 显示全部楼层
原对照表里分数段没有实现全覆盖,附件里修改了一下。

TA的精华主题

TA的得分主题

发表于 2024-4-9 09:50 | 显示全部楼层
'计算公式应该是 t0=(t2 * (s0 - s1) + t1 * (s2 - s0)) / (s2 - s1)
'应该不会出现分母为0 的情况?

Sub test()

Set d = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")

ar = Sheets("设置").Range("a1").CurrentRegion
    For i = 2 To UBound(ar) Step 2
        For j = 3 To UBound(ar, 2)
            For x = ar(i + 1, j) To ar(i, j)
                S = ar(i, 1) & x
                d(S) = ar(1, j)
            Next
            
            d2(ar(i, 1) & ar(1, j)) = Array(ar(i + 1, j), ar(i, j))
        Next
    Next

'S0-卷面分,S1-卷面下限,S2-卷面上限,t1-转换下限,t2-转换上限
br = Sheets("数据源").UsedRange
    For i = 2 To UBound(br)
        For j = 6 To UBound(br, 2) Step 2
            s0 = br(i, j)
            If Len(s0) Then
                dj = d(br(1, j) & s0)
                S = d2(br(1, j) & dj)
                s1 = S(0): s2 = S(1)
                T = d2("转换分" & dj)
                t1 = T(0): t2 = T(1)
                zhf = (t2 * (s0 - s1) + t1 * (s2 - s0)) / (s2 - s1)
                br(i, j) = zhf
            End If
            
        Next
    Next
   
    '排名
    For i = 2 To UBound(br)
        For j = 7 To UBound(br, 2) Step 2
            If br(i, j - 1) <> "" Then
                c = Left(Cells(1, j - 1).Address(0, 0), 1)
                br(i, j) = "=rank(" & c & i & "," & c & ":" & c & ")"
            End If
        Next
    Next
   
    For j = 6 To UBound(br, 2) Step 2
        br(1, j) = "转换" & br(1, j)
    Next
   
With Sheets("转换分结果")
    .UsedRange = ""
    .Range("a1").Resize(UBound(br), UBound(br, 2)) = br
End With

Set d = Nothing
End Sub

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-28 03:31 , Processed in 0.031519 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表