excel公式不excel表公式自动计算算该怎么办

excel公式计算有错误或计算不准确
浏览:2777次
  当我们在使用EXCEL表格计算的时候,难免会遇到公式计算不准确或计算错误的情况。  那么,是什么原因导致公式计算错误的呢?又如何解决这些问题呢?  一、单元格的数据类型不同  使用同一公式对多个单元格进行计算,由于这些单元格的数据格式不一致,也会产生结果错误。这是最常见的错误了。  应该把这些单元格的格式设置为一致的数据类型。  二、公式使用错误  公式使用错误,一般来说,就是函数的参数输入有错误了。或者,还有一种情况就是,公式的数据引用范围不准确。  在此种情况下,可通过重新输入正确的公式来解决问题。  三、公式不会自动计算  有一种情况,就是EXCEL设置了手动计算,所以导致公式不会自动计算,无论如何修改函数及参数,结果都不会变。  应该将EXCEL设置为自动计算的模式。方法为:“工具”→“选项”,在弹出的对话框中,选择“重新计算”选项卡,然后,√勾选“自动重算”。  四、其它  如果以上的方法都实现过了,还是没能解决问题。那么,可使用最简单的办法来解决,那就是,把相应的公式删除,之后,通过菜单的操作办法,重新插入公式,可解决问题。
