Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1940|回复: 7

[已解决]谢谢zjdh 老师。我的程序错在哪儿了

[复制链接]
发表于 2011-8-18 15:31 | 显示全部楼层 |阅读模式
本帖最后由 lhj323323 于 2011-8-18 21:01 编辑

老师:
我的程序本是将数据源进行折分,并计算其使用年限,可是老是报错,写的是错误13,类型错误。

后来想用笨办法,可结果却都是633天,不知我错在哪里了,


我希望采用第一种方式导出结果,详细说明请看上传的附件。

谢谢。
最佳答案
2011-8-18 19:46
本帖最后由 zjdh 于 2011-8-18 19:46 编辑

你要是把相减的一段改成如下,就不报错了,但一些答案会报错:
  1. For x = 2 To Myr1
  2.         .Cells(x, 13).Value = Application.Days360(.Cells(x, 12), .Cells(x, 11))
  3. Next x
复制代码

需求.rar

54.63 KB, 下载次数: 7

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-8-18 17:26 | 显示全部楼层
本帖最后由 zjdh 于 2011-8-18 17:27 编辑

你的文件存在2个问题:
1.  你的启用日期中月和日反了,所以只能作为文本处理,相减当然出错!     可用公式
=DATE(RIGHT(D2,4),MID(D2,4,2),LEFT(D2,2))更正,用你的第一个方法就可以运算了。

2. 你把选项中的“自动计算”关闭了,所以复制公式后结果都是一样的!

回复

使用道具 举报

 楼主| 发表于 2011-8-18 18:14 | 显示全部楼层
本帖最后由 lhj323323 于 2011-8-18 18:16 编辑

回复 zjdh 的帖子

我把下面这一段暂时取消后
    For x = 2 To Myr1
         .Cells(x, 13) = .Cells(x, 11) - .Cells(x, 12)
    Next x
结果表的K、L列均能导出启动日期所对应的天数,这说明“启动日期已调整为日期格式了
arr2(x, 7) = Right(arr1(x, 1), 4) & "-" & Mid(arr1(x, 1), 4, 2) & "-" & Left(arr1(x, 1), 2)
我也把设置调整为自动计算

用函数对结果表的K、L列是能够进行加减运算的
但是加了下面这一段
    For x = 2 To Myr1
         .Cells(x, 13) = .Cells(x, 11) - .Cells(x, 12)
    Next x
程序提示是类型不匹配。我想问这一段出错的原因。

回复

使用道具 举报

发表于 2011-8-18 19:34 | 显示全部楼层
你自己看看那个“程序”页中D列出现了中文字,转换后在L列也出现中文字,日期减除文本会匹配吗??!!
回复

使用道具 举报

发表于 2011-8-18 19:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2011-8-18 19:46 编辑

你要是把相减的一段改成如下,就不报错了,但一些答案会报错:
  1. For x = 2 To Myr1
  2.         .Cells(x, 13).Value = Application.Days360(.Cells(x, 12), .Cells(x, 11))
  3. Next x
复制代码
回复

使用道具 举报

 楼主| 发表于 2011-8-18 20:24 | 显示全部楼层
本帖最后由 lhj323323 于 2011-8-18 21:00 编辑

回复 zjdh 的帖子

四楼的问题解决了
    .[b:b].Replace "- 石武_", ""
    .[b:b].Replace "- 石武", ""

五楼的问题能否再加个运算式
.Cells(x, 13).Value = Application.Days360(.Cells(x, 12), .Cells(x, 11))
上面的运算式是两时点的差额
我想在此基础上再除以365,得出的结果再用下面的函数CEILING()

CEILING((a-b)/365,1)
运用到程序中该怎么表示,刚才您写的语句仅针对了(a-b)

我的本意是计算这两个时点之间过了多少年,比如370天就算2年,所以才有CEILING((a-b)/365,1)的想法
不知有没有这样的函数能直接计算两个时点之间过了多少年。如有的话,就不必CEILING((a-b)/365,1)了

year(a)-year(b)结果表好像不能正确反映我的需求
比如year(2011-8-2)-year(2010-7-31),应该算2年,
而year(2011-8-2)-year(2010-8-3),应该算1年,
而且year默认是360天而不是365天

试出来了,成功。
.Cells(x, 12).Value = Application.Ceiling(Application.Days360(.Cells(x, 11), Sheet1.Cells(7, 4)) / 365, 1)


回复

使用道具 举报

发表于 2011-8-18 22:02 | 显示全部楼层
这样的函数还有:
ROUNDUP
回复

使用道具 举报

 楼主| 发表于 2011-8-18 22:26 | 显示全部楼层
回复 zjdh 的帖子

谢谢老师了。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 17:23 , Processed in 0.389216 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表