我正在尝试将一个 Excel 工作表中的列镜像到同一个 Excel 工作簿中的另一个工作表中。目标是在编辑第一个工作表时更新第二个工作表。基本上,当我在第一个工作表中添加/删除行时,它会在第二个工作表中自动执行相同的操作。
我的列中有员工姓名,随着人们进出办公室,我将相应地添加/删除他们。我的工作表跟踪不同的数据,但员工都是一样的。我的第一张工作表是主工作表,其余工作表相应地提取数据。镜像公式会起作用吗?此外,如何让它应用于整个列?
答案1
这是一个没有 VBA 的想法:“偏移”。
假设您的原始数据在“Sheet1”中,而您想要镜像“Sheet2”中的每个单元格。对于 Sheet2 上的任何单元格,您可以使用:
=OFFSET(Sheet1!$A$1,Row(A1)-1,COLUMN(A1)-1,1,1)
Sheet1!$A$1
:是您的主要参考单元格。这是唯一不能移动或删除的单元格。您可以将第 1 列留空并隐藏,以防止发生这种情况。Row(A1)-1
:“Row(A1)”将确定您所在的 Sheet2 的哪一行。“-1”是为了中和偏移量(您不想读取您所在的同一行,而不是下一行)。COLUMN(A1)-1
:与上面相同,但用于确定您的列。,1,1)
:将范围大小设置为单元格(1 x 1)
我相信,只要您不删除主参考单元格(本例中为 A1),它就应该可以工作,无论您在 Sheet1 上做什么。
您可能会发现此方法存在一些问题:
- 如果数据之间有空白(在 Sheet1 中),则可能需要进行一些格式化或添加公式,以避免显示大量零。
- 如果您尝试使用某些公式作为“counta”或“average”,结果可能会被这些零改变(您可以隐藏它们,但它们仍会影响公式。
答案2
这不能通过简单的公式来完成。如果您在 Sheet1 中添加或删除行,则公式不足以在 Sheet2 中添加或删除行。您需要采用不同的方法。
一种选择是创建管理新行的删除和添加的 VBA。
另一种方法可能是隐藏行而不是删除它们。添加一列,其中将员工标记为活跃或不活跃。然后过滤表格以隐藏不活跃的员工。
可以使用公式将 Sheet1 中的名称拉入 Sheet2,还可以拉出每行的活动/非活动值。例如,如果名称位于 Sheet1 的 A 列中,则在 Sheet2 中使用此公式
=索引(Sheet1!$A:$A,row())
如果状态(活动/非活动)在 B 列,=index(Sheet1!$A:$A,row())
则在另一列中使用,然后对该列进行过滤。
但是,这其中存在一个很大的隐患:如果 Sheet1 中的员工顺序发生变化,Sheet2 中的数据将全部错误。员工顺序仍将与 Sheet1 中的顺序一致,但其余数据将不会按照新的排序顺序传输。
使用 VBA 的方法会更加强大。