excel公式计算有错误或计算不准确 的发表时间是: 00:17:18&来源:
爱盲网提供盲人无障碍浏览《excel公式计算有错误或计算不准确 》,感谢作者:撰稿!
<div class="number" id="DiggNum_这几天做了这个命令行的任务,感觉解决的过程太诡异了,必须得记录一下,所以写了本文。
可能对其他朋友也有点参考作用吧。
任务要求:
使用一个命令行的程序
1.调用数据库的存储过程,获得一个数据集。
2.利用此数据集生成Excel.
3.把Excel作为附件发送出去。
需要注意的是,第一行是列头,要显示那种下拉框的效果(其实就是自动筛选,但并没有筛掉任何数据)。
然后数据集只有10列,而Execl要求有13列,即最后的3列是使用了公式来计算的。
比如 第二行的最后3列, 就是利用Excel公式,根据本行前面几个单元格里的数据来计算出的。(其实只用到了第9和第10格)
问题就出在最后3列的公式无法自动计算,一直显示的是&#NAME?
公式我提前赋给3个string,然后在遍历的时候,用当前的行号来替换string里的占位符,
这样就可以为3列赋值了。
关键代码如下:
string TAT86 = "=IF(NETWORKDAYS(I_RowNumber,J_RowNumber)=0, 0, IF(DATE(YEAR(I_RowNumber),MONTH(I_RowNumber),DAY(I_RowNumber)) = DATE(YEAR(J_RowNumber),MONTH(J_RowNumber),DAY(J_RowNumber)), IF(((HOUR(J_RowNumber)-1)-HOUR(I_RowNumber))&0,0,((HOUR(J_RowNumber)-1)-HOUR(I_RowNumber))), IF(NETWORKDAYS(I_RowNumber,I_RowNumber) = 0, 0, IF(HOUR(I_RowNumber)&=18, 0, IF(HOUR(I_RowNumber)&8, 10, HOUR(((DATE(YEAR(I_RowNumber), MONTH(I_RowNumber), DAY(I_RowNumber)))+TIME(18,0,0))-I_RowNumber))))+IF(NETWORKDAYS(I_RowNumber+1,J_RowNumber-1)&=0, 0, NETWORKDAYS(I_RowNumber+1,J_RowNumber-1)*10) + IF(NETWORKDAYS(J_RowNumber,J_RowNumber) = 0, 0, IF(HOUR(J_RowNumber)&=20, 10, IF(HOUR(J_RowNumber)&8, 0, HOUR((J_RowNumber-TIME(8,0,0))))))))";
string TAT88 = "=IF(NETWORKDAYS(I_RowNumber,J_RowNumber)=0, 0, IF(DATE(YEAR(I_RowNumber),MONTH(I_RowNumber),DAY(I_RowNumber)) = DATE(YEAR(J_RowNumber),MONTH(J_RowNumber),DAY(J_RowNumber)), IF(((HOUR(J_RowNumber)-1)-HOUR(I_RowNumber))&0,0,((HOUR(J_RowNumber)-1)-HOUR(I_RowNumber))), IF(NETWORKDAYS(I_RowNumber,I_RowNumber) = 0, 0, IF(HOUR(I_RowNumber)&= 20, 0, IF(HOUR(I_RowNumber) & 8, 12, HOUR(((DATE(YEAR(I_RowNumber), MONTH(I_RowNumber), DAY(I_RowNumber))) + TIME(20,0,0)) - I_RowNumber)))) + IF(NETWORKDAYS(I_RowNumber + 1,J_RowNumber - 1) &= 0, 0, NETWORKDAYS(I_RowNumber + 1,J_RowNumber - 1) * 12) + IF(NETWORKDAYS(J_RowNumber,J_RowNumber) = 0, 0, IF(HOUR(J_RowNumber) &= 20, 12, IF(HOUR(J_RowNumber) & 8, 0, HOUR((J_RowNumber - TIME(8,0,0))))))))";
string TAT24 = "=IF(NETWORKDAYS(I_RowNumber,J_RowNumber)=0, 0,IF(DATE(YEAR(I_RowNumber),MONTH(I_RowNumber),DAY(I_RowNumber))=DATE(YEAR(J_RowNumber),MONTH(J_RowNumber),DAY(J_RowNumber)),IF(((HOUR(J_RowNumber)-1)-HOUR(I_RowNumber))&0,0,((HOUR(J_RowNumber)-1)-HOUR(I_RowNumber))),IF(NETWORKDAYS(I_RowNumber,I_RowNumber)=0,0,HOUR((DATE(YEAR(I_RowNumber+1),MONTH(I_RowNumber+1),DAY(I_RowNumber+1)))-I_RowNumber))+IF(NETWORKDAYS(I_RowNumber+1,J_RowNumber-1)&=0,0,NETWORKDAYS(I_RowNumber+1,J_RowNumber-1)*24)+IF(NETWORKDAYS(J_RowNumber,J_RowNumber)=0,0,HOUR(J_RowNumber))))";
Excel.Range _row_R
for (int excel_row = 2; excel_row &= dt.Rows.Count+1; excel_row++)
for(int excel_col = 1; excel_col &= 8; excel_col ++ )
excelWorksheet.Cells[excel_row,excel_col] = dt.Rows[excel_row-2][excel_col-1].ToString(); //dt[excel_row-2,excel_col-1];
for(int excel_col = 9; excel_col &= 10; excel_col ++ )
excelWorksheet.Cells[excel_row,excel_col] = Convert.ToDateTime(dt.Rows[excel_row-2][excel_col-1].ToString()) ; //dt[excel_row-2,excel_col-1];
excelWorksheet.Cells[excel_row,11] = TAT86.Replace("_RowNumber", Convert.ToString(excel_row ));
excelWorksheet.Cells[excel_row,12] = TAT88.Replace("_RowNumber", Convert.ToString(excel_row ));
excelWorksheet.Cells[excel_row,13] = TAT24.Replace("_RowNumber", Convert.ToString(excel_row ));
当然,公式的赋值也可以用如下的方式:
//should use method get_range(start cell, end cell) to get the range._row_Range.Formula = "=xxx";
只是在我的这个版本里,Cell 木有 &Formula&这个属性,而且转换成RANGE的话也会增加额外的代码,
所以直接在遍历CELL的时候就赋给公式了。
btw, 不管是给cell赋值还是RANGE都不影响显示为 #NAME? &囧...
主要的过程就是上面贴的。
运行出来的结果就是 最后3列显示为 #NAME?
但是点击一个cell,然后在编辑公式那里按回车,结果就能显示了。
难得重新截图,直接把邮件截张图上来算了(真懒。。。):
这就说明了Excel能计算这公式,但在生成的时候却没计算。。。
(奇怪的是,我明明勾选了自动计算,但打开的时候没见到效果啊,不解)
昨天下午,我实在没办法了,就把代码从A服务器拿到B服务器去试试。
A服务器安装的是VS2002和VS2005,以及EXCEL2003.
没错,是VS2002,不是2003!
B服务器是 VS2005 & VS2008 以及EXCEL 2007.
结果在B服务器上生成的文件没问题!
严格的话这样说,A服务器生成的文件,不管是在A服务器上查看,还是在我本机上看都是 #NAME? &(本机有EXCEL2003 &EXCEL 2007)
B服务器生成的文件不管在哪里看都是正确的。
马上给上面反映了,结果回复说产品服务器是用的excel 2003,让我想办法。。。
//邪恶的分割线========================
这几天也查了资料,试了很多办法都不行。。。
就在今天上午,突然想到了可能是插件没发挥作用。
终于快接近真相了。。。
坑爹的MSDN啊,尼玛这哪里是可选参数啊啊!!
(MSDN是 for EXCEL 2003,明显我的也是2003。。。)
然后也试过用程序来加载ANALYS32.XLL 和ATPVBAEN.XLA,但一直报错。
这两个文件其实就是下面的两个插件:
我遍历了实例化出来的Excel对象所有的Add-ins,才发现这两个都已经加载而且 Install 属性等于 True了。
无奈又去查资料,话说今天公司的网络很不错啊。
下面的这图提示了我:
我加了2行代码:
excelApp.RegisterXLL(_AddIn_Anal);&& & & & & & &
excelApp.RegisterXLL(_AddIn_Anal_VBA);
结果就搞定了!
注意,_AddIn_Anal_VBA 是指向的ATPVBAEN.XLA文件,这个XLL方法居然也能加载,表示很给力哈。
打字真累,比敲代码累多了。。。
差点忘了,这3列里的公式有点特殊,其中的 NETWORKDAYS() 方法 需要ANALYS32.XLL 和ATPVBAEN.XLA的支持才能运行。
(或许只要后面的.XLA,但最好两个都加上)。
这才是引起问题的源头!
顺带附上公式如下:
=IF(NETWORKDAYS(I5,J5)=0, 0, IF(DATE(YEAR(I5),MONTH(I5),DAY(I5)) = DATE(YEAR(J5),MONTH(J5),DAY(J5)), IF(((HOUR(J5)-1)-HOUR(I5))&0,0,((HOUR(J5)-1)-HOUR(I5))), IF(NETWORKDAYS(I5,I5) = 0, 0, IF(HOUR(I5)&= 20, 0, IF(HOUR(I5) & 8, 12, HOUR(((DATE(YEAR(I5), MONTH(I5), DAY(I5))) + TIME(20,0,0)) - I5)))) + IF(NETWORKDAYS(I5 + 1,J5 - 1) &= 0, 0,NETWORKDAYS( I5 + 1,J5 - 1) * 12) + IF(NETWORKDAYS(J5,J5) = 0, 0, IF(HOUR(J5) &= 20, 12, IF(HOUR(J5) & 8, 0, HOUR((J5 - TIME(8,0,0))))))))
码字累,收工!坐等下班
阅读(...) 评论() &  excel不能自动求和的原因,归结一下,有下面几个,并同时给出相应的excel不能自动求和的方法。
excel不能自动求和原因一:
  如果公式使用了绝对引用,在下拉复制公式时,Excel是不能自动求和的,方法很简单,去掉公式中的绝对引用符号$即可。
