合并单元格的Excel筛选

合并单元格的Excel筛选,excel,excel-formula,vba,Excel,Excel Formula,Vba,我试图计算每个员工在每个项目上的工作时间。但我不知道如何选择,因为包含员工姓名的单元格如图所示合并。如果我想在第3号项目上看到哪些员工在工作,Excel筛选不能使用“John”这个名称,因为它只对应于第1号项目。为了更清楚,我需要知道如何对单元格A3和A4进行过滤。 如果我不合并单元格,John将只在A2单元格工作,事实上,他还参与了项目2和项目3 谢谢 如果您有一个合并的单元格,并尝试对其进行筛选,则只会得到第一行: 要解决此问题,首先需要在其他地方创建合并的单元格,取消合并筛选单元格,并

我试图计算每个员工在每个项目上的工作时间。但我不知道如何选择,因为包含员工姓名的单元格如图所示合并。如果我想在第3号项目上看到哪些员工在工作,Excel筛选不能使用“John”这个名称,因为它只对应于第1号项目。为了更清楚,我需要知道如何对单元格A3和A4进行过滤。 如果我不合并单元格,John将只在A2单元格工作,事实上,他还参与了项目2和项目3

谢谢


如果您有一个合并的单元格,并尝试对其进行筛选,则只会得到第一行:

要解决此问题,首先需要在其他地方创建合并的单元格,取消合并筛选单元格,并将值填入所有单元格:

然后,您可以复制合并的单元格,并在要合并的单元格上粘贴特殊>格式:

现在,您可以删除临时合并的单元格,当您进行筛选时,将获得合并单元格的所有行:


{EDIT}这是一个宏,它将自动将上述更改应用于指定范围:

Public Sub-FilterableMergedCells()
将工作范围变暗为范围
选择范围:
设置工作范围=无
出错时继续下一步
设置工作范围=应用程序.InputBox(“选择范围”,“获取范围”,类型:=8)
错误转到0
'如果单击“取消”
如果WorkingRange为Nothing,则退出Sub
'如果选择多个范围
如果WorkingRange.Areas.Count>1,则
MsgBox“请仅选择1个连续范围”,vbCritical
转到SelectRange
如果结束
Dim屏幕更新为布尔值,显示警报为布尔值,计算为XlCalculation
ScreenUpdate=Application.screenUpdate
DisplayAlerts=Application.DisplayAlerts
计算=应用程序。计算
Application.ScreenUpdating=False
Application.DisplayAlerts=False
Application.Calculation=xlCalculationManual
调暗工作单元格作为范围,合并单元格作为范围,合并范围作为范围,偏移量作为长度,偏移量作为长度
OffsetX=工作范围。单元格(1,1)。列-1
OffsetY=工作范围。单元格(1,1)。行-1
'创建要使用的临时工作表
使用工作表。添加
WorkingRange.Copy.Cells(1,1)
'在范围内的单元格中循环
对于WorkingRange.Cells中的每个工作单元格
'如果是合并的单元格
如果是WorkingCell.MergeCells,则
'如果是某个范围内的顶部/左侧合并单元格
如果不相交(WorkingCell,WorkingCell.MergeArea.Cells(1,1))则为空
设置MergeRange=WorkingCell.MergeArea
“未融合细胞
MergeRange.MergeCells=False
'将值复制到以前合并区域中的所有单元格
对于MergeRange.Cells中的每个MergeCell
如果WorkingCell.FormulaArray=vbNull,则
MergeCell.Formula=WorkingCell.Formula
其他的
MergeCell.FormulaArray=WorkingCell.FormulaArray
如果结束
下一个合并单元
'在旧合并区域上复制合并格式
.Cells(WorkingCell.Row-OffsetY,WorkingCell.Column-OffsetX).MergeArea.Copy
WorkingCell.Paste特殊XLPaste格式
如果结束
如果结束
下一个工作单元
.删除
以
设置合并范围=无
设置工作范围=无
Application.ScreenUpdate=屏幕更新
Application.DisplayAlerts=DisplayAlerts
应用程序计算=计算
端接头
另一个选项

为具有特定值的所有单元格设置条件格式背景(例如,John,红色背景),然后按颜色过滤


不适合所有的应用程序,但是又好又快。

而且不可能一次将所有内容解合并并将“John”复制到相应的单元格中?这不是一个很好的解决方案,但非常简单。合并的单元格是邪恶的-摆脱它是不可能的,因为在原始的Excel中有数千名员工和项目:(这将永远无法完成…每周..非常感谢,但是这个解决方案将花费我太多的时间need@AndreeaDanaEnache添加了一个VBA宏来完成所有的艰苦工作。(程序员是“高效的”,而不是“懒惰的”-诚实!)@Chronocidal我想使用你的脚本,但它在第42行“找不到对象”出现了问题。你知道这是为什么吗?@RyzaJr。我已经追踪到新版本Excel中处理
Null
值的方式发生了变化,并更新了代码来修复它。