ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 关于JSA的分组求和

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-17 10:23 | 显示全部楼层 |阅读模式
请教各位大佬:  怎么用JSA的 映射根据ABC三列得到后面黄色效果呢?另外JSA里面要实现黄色效果  还有其他办法吗?比如对象可以吗?
7e08b497-a44b-4c39-aef1-df216953b22a.png

请教.rar

8.03 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2024-8-17 11:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png

请教.zip

9.86 KB, 下载次数: 19

评分

9

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-17 12:35 | 显示全部楼层

感谢 学到思路了  另外请教一下大佬  map.has(k) || map.set(k,[a,b,0]  这里的|| 据我所知是 或者的意思  请问放在这里 是什么意思呢 不是太理解,另外读取到数组 arr =range("a1:c7")() 这种用法很新颖  在哪里能学习到类似的知识点呢?

TA的精华主题

TA的得分主题

发表于 2024-8-17 12:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
everbest2015 发表于 2024-8-17 12:35
感谢 学到思路了  另外请教一下大佬  map.has(k) || map.set(k,[a,b,0]  这里的|| 据我所知是 或者的意思 ...

map.has(k) || map.set(k,[a,b,0]
相当于
if (!map.has(k)) {
    map.set(k, [a,b,0])
}

也就是利用||(有一真则全真)的左边为false时,执行右边的。如果左边为true了,就会短路,不执行右边的

Range("a1:c7")()
相当于
Range("a1:c7").Value2

这个是我自己琢磨出来的,没什么资料

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-17 12:48 | 显示全部楼层
今铭昔 发表于 2024-8-17 12:41
map.has(k) || map.set(k,[a,b,0]
相当于
if (!map.has(k)) {

明白了   这个|| 短路运算的逻辑很巧妙,再次感谢!

TA的精华主题

TA的得分主题

发表于 2024-8-17 13:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
JSA中最简单的字典+数组汇总,这个必须要学会的

2024-08-17_132120.png

TA的精华主题

TA的得分主题

发表于 2024-8-17 13:24 | 显示全部楼层

一下子搞出三种方法来,都能学得懂得,就是不会运用,只会用方式2那种

TA的精华主题

TA的得分主题

发表于 2024-8-17 19:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-17 20:17 | 显示全部楼层
function demo(){
        var arr =Range("a1").CurrentRegion.Value2;
        var header =arr.shift();
        var obj ={};
        arr.forEach(([name,dep,score])=>{
                var k = name + "|" + dep;
                if(!obj.hasOwnProperty(k)){
                        obj[k]=[name,dep,score]
                }else{
                        obj[k][2]+=score
                }
        })
        var brr=Object.values(obj);
        brr.unshift(header);
        Range("k1").Resize(Object.keys(obj).length+1,brr[0].length).Value2=brr
}

TA的精华主题

TA的得分主题

发表于 2024-8-18 07:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习一下字典,打扰了
Sub test()
arr = [a1].CurrentRegion
ReDim brr(1 To UBound(arr), 1 To 3)
Set d = CreateObject("scripting.dictionary")
For i = 2 To UBound(arr)
   s = arr(i, 1) & arr(i, 2)
   If Not d.exists(s) Then
      m = m + 1
      For j = 1 To UBound(arr, 2)
         brr(m, j) = arr(i, j)
      Next
      d(s) = m
   Else
      r = d(s)
      brr(r, 3) = brr(r, 3) + arr(i, 3)
   End If
Next
[f1].Resize(, 3) = Array("姓名", "部门", "总分")
[f2].Resize(m, 3) = brr
End Sub

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-9-19 09:53 , Processed in 0.037712 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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