Excel中的自动数据sorting/分析

我有四列的forms的数据。 前三列代表time,value1,value 2.第四列是二进制,全是0或1。 有没有办法告诉excel删除时间,值1和值2,当相应的二进制值在第四列是0? 我知道在C ++或matlab中这是很容易的,但由于我无法控制的原因,我必须在Excel中做到这一点。

我的Visual Basic有点生疏,但是这个macros将做到这一点。 只需启动VBA编辑器(Shift + F11),插入一个新模块(如果没有),并添加下面的代码。 然后确保要清理的表位于活动工作表上,并放在代码内部的某处,然后按下VBA编辑器中的运行button(F5)。 那么D列中的所有行都应该消失。

 Sub clean() Dim i As Integer i = 1 While Range("D" & i).Value <> "" If Range("D" & i).Value = "0" Then Rows(i).Delete Shift:=xlUp Else i = i + 1 End If Wend End Sub 

以及你可以做到这一点,使其显示空白,然后操纵新的数据:

  ABCD =if(D1=0,"",time1) =if(D1=0,"",value1) =if(D1=0,"",value2) 0 

用手或者用vba,最快的path是在col.4上sorting,find第一个零,然后删除下面的所有内容。
就像是:

  Sub test() Dim c As Range Range("a1").CurrentRegion.Sort key1:=Cells(1, 4), XlSortOrder:=xlDescending Set c = Range("4:4").Find("0") Range(c.Row & ":65000").Delete 'or .Clear End Sub 

您可以使用filter来仅显示有用的行。 使用额外的字段来计算是否必须显示行。

作为另一种select,你可以把第五列作为1,2,3,4等,然后按列D(二进制)sorting,然后按列E(sorting号)

您需要使用macros来执行此操作,公式无法删除列。

我讨厌编写Excelmacros,但伪代码看起来像这样:

 declare row_marker = 1 while (Workbook.Cells(1, row_marker) contains data) if (Workbook.cells(1, rowmarker).OffsetRight(3).Value == 0) remove_row(workbook.rows(row_marker) else row_marker++; 

这是说从第一行开始,如果该行在二进制列中有0,则删除它,否则,移动到下一行。 注意:如果我们删除一行,因为行向上移动,我们不会移动到下一行,因为我们没有引用该行,但是它在工作簿中是偏移的。