计算与先前值的差异

时间:2016-10-06 16:11:16

标签: excel excel-formula excel-2010

我的数据格式类似于下表中列出的格式:

Example

我需要计算(在B栏中)A列中的数字(有一个数字)和出现在该数字上方的第一个数字之间的差异 - 也在A列中。

对于上面列出的例子:

B2-B4将包含#N/A,B5将包含-1(9-10 = -1)。

B6-B8包含#N/A,B9包含-1(8-9 = -1)。

在此示例中,我尝试使用一系列IF函数,如下所示:

=IF(A5=NA(),"",A5-(IF(A4=NA(),IF(A3=NA(),IF(A2=NA(),IF(A1=NA(),"",A1),A2),A3),A4)))

但它没有用(因为我认为这几乎是无意义的)而且我的实际数据集在A列的值之间可能存在较大差距。

我知道我可以过滤掉A列中的#N/A并运行一个简单的计算 - 但我希望有一个适用于整个列的公式,因为数据可能会发生变化。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以使用以下数组公式:

=IF(ISERROR(A2),NA(),A2-INDEX(A:A,MATCH(2,IF(ISNUMBER($A$1:A1),1))))

作为数组公式,需要在退出编辑模式而不是回车时使用Ctrl-Shift-Enter确认。如果操作正确,那么Excel会将{}放在公式周围。

输入B2,按Ctrl-Shift-Enter,然后拖动/填充。

enter image description here

答案 1 :(得分:1)

非阵列解决方案:

在A列和B列之间插入一列以跟踪最新的数值,使用此公式从单元格B2开始:

=IF(COUNT($A$2:A2)<2,"",IF(ISERROR(A2),"",A2-B1))

将该公式拖到数据集的底部。

在下一栏中,从单元格C2开始插入此公式:

$objValidation = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getDataValidation();
$objValidation->setType( \PHPExcel_Cell_DataValidation::TYPE_LIST );
$objValidation->setErrorStyle( \PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
$objValidation->setAllowBlank(false);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Value is not in list.');
$objValidation->setPromptTitle('Pick from list');
$objValidation->setPrompt('Please pick a value from the drop-down list.');
$formulaString = '"' .  implode(", ", $items_array) . '"';
$objValidation->setFormula1($formulaString);

$objWriter = new \PHPExcel_Writer_Excel2007($objPHPExcel);
$filename = "MyExcel.xlsx";
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

将此公式拖到数据集的底部。

现在,您可以随时显示数字差异(-1),显示A列中的数字值,以及A列中任何时候出现错误值的空白单元格。