Excel数据检查+行过滤器

问题描述 投票:0回答:3

我有一个像这样的excel表(简化):

ID       1/18       2/18         3/18       4/18      5/18      6/18
 1        T           T            T          T         F         T       
 2        T           T            T          T         T         T       
 3        T           F            T          T         T         T

T和F基于比较两张纸的if语句显示 - 也就是所有时段中人1的结果,但是5/18的结果在两张纸上是相同的。

我现在要做的是尝试纠正/检查两者不相同的实例。由于我的表很大,我希望能有这样一种行过滤器,我可以得到这样的东西:

ID           2/18        5/18 
 1             T           F         
 3             F           T  

在这里,我只对2/18和5/18期间的第1和第3人感兴趣,因为那里有错误。

excel filter
3个回答
1
投票

根据以下示例图像,将其放入J1并向右拖动另外5列。

=IFERROR(AGGREGATE(15, 7, ($B$1:$G$1)/(INDEX($B$2:$G$9, MATCH($I$2, $A$2:$A$9, 0), 0)<>INDEX($B$2:$G$9, MATCH($I$3, $A$2:$A$9, 0), 0)), COLUMN(A:A)), "")

把它放在J2中并向右和向下拖动。

=IFERROR(INDEX($B$2:$G$9, MATCH($I2, $A$2:$A$9, 0), MATCH(J$1, $B$1:$G$1, 0)), "")

enter image description here


0
投票

如果您对VBA感到满意,可以使用以下代码。首先选择日期列,然后运行sub:

Sub hideCols()
  Dim col as Range
  For Each col in Selection
     If Application.WorksheetFunction.CountIf(col.EntireColumn, “F”) = 0 then col.EntireColumn.Hidden = True
  Next col
End sub

0
投票

这不是最复杂的VBA代码,但对我有用:

Sub filter1()

Dim lrow As Long
Dim lcol As Long

lrow = Cells(Rows.Count, 1).End(xlUp).Row
lcol = Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, LookIn:=xlValues, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column

For i = 1 To lcol
    Cells(1, i).Select
    If Application.WorksheetFunction.CountIf(Columns(i).EntireColumn, "F") = 0 Then
    Columns(i).Hidden = True
    Else
    Columns(i).Hidden = False
    End If
Next i


For j = 1 To lrow
    Cells(j, 1).Select
    If Application.WorksheetFunction.CountIf(Rows(j).EntireRow, "False") = 0 Then
    Rows(j).Hidden = True
    Else
    Rows(j).Hidden = False
    End If
Next j


End Sub

如果有人有更好的方法来编写这段代码,我很乐意听到。

© www.soinside.com 2019 - 2024. All rights reserved.