excel不能自动求和原因二:
  如果在Excel下拉公式时,拉下去的时候保持不变,但保存的时候就变了,就能自动求和,得出数据了。这个原因就是是使用了手动计算,按下F9键即可。  如果要恢复自动计算,可以勾选工具》选项》重新计算》自动重算。
excel不能自动求和原因三:
  如果Excel单元格格式是常规文本型格式,而非数字格式的,求和将不能得到正确结果。如是把格式改为数值还是不行,双击单元格试试,格式马上就会变成数值。或者假设数据在A列,在旁边加一空列,输入公式:=0+A1。这个操作的作用是在不改变数据的情况下彻底改变数值的格式。
excel不能自动求和原因四:
  数据是从GIS软件里导出的,改为数值型后Excel还是不能自动求和,原来是文本格式下输入的数据,即使改成数值格式,在运算时EXCEL仍把它当成文本,所以才出现了非得双击才可以的情况。可以这样解决:随便选定一个空单元格,单击“复制”,然后选定求和区域---选择性粘贴/运算/加。  注:如果其余地方导入到Excel,有一些非打印字符存在,excel也是不能自动求和的。可以先使用clear函数对数据进行处理,具体请参考:  这个excel不能自动求和的解决方法和上面原因三的类同。
excel不能自动求和原因五:
  比如在一张excel表中求和,如果求和数值为33,用鼠标拉住单元格自动求和,下面单元格的数值均为33,但实际数据并不为33,如果此时保存该Excel表,数值会自动变为正确的求和数值。这个问题就是将工具——重新计算——自动重算勾选即可。
excel不能自动求和原因六:
  有些朋友习惯在EXCEL窗口最下方一栏加了一栏绘图工具栏/符号工具栏,看起来真像是状态栏。先把这栏关掉,发现原来根本没有显示状态栏。解决:单击“视图”-“状态栏”前面打上对钩,在视图菜单里把状态栏显示出来,再选中一列数字看看,求和结果就可以显示在最下方的状态栏了
发表评论:
TA的推荐TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&2456人阅读
电脑维护常识(15)
试试看按 F9 会不会更新结果。
就需要把手动计算改成自动计算。
Excel 2007: 功能区“公式”选项卡,“计算”组,“计算选项”,“自动”。
Excel 2003:“工具”菜单,“选项”,“重新计算”选项卡,“自动重算”
如果按 F9 后不更新,就应该是有循环引用,需要在 Excel 左下角看看那个单元&#26684;出现循环引用,一个一个解决。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:162467次
积分:1999
积分:1999
排名:第15908名
原创:19篇
转载:133篇
评论:19条
(1)(1)(2)(3)(6)(2)(4)(6)(7)(1)(2)(4)(3)(1)(1)(2)(1)(3)(1)(4)(3)(3)(1)(1)(2)(10)(1)(2)(2)(2)(5)(8)(6)(2)(5)(6)(3)(1)(9)(3)(2)(3)(5)(2)(5)(1)(2)(2)

我要回帖

更多关于 excel工龄计算公式 的文章

 

随机推荐