按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
中为清单表中的A 到 G 列,即函数中的〃清单!A:G〃,row…num 为被查找区域中的行序数即函
数中的 INT((ROW()+4)/3),col…num 为被查找区域中的列序数即函数中的 COLUMN()。第2、5、
8。。。。。。。行的行号代入 INT((ROW()+4)/3)正好是 2、3、4。。。。。。,COLUMN()在 A 列为 1。因此
公式〃=INDEX(清单!A:G;INT((ROW()+4)/3);COLUMN())〃输入 A 列后,A2、A5、A8。。。。。。单元
格的值正好是清单 A2、A3、A4。。。。。。;单元格的值。这样,表的完整的公式应为
〃=IF(MOD(ROW();3)=0;〃〃;IF(MOD(ROW();3)=1;清单!A1;INDEX(清
单!A:G;INT((ROW()+4)/3);COLUMN())))〃。把此公式输入A1 单元格,然后向下向右填充得
到了完整的工资条表。
为了表格的美观还应对格式进行设置,一般习惯包括标题、姓名等文字在单元格中要取中,数
字要右置,数字小数点位数也应一致,还有根据个人的爱好设置边框。本表格只需对一至三行
的单元格进行设置,然后通过选择性格式设置完成全表的设置。
本工作簿的特点是 1、不对清单表进行操作保持清单工作表的完整,2、全工作表只有一个公
式通过填充得到全表十分方便。
例如:我的单位不大不小,有 200 多号人。最近领导要求把每个员工个人的工资情况打出来,
分发给每位员工。每个员工的工资条上只能有两行内容:一行是分解的项目内容,如基本工资、
岗位工资、总计等等;另一行是对应第一行的具体工资数额。
可以这样解决:Sheet2
1。为 A1 命名为 K
2。为 A3:A250 命名为 XX
从 A3 贴上主索引;数据要连续中间不允许有空格
3。写公式=VLOOKUP(K;DATA;2;0)
有几个字段写几个;位置随您高兴摆
4。 隐藏A 栏
*********************************************************************************
*****
Sub 打印()
Application。ScreenUpdating = False '屏幕不更新
Dim c As Object '宣告 c 为对象;请准备空间
'xx'。Select '选取变量范围
Set c = ActiveCell '设定 c 对象为作用单元格
Do Until IsEmpty(c。Value) '作 Do 循环直到无值时跳出
'k'。Value = c。Value
Set c = c。Offset(1; 0) '设定 c 往下进一格再取主索引值
Sheets(〃Sheet2〃)。PrintPreview '工作表直接打印改 PrintOut
Loop
366
…………………………………………………………Page 367……………………………………………………………
End Sub
另一回答:我是做人事管理的也遇到过你的问题;我用如下方法解决十分方便;而不用任何代码。
方法的原理是调整打印机的自定义纸张大小到恰好显示一个人的工资条的大小;请按如下:
如:我的 excel 工资表将项目内容放在第一、二行,行高为 20。1 ,用 a4 纸横向打印
1、在页面设置中将上、下边距,页眉、页脚均设为零,
在页面设置……工作表………顶端标题行 中输入 1:2;即将放在
第 一、二行的项目内容设成每页标题行
打印方向为横向
2 、、在文件…………打印………属性………纸张………自定义中将纸张的
宽度=280 (单位:毫米)
长度=2970 (单位:毫米)
3、打印时可选 1………200 页,即可打印 200 人的工资条,一张 a4 可打 10 人
确定后预览,可调整下边距至每页显示一张工资条
我的解决办法:我只用了一个公式:
if(mod(row();3)=0;〃〃;if(mod(row)();3)=1;sheet1!a1;index(sheet1!a:g;int((row()+4/3);cllolumn())))
你试一下
(解释:int((row()+4/3) 是这个意思:一个工资表,有列标题,接下来是工资记录。而我在此表
基础上,加一个自动生 成的工资 条表, mod(row();3)=0 ,在此表上用这个表示第三行保留空
白行; if(mod(row)();3)=1;sheet1!a1,表示是第一行取标题列;
index(sheet1!a:g;int((row()+4/3);column() )这是关键的地方:是指它不是第一行,也不三倍数
的行,是记录 行的表示,你想第二行显示记录,则 2+4/3=2 取工资 表的第二行记录;第五
行显示记录,则 5+4/3=3 取工资 表的第三行记录;第八行显示记录,则 8+4/3=4 取工资 表
的第四行记录;第十一行显示记录,则 11+4/3=5 取工资 表的第五行记录;这个公式你可以
根据具体情况变化:尤其是((row()+4/3); 中的4 这个数字,
定制单元格数字显示格式
定制单元格数字显示格式,先选择要定制的单元格或区域,》单击鼠标右键》单元格格式》
选择数字‘选项》选择 自定义‘》在―类型‖ 中输入自定义的数字格式。
如何输入自定义的数字格式:需要先知道自定义格式中那些常用符号的含意,具体可以先
不选择 自定义‘,而选择其它已有分类观看示例‘,以便得知符号的意义。
比如:先选择百分比‘然后马上选择 自定义‘,会发现类型‘中出现0。00%‘,这就是百分
比的定义法,把它改成小数位3 位的百分比显示法只要把0。00%‘改成0。000%‘就好了,把它改
成红色的百分比显示法只要把0。00%‘改成 '红色'0。00%‘就好了。
关于数据引用的问题
在一个工作簿中,假如 A 工作表中的单元格 E8 被 B 工作表中的某单元格引用,现在由于 A 工
作表中插入了行,原来的 E8 现在可能是 E28;结果造成 B 工作表引用数据错误,请问:如何可
以使B 工作表中的引用随着 A 表的变化也作相应的自动调整?
回答:利用“相对引用”来实现,“相对引用”是Excel 中默认的引用方式
例:在工作表 Sheet1 中C2单元格为5,D2单元格为6,在工作表Sheet2 中C3单元格中
输入“=Sheet1!C2+Sheet1!D2”,如果把
C2单元格剪切到C3,那么在工作表Sheet2 中C3单元格中的公式就自动变为“=
Sheet1!C3+Sheet1!D2”
367
…………………………………………………………Page 368……………………………………………………………
如何使 EXCEL 应用程序锁定不让人打开
请问我以下的操作应再如何修改成如密码输入错误则退出 EXCEL。这是我编写在
PERSONAL。XLS 中的一个模块。代码如下;请各高手帮忙为小弟指点一二;不甚感激!
Sub auto_Open()
MsgBox 〃热列欢迎来海源;你吃饱了吗?〃
If Application。InputBox(〃请输入操作权限密码:123〃) = 123 Then
Else
'。。。。。(在这一步中;我想退出 EXCEL;但无法实现请高手指点一二)
End If
End Sub
解答:Private Sub Workbook_Open()
MsgBox 〃热列欢迎来海源;你吃饱了吗?〃
If Application。InputBox(〃请输入操作权限密码:123〃) = 123 Then
Exit Sub
Else
Application。Quit
End If
End Sub
程香宙的修改:
Sub auto_Open()
MsgBox 〃程香宙欢迎你的到来〃; vbQuestion; 〃联系电话:013838751304〃
If Application。InputBox(〃请输入操作权限密码:〃; 〃系统登陆〃) = 123 Then
Else
MsgBox 〃密码错误;请重输〃; vbCritical + vbOKOnly; 〃你还有两次机会〃
If Application。InputBox(〃请输入操作权限密码:〃; 〃系统登陆〃) = 123 Then
Else
MsgBox 〃密码错误;再给你一次机会!〃; vbCritical + vbOKOnly; 〃你还有一次机会〃
If Application。InputBox(〃请输入操作权限密码:〃) = 123 Then
Else
MsgBox 〃你无权进入本系统!请向程香宙申请密码!〃; vbCritical + vbOKOnly; 〃你没有机会啦!〃
Application。Quit
End If
End If
End If
End Sub
数组的运算法则
有 excel 表如下:
姓名 成绩 /王娟 优 /永生 中 / 闵生刚 优 /朱智锐 中 /胡强强 良 /金龙鳞 优 /张正梅 中 /
汪欲生 良 / 闵生刚 中 /王娟 优 /张正梅 优 / 闵生刚 中 /永生 良 /王娟 良 /其中姓名在
sheet1 页的 a 列,成绩在 c 列。我想在 sheet2 页中建立一个表如下:
368
…………………………………………………………Page 369……………………………………………………………
姓名 统计优数 /胡强强 /金龙鳞 / 闵生刚 /汪欲生 /王娟 /永生 /张正梅 /朱智锐 / 同样姓名
在 sheet1 的a 列,统计在 c 列,这里的姓名已经整理为没有重复的姓名。要统计出每人获得优
的数目。请问用什么函数能解决。我用了if((sheet1!c2)=〃优〃;countif(sheet1!a:a;a2));结果是统计
的姓名数,而不是成绩数。如果能统计出来,哪么就是一个动态的当sheet1 中数据变化时,sheet2
中数据应到跟着变化。
有位朋友指导采用下面的式子把上面的问题解决了。这里假设最大记录数为 100
=sum((sheet1!a2:a101=a2)*(sheet1!c2:c101=〃优〃)*1) ,按 Ctrl+Shift+Enter ,但是这
是用到了数组运算,请问数组运算的规则是什么,看到许多地方都可以用数组解决,但不知其
所以然。帮助文件中也没说运算规则。如上式中为什么用*号?谢谢
解答:对于数组公式的含义
sum((sheet1!a2:a101=a2)*(sheet1!c2:c101=〃优〃)*1)
我们来一部分,一部分的讲:
1、(sheet1!a2:a101=a2)
表示用 sheet1!a2:a101 区域中的每一个单元格中的内容与 a2 单元格的内容进行比较,
如果相同结果为“True ”,否则为“False ”。
2 、(sheet1!c2:c101=〃优〃)
表示用 sheet1!c2:c101 区域中的每一个单元格中的内容与 字符串〃优〃进行