[英]Excel filtering for merged cells
我正在尝试计算每个员工在他从事的每个项目中的工作时间。 但我不知道如何 select 因为包含员工姓名的单元格像图片中一样合并。 如果我想看项目编号。 3 是工作的员工,Excel 过滤不能取名称“John”,仅对应于 1 号项目。 为了更清楚,我需要知道如何对单元格 A3 和 A4 进行过滤。 如果我取消合并单元格,John 将只在单元格 A2 上,事实上他也在项目 2 和 3 上工作。
谢谢!
如果您有一个合并单元格,并且您尝试对其进行过滤,您将只会得到第一行:
要解决此问题,您首先需要在其他地方创建合并单元格,取消合并过滤器单元格,然后将值填充到所有单元格中:
您现在可以删除临时合并单元格,当您过滤时,您将获得合并单元格的所有行:
{EDIT}这是一个宏,它会自动将上述更改应用于指定范围:
Public Sub FilterableMergedCells()
Dim WorkingRange As Range
SelectRange:
Set WorkingRange = Nothing
On Error Resume Next
Set WorkingRange = Application.InputBox("Select a range", "Get Range", Type:=8)
On Error GoTo 0
'If you click Cancel
If WorkingRange Is Nothing Then Exit Sub
'If you select multiple Ranges
If WorkingRange.Areas.Count > 1 Then
MsgBox "Please select 1 continuous range only", vbCritical
GoTo SelectRange
End If
Dim ScreenUpdating As Boolean, DisplayAlerts As Boolean, Calculation As XlCalculation
ScreenUpdating = Application.ScreenUpdating
DisplayAlerts = Application.DisplayAlerts
Calculation = Application.Calculation
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Dim WorkingCell As Range, MergeCell As Range, MergeRange As Range, OffsetX As Long, OffsetY As Long
OffsetX = WorkingRange.Cells(1, 1).Column - 1
OffsetY = WorkingRange.Cells(1, 1).Row - 1
'Create temporary sheet to work with
With Worksheets.Add
WorkingRange.Copy .Cells(1, 1)
'Loop through cells in Range
For Each WorkingCell In WorkingRange.Cells
'If is a merged cell
If WorkingCell.MergeCells Then
'If is the top/left merged cell in a range
If Not Intersect(WorkingCell, WorkingCell.MergeArea.Cells(1, 1)) Is Nothing Then
Set MergeRange = WorkingCell.MergeArea
'Unmerge cells
MergeRange.MergeCells = False
'Replicate value to all cells in formerly merged area
For Each MergeCell In MergeRange.Cells
If WorkingCell.FormulaArray = vbNull Then
MergeCell.Formula = WorkingCell.Formula
Else
MergeCell.FormulaArray = WorkingCell.FormulaArray
End If
Next MergeCell
'Copy merge-formatting over old Merged area
.Cells(WorkingCell.Row - OffsetY, WorkingCell.Column - OffsetX).MergeArea.Copy
WorkingCell.PasteSpecial xlPasteFormats
End If
End If
Next WorkingCell
.Delete
End With
Set MergeRange = Nothing
Set WorkingRange = Nothing
Application.ScreenUpdating = ScreenUpdating
Application.DisplayAlerts = DisplayAlerts
Application.Calculation = Calculation
End Sub
另一种选择;
具有特定值(例如约翰,红色背景)的所有单元格的条件格式背景,然后按颜色过滤。
不适合所有应用程序,但又好又快。
Chronocidal 的绿色勾号答案需要使用宏。 个人认为go没有必要通过这么繁琐的流程。
假设合并的单元格在 A 列中; 第一个合并的数据在单元格 A2 中。 在合并的单元格列 [B Column] 的右侧创建一个新列。 在单元格 B2 中,键入 =IF(LEN(A2)=0,B1,A2) 并将此公式向下拖动。 它将正确填充数据,您可以在 B 列上应用过滤器。
注意:公式检查左侧单元格的字符长度。 如果为零,则使用正上方的单元格作为答案; 否则按原样使用左单元格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.