乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > Excel VBA工作薄 6.4番外篇 行列分别计算 vba和函数强强联手-excel减法函数

Excel VBA工作薄 6.4番外篇 行列分别计算 vba和函数强强联手-excel减法函数

作者:乔山办公网日期:

返回目录:excel表格制作

前景提要()

通过昨天的分享,大家对于行列分别计算的场景需求量还是挺大的,小编的初衷也是满足大家的日常工作的需求,既然大家有相关方面的需求,关于msgbox这一系列的内容也比较的简单,趁着还有一点余温,我们就这个问题的方法告诉大家,希望能够满足那些有这个需求的人,其实方法很简单,就是之前学习过的基础知识的一个延伸和扩展运用。

场景模拟

假设这是我们的数据应用场景

Excel VBA工作薄 6.4番外篇 行列分别计算  vba和函数强强联手

我们希望得到每一行,每一列的单独计算,比方说我想要知道每个人的成绩的总和,同时我又想要知道每个学科的总分,这样的条件下就可以使用到今天这个场景了。

我们使用的方法就是inputbox,因为涉及计算的内容不仅仅是加减乘除,我们这里采用公式的方式,VBA+EXCEL函数,强强联手

代码区

Sub TESY()
Dim rng As Range, a As Range
Set rng = Application.InputBox("请选择要计算的单元格区域,仅数值区域,不含标头", "区域的确定", , , , , , 8)
chos = Application.InputBox("请选择计算方法" & Chr(13) & "1:求和" & Chr(13) & "2:求积" & Chr(13) & "3:求平均" & Chr(13) & "4:计数", "汇总方式", , , , , , 1)
choos = Choose(chos, "SUM", "PRODUCT", "AVERAGE", "COUNTA")
rng.Offset(0, rng.Columns.Count).Columns(1).Offset(-1, 0) = choos
rng.Offset(0, rng.Columns.Count).Columns(1).FormulaR1C1 = "=" & choos & "(RC[-" & rng.Columns.Count & "]:RC[-1])"
rng.Offset(rng.Rows.Count, 0).Rows(1).Offset(0, -1) = choos
rng.Offset(rng.Rows.Count, 0).Rows(1).FormulaR1C1 = "=" & choos & "(R[-" & rng.Rows.Count & "]C:R[-1]C)"
End Sub

来看看效果

先选择区域,这里已经明确说明,仅需要选择数值范围,不需要选择标头等内容

Excel VBA工作薄 6.4番外篇 行列分别计算  vba和函数强强联手

选择计算方式

Excel VBA工作薄 6.4番外篇 行列分别计算  vba和函数强强联手

这里我们选择求和来看看效果

Excel VBA工作薄 6.4番外篇 行列分别计算  vba和函数强强联手

每行进行了总分的求和,每列进行了单科所有人总分的求和,so nice

换种方式,我们来求下平均分

Excel VBA工作薄 6.4番外篇 行列分别计算  vba和函数强强联手

每人的平均分,每科的平均分,都分别计算出来了,一次能够实现两种不同的计算。

代码分析

chos = Application.InputBox("请选择计算方法" & Chr(13) & "1:求和" & Chr(13) & "2:求积" & Chr(13) & "3:求平均" & Chr(13) & "4:计数", "汇总方式", , , , , , 1)

这一句就是今天的关键代码所在了,本案例中,通过inputbox将输入框转变成用户交互窗体的模式,在输入框中,我们通过给予预定的选项,来让使用者进行选择,可以根据需要继续增减相应的选项,以期达到自己想要的效果。

相对于上节我们在程序中,通过简单的四则运算来进行计算,本节课的难度也是提升了一些,如果还是在代码中进行计算并得到结果,并不是不可以,但是有局限性

如果在后续的操作中,更改了数据区的数据,最终的结果并不会做出任何改变,因为我们已经在代码中写死了,而实际工作中可能是需要根据改变而变动的,所以这里我们引入了excel的函数,将excel自带的函数和VBA相结合,共同实现我们的效果。

那么在VBA中函数应该如何使用呢?其实就和excel本身函数的使用方法是一样的,比方说我们在求和的时候,看看公式

Excel VBA工作薄 6.4番外篇 行列分别计算  vba和函数强强联手

需要我们提供至少两个参数,并且都是单元格的路径,所以我们在VBA中也是一样的套路,提供两个参数,并且是单元格的路径

(RC[-" & rng.Columns.Count & "]:RC[-1])

实现的就是这样的效果,rng.Columns.Count代表的就是单元格的总列数,往左移动总列数,那就得到了第一列的位置,然后在一定往左移动一列就得到了最后一列的位置了

当然大前提就是我们将整个所选区域虚拟的移动了,怎么移动了呢,

rng.Offset(0, rng.Columns.Count)

所选区域向右移动了rng.Columns.Count列,大致是如下的效果

Excel VBA工作薄 6.4番外篇 行列分别计算  vba和函数强强联手

而使用中选择的方法,我们就可以通过之前学习过的choose方法来结合使用了

=======================================================

今天和大家简单的分享下了在实际工作中, 经常碰到的需要横列分别计算的情况,很多童鞋可能会说我写公式更方便,但是公式只能适用于一种情况,如果明天我要求最大值,后天要求最小值,你就看需要不停的改公式,vba+函数的好处就是可以将整个过程都写好,在实际的运用中,通过选择的方式来让脚本执行不同的模块,非常的方便。

好了,明晚19:00,准时再见。

===============历史相关文章==============================

Excel VBA工作薄 6.1 设置个性化弹窗 提示更加醒目、温馨

Excel VBA工作薄 6.2利用msgbox窗口 实现简易用户对话功能

Excel VBA工作薄 6.3 多条件的对话窗体 让代码通用性更高

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网