两个list求和_【NO.007】解:如何行列汇总快速求和?

本文介绍了三种在Excel中快速对行列进行求和的方法:1) 使用快捷键进行自动求和;2) 编写VBA宏实现双层循环求和;3) 应用PowerQuery进行复杂数据转换和求和。每种方法都有其适用场景,其中VBA和PowerQuery涉及到编程思维,适合进阶学习。
摘要由CSDN通过智能技术生成
L点上方 关注我们 ,每日 1练 ,每天进步一点点 f4545684c3d23f2e2315e30d2c343c5d.gif 第7期题目内容如下:
由于你在往期的答题中表现不佳,甚至连参与奖都没有混到,因此你今天的任务看起来非常简单……
对下图所示C2:K12单元格区域的数据行列快速求和……
于是你默默打开Excel……
a2a4457ac82f668b16c0f5161110263e.png 原题链接:【NO.007】问题:如何对行列汇总行快速求和? 如果你还没有做这道题,请先思考再向下看↓↓↓↓ 分享几种解法,包含了技巧函数、PowerQuery、VBA… 其中技巧最为简单,VBA也还行,PowerQuery比较考验基本功……   1,技巧解: 其选取C2:K12单元格区域,按自动求和快捷键即可。 58b328fe14782d61b6810b1b20847b4b.gif   2,VBA解: VBA就是在继续强化前面两道题说的双层循环,只是更强调位置感。
Sub ByVBA()
    Dim arr, i As Long, j As Long
    Dim x As Long, y As Long
    arr = Range("c2:k12").Value
    x = UBound(arr): y = UBound(arr, 2) '最大行和最大列
    For i = 1 To x  '遍历行
        arr(i, y) = 0 '列汇总初始归0
        For j = 2 To y - 1 '遍历列,最后一列不用求和
            arr(i, y) = arr(i, y) + Val(arr(i, j)) '列累加求和
            If i = 1 Then arr(x, j) = 0 '行汇总初始值归0
            If i < x Then arr(x, j) = arr(x, j) + Val(arr(i, j))
            '行累加求和,最后一行是汇总行不求和
        Next
    Next
    Range("c2:k12") = arr '数组结果读入区域
    MsgBox "OK"
End Sub
  3,PowerQuery解: 代码如下:
let    源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],    列汇总=Table.AddColumn(源,"汇总",            each List.Sum(List.Transform(Record.ToList(_),                            (x)=> try Number.From(x) otherwise 0 ))),    行汇总=Table.FromRows(            {{"汇总"}&List.Transform(                    List.RemoveFirstN(Table.ToColumns(列汇总)),                    (x)=>List.Sum(                        List.Transform(x,                           (y)=>try Number.From(y) otherwise 0)))},            Table.ColumnNames(列汇总)),    结果=列汇总 & 行汇总in    结果
这道题的PowerQuery解法牵扯到表、列、行三者之间的转换与合并、以及list的遍历与求和,是非常经典的练习题之一。
其计算过程,简而言之……
在计算列求和时,使用Record.ToList语句,将每一行的记录转换为列表,然后使用List.Transform遍历剔除非数值,最后使用List.Sum求和。
在计算行求和时,使用Table.ToColumns语句将所有列转换为由列表构成的列表集合,然后使用两个List.Transform遍历列表和嵌套列表,剔除非数值,使用List.Sum求和,最后再使用Table.FromRows语句转换为表。
将两个部分合并,即为最后结果~ 文件下载: https://pan.baidu.com/s/1PBvEL_YrKrP2A3NR7G7JJw
提取码: snrr   系统学习Excel,推荐加入我的Excel社群 278dc168419e2ae910772ef474b6b4d7.png

更多教程&练习

  • 教程1:零基础学Excel(一)什么是Excel?

  • 作业2:30个工作日后(含特定节假日)是哪天?

  • 作业3:多层条件判断并非IF函数不可!


©看见星光 dceff27e597440ab564e97bd845f0a43.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值