楼主: sy2290
4002 11

[CFA] 几个精算工作中实用的宏(原创) [推广有奖]

  • 0关注
  • 0粉丝

博士生

53%

还不是VIP/贵宾

-

威望
0
论坛币
727 个
通用积分
1.0900
学术水平
9 点
热心指数
16 点
信用等级
10 点
经验
28299 点
帖子
140
精华
0
在线时间
482 小时
注册时间
2009-7-28
最后登录
2023-8-25

楼主
sy2290 发表于 2011-3-18 12:15:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位是否在工作中经常遇到这种烦人的情况,面对一堆公式或数字,需要保留2位小数,或者要把错误值取0,工作简单但是超级烦琐。
终于我忍无可忍,决定编几个小程序,可以作为自定义按钮放在工具栏上,再有这样的工作就一键OK了。

因为本人才疏学浅,所以程序可能有不完善之处,欢迎各位达人来拍砖。并且自己编制的宏,运行后无法再使用excel的自动后退功能,所以使用请慎重。

使用方法如下:

将程序复制到个人工作簿的模块中,这样每次开启excel都可以自动加载(个人工作簿在窗口-取消隐藏中找到,复制程序后可以重新隐藏。如果找不到,可以先任意录制宏,保存在个人工作簿中,再按上述方法操作)。

然后在工具-自定义-工具栏,新建一个工具栏,定义名称,然后选类别-宏,将右侧自定义按钮拖入刚才定义的工具栏,右键:命名,更改按钮图像,指定宏。

大功告成,选定你想操作的区域,点击自定义的按纽,就可以工作了。

共有3个程序,分别是自动保留几位小数,取消保留几位小数公式和错误值取0。

Sub autoaddround()
'适用于空值,数值和公式,自动保留小数
Dim a As Integer
Dim mycell As Range, b As String, d As String, c As String
a = InputBox("保留几位小数")
For Each mycell In Selection
mycell.Select
   b = ActiveCell.Formula
   d = Left(b, 1)
   If ActiveCell.Value <> "" Then  '当单元格非空时运算
      If d = "=" Then         '当单元格是公式
         c = Right(b, Len(b) - 1)
         ActiveCell.Formula = "=round(" & c & "," & a & ")"
   
      ElseIf TypeName(ActiveCell.Value) <> "String" Then   '当单元格非字符,也就是数字
         ActiveCell.Formula = "=round(" & b & "," & a & ")"
      End If
   
   End If
Next

End Sub

Sub unround()
'取消自动保留小数的公式
Dim mycell As Range
Dim b As String
Dim c As Integer
For Each mycell In Selection
   mycell.Select
   b = ActiveCell.Formula
   If Left(b, 6) = "=ROUND" Then

      c = Application.WorksheetFunction.Find(",", b, Len(b) - 4)
         ActiveCell.Formula = "=" & Mid(b, 8, c - 8)
   
   End If
Next

End Sub

Sub errortozero()
'当单元格为公式时,才取0,数值则不行
Dim a As Integer
Dim mycell As Range

a = MsgBox("值错误取0。值正确,选Yes,取原值;选No,取1", vbYesNoCancel, "错误值取0")
If a <> 2 Then  '当选cancel时,不运行
   For Each mycell In Selection
      mycell.Select
      b = ActiveCell.Formula
      d = Left(b, 1)
      If a = 6 Then    '当选yes时
         If ActiveCell.Value <> "" Then
            If d = "=" Then
               c = Right(b, Len(b) - 1)
               ActiveCell.Formula = "=if(iserror(" & c & "),0," & c & ")"

            End If
         End If
      ElseIf a = 7 Then '当选no时
         If ActiveCell.Value <> "" Then
   
              If d = "=" Then
                 c = Right(b, Len(b) - 1)
                 ActiveCell.Formula = "=if(iserror(" & c & "),0,1)"
      
              End If
         End If
      End If
   Next
End If

End Sub
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:精算工作 Application Selection worksheet Election 精算 原创

已有 1 人评分论坛币 收起 理由
skghappy + 100 观点有启发

总评分: 论坛币 + 100   查看全部评分

本帖被以下文库推荐

沙发
zfy1989lee 在职认证  发表于 2011-3-18 12:24:13
1# sy2290   不知道你的具体需求 但是VBA中自己有取小数的函数  不一定非要用worksheetfunction的函数

藤椅
303303 发表于 2011-3-18 12:30:10
高人啊!
let life be as beautiful as the summer flower

板凳
sy2290 发表于 2011-3-18 12:52:13
我的程序就相当于一个自动公式生成器,不然面对无数的单元格,很多时候复制公式是不行的,拖也是不行的,只能手改,相当烦琐.

报纸
happycici 发表于 2011-3-18 14:10:45
相当给力。
excel从此多了一排自定义按钮。
EQ是万能的

地板
水底游鱼 发表于 2011-3-18 14:18:57
非常好啊 谢谢指导
森林里分出两条路,我选择人迹更少的那一条……

7
T-Z-Fan 发表于 2011-3-29 11:52:44
Macro是个好东西,前些日子写了个宏用来自动处理LR estimation,准备闲下来把所有的主流方法和随机模型集成进去。

8
seven0527 发表于 2011-3-30 13:55:50
呵呵 想法很好 赞

9
ww2zw 发表于 2012-3-6 15:15:44
很赞很赞的

10
super_rolex 发表于 2012-3-6 15:56:19
Thanks for share

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-3 03:54