Excel 排序列表时保留单元格地址

Excel 排序列表时保留单元格地址,excel,Excel,这是我需要的一个简化版本。本质上,我们有一个组件及其状态列表(假设它们已经过测试)。组件BBB有两个子组件BBB1和BBB2。我希望它们的状态反映BBB组件“父级”的状态。很容易做到,除了列表很长之外,我需要保留按我的意愿排序的选项。如果我使用一个简单的单元格引用“=B3”,那么一旦对列表进行排序,这将无效。类似地,命名范围为B3;命名的范围地址是静态的,在列表排序时不会动态更改 我可以通过在某个不在排序区域的地方设置一个“静态”BBB状态来解决这个问题,但这是不雅的,我不喜欢不雅 有什么想法吗

这是我需要的一个简化版本。本质上,我们有一个组件及其状态列表(假设它们已经过测试)。组件BBB有两个子组件BBB1和BBB2。我希望它们的状态反映BBB组件“父级”的状态。很容易做到,除了列表很长之外,我需要保留按我的意愿排序的选项。如果我使用一个简单的单元格引用“=B3”,那么一旦对列表进行排序,这将无效。类似地,命名范围为B3;命名的范围地址是静态的,在列表排序时不会动态更改

我可以通过在某个不在排序区域的地方设置一个“静态”BBB状态来解决这个问题,但这是不雅的,我不喜欢不雅

有什么想法吗


也许VLOOKUP工作表函数可以满足您的需要?请参见

有一个非常简单的解决方案。仅使用了绝对引用,例如=$B3或=B$3或=$B$3

如果我使用一个简单的单元格引用“=B3”,那么一旦对列表进行排序,这将无效


排序不会使这些绝对引用无效。

如果您仅使用=B3,则在排序时,只要您不使用VBA排序,Excel将在排序时自行更新该引用。如果您想在该单元格上保留一个句柄,您可能需要手动再次找到它,或者在移动它的过程中跟踪它的去向。

我不完全确定您的用途和需要,但请尝试以下小公式:

=地址(匹配(“BBB”,A:A,0),1)

它将返回BBB所在的单元格地址。 如果删除公式的地址部分,它将返回行号

还可以修改它以提取“状态”列中的值

如果将此公式放在BBB1和BBB2行的“状态”列中,则当BBB更改时,它将更新:

=索引(A:C,匹配(左(A2,3),A:A,0),2)


让我知道我是否只是温暖的,或者我是否得到了温暖。

对于同一行中的引用,请使用相对引用。(这不是你的问题。)

对于对其他行的引用,如果可以识别每行的唯一键,请使用VLOOKUP(最后一个参数为FALSE)。如果没有自然键,请构造一个代理项,并确保它是唯一的且保持唯一。[我在表头显示下一个要使用的值,并使用条件格式突出显示非唯一性。例如,如果插入复制的行,这很容易中断。]


绝对引用不起作用。它们保留了精确的单元格引用,但在排序后,它现在指向排序到该位置的任何值。我相信这是Excel中的一个缺陷,无论是在代码还是在规范中。人们期望的行为是元组中的值保持不变,即使该元组被排序移动。对于绝对引用,具有绝对引用的单元格中的值会发生变化,即使引用本身保持不变。

如果单元格引用的是另一行中的单元格,排序后,即使使用$符号锁定单元格引用,它也会更改。

excel工作表如何知道BBB1和BBB2的父项是BBB?-1:excel文件不是安全的文件类型。如果您需要帮助,请发布您的代码/电子表格布局。不幸的是,只有当列表按字母顺序排序时,VLOOKUP才能正常工作;我不能保证这一点。@Chris Gunner:根据链接文档,如果您要查找精确匹配项,VLOOKUP不要求对列表进行排序。恐怕使用“自动筛选”下拉列表进行排序。我需要在这些“排序”过程中保持相对的东西(这似乎与您描述的适当排序不同。这太棒了。在600个“组件”列表上有点慢,但仍然有效/您可以将范围缩小到所需的大小:

=索引(间接($F$1,TRUE),匹配(左(A2,3),间接($G$1,TRUE),0),2)

第一个间接引用单元格F1,将您的范围作为字符串放在其中,例如:A2:C600。

第二个间接引用单元格G1,将您的范围放在包含组件代码(BBB、BBB1、BBB2等)的单元格中。在示例中,它位于a列,因此:A2:A600。

这将大大加快速度。