L点上方
关注我们
,每日
1练
,每天进步一点点
第7期题目内容如下:
原题链接:【NO.007】问题:如何对行列汇总行快速求和?
如果你还没有做这道题,请先思考再向下看↓↓↓↓
分享几种解法,包含了技巧函数、PowerQuery、VBA…
其中技巧最为简单,VBA也还行,PowerQuery比较考验基本功……
1,技巧解:
其选取C2:K12单元格区域,按自动求和快捷键即可。
2,VBA解:
VBA就是在继续强化前面两道题说的双层循环,只是更强调位置感。
其计算过程,简而言之……
在计算列求和时,使用Record.ToList语句,将每一行的记录转换为列表,然后使用List.Transform遍历剔除非数值,最后使用List.Sum求和。
在计算行求和时,使用Table.ToColumns语句将所有列转换为由列表构成的列表集合,然后使用两个List.Transform遍历列表和嵌套列表,剔除非数值,使用List.Sum求和,最后再使用Table.FromRows语句转换为表。
将两个部分合并,即为最后结果~ 文件下载: https://pan.baidu.com/s/1PBvEL_YrKrP2A3NR7G7JJw
提取码: snrr 系统学习Excel,推荐加入我的Excel社群 ▼
©看见星光
![f4545684c3d23f2e2315e30d2c343c5d.gif](https://i-blog.csdnimg.cn/blog_migrate/db505001d4b242a4eef6d8a7b081e1a7.gif)
由于你在往期的答题中表现不佳,甚至连参与奖都没有混到,因此你今天的任务看起来非常简单……
对下图所示C2:K12单元格区域的数据行列快速求和……
于是你默默打开Excel……
![a2a4457ac82f668b16c0f5161110263e.png](https://i-blog.csdnimg.cn/blog_migrate/2575abd60bbf12fe55fc09e48955c353.png)
![58b328fe14782d61b6810b1b20847b4b.gif](https://i-blog.csdnimg.cn/blog_migrate/3888fbb903a04d1bfff5e76170b7ddcc.gif)
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](https://i-blog.csdnimg.cn/blog_migrate/0dc2e6fd1d9e5c4e42a27428747b9fe3.png)
更多教程&练习
教程1:零基础学Excel(一)什么是Excel?
作业2:30个工作日后(含特定节假日)是哪天?
作业3:多层条件判断并非IF函数不可!
©看见星光
![dceff27e597440ab564e97bd845f0a43.png](https://i-blog.csdnimg.cn/blog_migrate/8110ee32d1bc85c89c1b30e3e771cab5.png)