与工作表有关的汇总
今天,调度室工作人员做一种表格,是一种汇总表,表格的特征是这样的:
1. 表格名称分别有123···1112,代表12个月份;
2. 数据之间有关联关系,按季度关联,即一个季度第一个月某个数据等于他本是,第二个月等于第一个月和的二个月的和,第三个月等于第一个、第二个、第三个的和;
3. 这一栏公式是合计,没有数值处为空。
她认为每一张表格都要去输入一遍公式,嫌麻烦,问我有没有什么简便方法。
简便方法当然有,但是她所处理的表格就3种,如果为此特意去做一种程序比较费时。
不过,这种引用工作表名称并进行运算的方法对于excel初学者来说算是比较高深了,我回去特地研究了一下,采取以下方法可以解决:
思路是提前工作表名称,进行判断后得出公式。
我们采用函数的方法来实现
编写以下函数:
Function fun(a As Range)
b = a.Address
c = ActiveSheet.Name
c = CInt(c)
If c = 1 Then
Fun=”=”&b
Elseif c=2 then
fun = "=" & b & "+2!" & b
Else
fun = "=if(mod(" & c & ",3)=1," & b & ",if(mod(" & c & ",3)=2," & b & "+" & c - 1 & "!" & b & "," & b & "+" & c - 2 & "!" & b & "+" & c - 1 & "!" & b & "))"
End If
End Function
函数名:fun
参数:a,类型为单元格
变量:b为单元格地址,返回值如“$A$1”、$B$5之类的,c为工作表名,要求名称必须为数字(返回的是字符类型,CInt函数将字符函数转换为整数类型)。
函数值:函数值为字符串,字符串为=if(mod(c,3)=1,b,if(mod(c,3)=2,b+(c-1)!b,b+(c-1)!b+(c-2)!b))
这段字符在excel里正好是一个函数,判断函数:全局意思是如果c除以3的余数为1,则值为单元格b的值,如果C除以3的余数为2,则值为单元格B的值加上c-1(上一张表)的单元格b
值,否则(都不是)值为单元格B的值加上c-1(上一张表)的单元格B的值再加上c-2(上前张表)单元格B的值。
注:将1,2单独列出是为了是c-1,c-2满足条件
这个函数计算的值是字符串,要把这个字符串变成公式并显示值还需要进一步刷新。(比如选择性粘贴-值可以变成公式,但不是值,选中单元格,把光标指到输入栏了,回车可显示计算所得值)这里采用一个过程来处理:
Sub cc()
For Each c In Selection
c.Value = c.Value
If c.Value = 0 Then
c.Value = ""
End If
Next
End Sub
vba计算字符串长度给这个宏设定一个快捷键,用法是选中要转换的单元格,按快捷键即可。
下面我们来解读一下这个宏
Cc
——是宏的名称;
For ···
···
Next
——是循环语句;
Each c In Selection
——在选中的单元格中循环(注意:选中的一定要是单元格)
c.Value = c.Value
——单元格的值进行刷新,值变化为值(相当于“选择性粘贴-值“)
If c.Value = 0 Then
c.Value = ""
End If
——用空格代替值为0 的单元格。
不用编程直接得出工作表名的方法:在单元格内输入:
=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))
解读:这里面涉及几个函数:
1.Cell函数,返回信息函数。CELL("filename")返回工作表完整名称,如C:\Users\Administrator\Desktop\[新建 Microsoft Excel 工作表.xls]2
2.lenstring)返回字符段长度,如len(“www”)=3
Find(string,string),返回字符在字符串中的位置(编号),如
Find(“”,“中华人民共和国”)=3
3.right(string,number)返回字符串最右边的几个数。如rihgt(“12345”,2)=45

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。