我有一张 Excel 表,用于记录参加过某些活动的人员。现在我想添加一个包含数百名人员的活动,其中一些人员已经参加了其他活动。然后我想按他们参加活动的时间进行排序。
澄清:
实现这一目标的最简单的方法是什么?
谢谢 :)
答案1
这是一个不使用 VBA 的解决方案。当任务比每月一次的任务更罕见时,我会推荐它。
这就是您设置数据的方式 - 注意,cols AD 是“新 cols”。
以下是公式 - 将它们设置在第 2 行,然后向下复制:
A2=IF(ISBLANK(F2),INDEX(J:J,ROW()-COUNTIF(F:F,"*")+1),F2)
B2=IFERROR(T(VLOOKUP($A2,$F:$H,2,FALSE)),"")
C2=IFERROR(T(VLOOKUP($A2,$F:$H,3,FALSE)),"")
D2=IFERROR(T(VLOOKUP($A2,$J:$K,2,FALSE)),"")
A2
从当前活动表中填写所有名称,直到获得空白单元格。然后,您开始从新活动表中填写名称,使用COUNTIF
获取非空单元格的数量并ROW
获取+1
正确的INDEX
/ 名称。
现在您只需对您的活动进行单独查找。
如您所见,您将获得重复项,但它们可以轻松处理。我的建议是 - 将区域 AD 作为值复制到另一个目标,然后使用内置的重复项清除器数据标签。
当然,您可以使用 VBA 来完成此任务,但这项任务通常由缺乏经验的用户完成 - 而要创建用户安全的动态版本,需要编写相当多的代码,并且需要完成更多细节。不过,我想提醒您,这是一项基本的数据库任务,使用数据库函数可以更轻松地完成。
答案2
既然你提到“我想按他们参加某项活动的时间排序”,我假设你的 X 代表时间(@Jook 的答案对此不起作用)。但是,下面的方法适用于时间(或经过轻微调整的 X),并且不使用公式(除了图标下的内容):
假设新活动 3 在名称右侧的列中有值:-
- 将现有工作表数据和标题复制到新工作表中。
- 立即将新活动 3 的数据副本附加到该工作表中。
- 将名称以外的新活动 3 数据跨两列移动到右侧。
- 将“活动 2”标签向右拖移一个单元格。
- 选择整个工作表,数据 > 排序和筛选 - AZ。
- 数据 > 大纲 > 小计,每次更改时:名称,使用函数:最大值,添加小计到:检查活动 1、活动 2 和活动 3 中的每一个,检查替换当前小计和数据下方的摘要,确定。
- 复制选择性粘贴>值,确定。
- 数据 > 排序和过滤 - 过滤,对于名称列文本过滤器,不包含输入 MAX,确定。
- 删除除带有标签的行之外的所有可见行。
- 数据 > 排序和过滤 – 过滤。
- 选择名称列,主页 > 编辑 > 查找和选择,替换,在查找内容:中输入“ MAX”(不带引号),全部替换,确定,关闭。
- 选择整个工作表,数据 > 大纲 > 小计,全部删除。
- 删除名称为“Grand”的行。
- 选择活动列,主页 > 单元格 - 格式,格式化单元格,自定义,dd/mm/yyyy hh:mm;;"" 或适合,确定。
- 节省。
这样,结果将按名称顺序排序,而不管时间如何,然后可以按活动进行排序,但是,考虑到布局,不能方便地按活动排序,无论是 1、2 还是 3。